1

我正在为 iOS 开发一个蛇游戏: https ://github.com/ScottBouloutian/Snake

我的目标是让 AI 以最佳方式完成蛇游戏(让蛇填满棋盘)。

我正在使用 IDA* 查找从蛇当前位置到食物的路径。这行得通。但是,该算法没有考虑到未来可能需要获得更多食物的事实。结果,有时它往往会陷入困境。

即蛇在任何给定时间的目标是寻找食物,而它的目标应该是填满棋盘(沿途寻找食物)。

如何添加或修改这种方法以使 AI 赢得蛇游戏?我应该使用更好的方法吗?我只是想提出一些想法。谢谢!

4

1 回答 1

4

如果棋盘是一个静态矩形(不是圆环 - 所以没有跨越边界),那么唯一的最佳策略是找到一组通过棋盘的最长闭合路径,使得棋盘中的每个点都在至少一条路径中。

如果一个板是空的(没有障碍物),那么表格中存在一条“终极”路径

 16|.1|.6|.7
 15|.2|.5|.8
 14|.3|.4|.9
 13|12|11|10

它穿过所有瓷砖,遵循这种模式的蛇最终会吃掉所有食物,并填满整个棋盘

如果有一些障碍,那么这样的路径不一定存在,那么你应该找到一组这样的最长路径,并在它们之间切换,当食物出现在当前路径的无法到达的地方时。

例如

#######
#.....#
#.#.#.#
#.....#
#######

在这里,您必须考虑两条路径,一条最长,绕过整个棋盘,但错过了中心点,还有一条小环穿过它。只要食物没有出现在中心,就应该使用外环。希望当你填满所有剩余的块时食物出现在中心 - 你会“赢”。如果它出现得更快 - 你必须吃掉它(切换到另一个循环)并且取决于你当前的长度 - 你会回到最好的循环,或者击中你的尾巴并“输掉”。在每种情况下,您的分数都将是使用这些食物位置在棋盘上获得的最佳分数。

非基于 A*的方法会找到最优解,这是完全不同的问题,您应该寻找最长的闭合路径,而不是最短的。

于 2013-08-20T06:41:48.773 回答