对于类似于 Unblock Me 的游戏,什么是体面的关卡生成算法?
我的第一次尝试是从一个已解决的关卡开始,然后向后工作。我从板右侧出口旁边的红色水平矩形开始。最初,棋盘上的其他棋子为零。因此,我尝试将伪随机添加到所需的片数(比如七)。仅限于水平或垂直部分的关卡不是很有趣,所以我在添加时在水平和垂直部分之间交替。最后,我尝试通过随机移动它们来打乱这些碎片。通过几个示例后,很明显这种方法通常会生成无趣的关卡。最小移动计数也是未知的。
下一次尝试以不同的方式解决问题。级别是随机生成的。然后搜索算法找到解决难题的最小移动数(如果可能的话)。虽然我还没有实现这一点,但我认为它会创建一些有趣的关卡。由于板子相对较小(上限为 10x10),我认为运行时间对于生成与应用程序捆绑的关卡是可以接受的。最小移动计数也是已知的,这对于得分很重要。
我怀疑第一种方法按原样工作。但是,我没有考虑过的变化可能会起作用。我对第二种方法的唯一保留是潜在的代码复杂性。我认为这将是一个带有备忘录表和 BoardState 对象的 BFS。在深入研究第二种方法之前,我想听听一些替代方案。