策略游戏的算法

时间:2010-01-28 01:55:28

标签: algorithm language-agnostic artificial-intelligence

这是我一直在玩一个星期左右的问题,由同事提出:

想象一下一场比赛 36x36 grid。游戏的目标是创建任意大小的正方形的四个角(例如,2x2,3x3,4x4等)。第一个玩家将游戏块放在除中心四个网格空间之外的任何地方。在第一步之后,玩家可以将他们的游戏块放在网格上的任何位置。放置后,游戏片段无法移动。就是这样;游戏简单而有趣。

我一直试图想出一个算法来赢,或者至少在这场比赛中取得好成绩。有什么建议吗?

4 个答案:

答案 0 :(得分:7)

这是一个完美的信息游戏,玩家轮流,如国际象棋,因此国际象棋引擎中使用的相同方法适用于此。使用minimax(可能使用alpha-beta pruning)算法搜索有效移动树。您可以使用一些评估功能来指导您的搜索,支持具有最接近完成的正方形的位置。

答案 1 :(得分:3)

就像FogleBird写的那样,Minimax算法效果最好。问题是如何评估当前董事会的得分。游戏相当复杂,开始时有超过一千个领域。在像tic tac toe这样的小型游戏中,您可以计算所有可能的移动,直到搜索树在minimax中结束,然后您为获胜玩家提供1点,为丢失提供-1并回溯树以找到您的最佳移动。在这个游戏中,你需要某种heuristic来计算三个10次移动后的棋盘分数。

我没有太多关于游戏的信息,所以我只能猜测好的启发式:

  • 因完成正方形而得分(如果你可以得到超过一个方格)这将是最简单的方法因为你的启发式与游戏点直接相关
  • 由于敌人已完成的方格而减去分数
  • 可能的方格数
  • 董事会两侧拥有的领域数量
  • 小区内拥有的土地数量

有很多可能的启发式方法,大部分时间你需要混合其中一些。

答案 2 :(得分:2)

你需要填充方块还是只放在角落里?

例如,以下是胜利吗?

.......................
.X..X..................
.......................
.......................
.X..X..................
.......................

或以下?

.......................
.XXXX..................
.X..X..................
.X..X..................
.XXXX..................
.......................

或以下?

.......................
.XXXX..................
.XXXX..................
.XXXX..................
.XXXX..................
.......................

答案 3 :(得分:0)

好吧我正在阅读垃圾进入游戏......因为它含糊不清.. 我假设这个游戏类似于“点和线”,其中移动空间是用一条线连接2个相邻的点。所以2x2网格将有9个顶点,4个1x1胜利位置和1个2x2胜利位置。游戏以完成广场的人赢得比赛结束,并且一旦两名球员都用尽了可靠的解决方案,就会打平。

因为你的工作方块有些逻辑很好。您可以计算所有可能框的任何行的成员资格。因此在2x2示例中,径向将具有2个1x1框的成员资格,而一个边将具有一个1x1和一个2x2的成员资格。这种成员资格变得很重要。

在游戏开始时,您将为所有线段生成所有成员资格。制作2份......(就像打战舰一样)ENEMY COPY将被启动到他完成每个盒子所剩下的转弯次数..所以在36x36上将有144个动作来完成大盒子 4套140moves完成4个35x35盒

在移动过程中,您将减少ENEMY COPY上所有受影响的框 在移动过程中,您所做的任何移动都会使包含移动的所有框无效。你将这些设置为负1,或无限或20亿...只是要知道这些方块是不可能的。

你现在创建一个ANTI-ENEMY COPY,它与敌人副本相反..这包含完成给定方格的移动次数。

对于特定的举动..首先检查胜利情况。如果你能够移动并赢得胜利。 (一个广场的antienemy) 然后检查是否需要块。 (任何一方的敌人棋盘)

现在添加一个minimax类型函数,如果你这么倾向..

或使用搜索来找到尽可能多地消除低完成方格的位置,或者创建一条减少反敌板上多个低方块的线。这应该是合理的,因为它不是试图完成任何特定的方格,而是一个极小极大,你的低分射击将是一个更好的场景。