类似于Unblock Me的游戏的等级生成算法

时间:2013-02-05 06:21:16

标签: algorithm

对于类似Unblock Me的游戏来说,什么是一个不错的等级生成算法?

我的第一次尝试是从一个已解决的关卡开始并向后工作。我从电路板右侧出口旁边的红色水平矩形开始。最初,董事会没有其他零件。所以我试着伪随机地添加碎片到所需的碎片数(比如七)。仅限于水平或仅垂直片段的级别不是很有趣所以我在添加时在水平和垂直片段之间交替。最后,我试图通过随机移动它们来争夺碎片。经过几个例子后,很明显这种方法经常产生无趣的水平。最小移动次数也是未知的。

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

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

1 个答案:

答案 0 :(得分:2)

我会这样做:

  • 生成游戏的随机状态,红色矩形位于出口旁边
  • 从该状态开始计算电路板的完整状态空间
  • 选择状态空间中距离已解决状态最远的状态之一作为实际问题。我会用距离测量不同部分的移动次数,即连续计算同一块的多次移动为1
  • 如果生成的状态空间太小,请删除片段并重做
  • 如果生成的状态空间很大,但从任何状态到解决方案的距离很小,请添加片段并重做