【问题标题】:level-generation algorithm for a game similar to Unblock Me类似于 Unblock Me 的游戏的关卡生成算法
【发布时间】:2013-02-05 06:21:15
【问题描述】:

对于类似于 Unblock Me 的游戏来说,什么是不错的关卡生成算法?

我的第一次尝试是从一个已解决的关卡开始,然后倒退。我从板右侧出口旁边的红色水平矩形开始。最初,棋盘上的其他棋子为零。因此,我尝试将伪随机添加到所需的片数(比如七)。仅限于水平或垂直部分的关卡不是很有趣,所以我在添加时在水平和垂直部分之间交替。最后,我尝试通过随机移动它们来打乱这些碎片。通过几个示例后,很明显这种方法经常会产生无趣的关卡。最小移动计数也是未知的。

下一次尝试以不同的方式解决问题。级别是随机生成的。然后搜索算法找到解决难题的最小移动数(如果可能的话)。虽然我还没有实现这一点,但我认为它会创建一些有趣的关卡。由于板子相对较小(10x10 上限),我认为运行时间对于生成与应用程序捆绑的关卡是可以接受的。最小移动计数也是已知的,这对于得分很重要。

我怀疑第一种方法是否有效。但是,我没有考虑过的变化可能会起作用。我对第二种方法的唯一保留是潜在的代码复杂性。我认为这将是一个带有备忘录表和 BoardState 对象的 BFS。在深入研究第二种方法之前,我想听听一些替代方案。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    我会这样做:

    • 生成游戏的随机状态,其中红色矩形位于出口旁边
    • 从该状态开始计算板的完整状态空间
    • 选择状态空间中距离已解决状态最远的状态之一作为实际问题。我将使用不同棋子的移动次数作为距离度量,即连续计算同一棋子的多次移动为 1
    • 如果生成的状态空间太小,移除碎片并重做
    • 如果生成的状态空间很大,但任何状态到解的距离都很小,则添加碎片并重做

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多