我正在为iOS开发蛇游戏: https://github.com/ScottBouloutian/Snake
我的目标是让AI最佳地完成蛇的游戏(让蛇填满棋盘)。
我正在使用IDA *找到从蛇的当前位置到食物的路径。这有效。然而,该算法没有考虑到将来可能需要获得更多食物的事实。因此,有时它往往会陷入困境。
即。在任何给定时间蛇的目标是找到食物,而它的目标应该是填充板(沿途寻找食物)。
如何添加或修改此方法以使AI赢得蛇游戏?我应该使用更好的方法吗?我只是想提出一些想法。谢谢!
答案 0 :(得分:4)
如果一块板是一个静态矩形(不是环面 - 所以没有穿过边界)那么唯一的最佳策略是通过板找到一组最长的闭合路径,这样每个点在董事会中至少有一条路。
如果一块板是空的(没有障碍物),则表格中存在“终极”路径
16|.1|.6|.7
15|.2|.5|.8
14|.3|.4|.9
13|12|11|10
经过所有瓷砖的蛇,遵循这种模式的蛇最终将吃掉所有食物,并填满整个木板
如果有一些障碍物,那么这条路径不一定存在,那么当食物出现在当前路径的无法到达的地方时,你应该找到一组这样的最长路径,并在它们之间切换。
例如
#######
#.....#
#.#.#.#
#.....#
#######
在这里,您需要考虑两个路径,一个最长的路径,围绕整个板,但缺少中心点,一个小循环通过它。只要食物没有出现在中心,就应该使用外环。希望如果食物出现在中心,当你填满所有剩余的块 - 你将“赢”。如果它出现在那里 - 你必须吃它(切换到另一个循环)并根据你当前的长度 - 你将回到最佳循环,或打你的尾巴和“失去”。在每种情况下,您的分数将是最好的,可以通过这些食物来实现。
基于非A * 的方法会找到最佳,这是完全不同的问题,你应该寻找最长的关闭路径,而不是最短