人机对弈算法属于策略型人工智能算法,本游戏中设置了人机对弈的游戏模式,其算法如下:
1, 设置所有获胜组合,获胜表
将可能出现的获胜组合存入计算机中,计算机根据此组合判断玩家或计算机是否胜利。例如:10×10的棋盘的获胜组合如下图:
得出棋局可能出现的获胜组合,此组合用于后期设计AI对弈。
最后,将所有的获胜组合存入一个数组中,即形成获胜表。例如:A[1][1][2]表明A的位置为第2行,第2列(数组从0开始计算)。它在获胜组合中的保存在第三个位置。
再设置一个胜利判断数组 INT WIN[计算机/玩家编号][获胜组合编号]ds 玩家/计算机每下一步,则在相应的WIN数组上自加一次。当WIN数组达到5或6时,表示已经有一方胜出;当一方占据了另一方的关键位置,致使另一方无法利用该获胜组合失效,则此时另一方的WIN数组设置为7,表示另一方已经无法由被占据的组合上获取胜利。该步骤为算法的关键。
2, 计算棋格获胜分数
在计算机下棋之前,会计算空白棋格上的获胜分数,根据分数高低获取最佳位置。计算机会将棋子下在获胜分数最高的地方。
获胜分数的计算机规则,是以包含棋格所在位置的获胜组合数目,以及目前棋盘上这些获胜组合中已经存在的棋子数目的多少来计算获胜分数。
当可获胜组合中已放置的棋子数越多,那么在这个获胜组合上的空棋格上下棋子而赢得棋局的可能性越大,所以分值越高,当已放置4颗棋子时,必须在第五个空棋格上设置绝对高的分值。
当获胜组合上有部分位置已被对手的棋格占据而无法连成五子时,获胜组合上空棋格的获胜分数会直接设置为0。
当有两组及其以上的获胜组合位置交叉时,对该位置的分数进行叠加,形成分数比周围位置明显高。
3, 计算机的攻击与防守
计算机计算获胜分值越高的棋格,就能确定能让自己的棋子最有可能达成联机的位置,也就是最佳进攻位置,而一旦计算机能确定自己的最高分值的位置,计算机就具备了进攻能力。同理,计算机能计算出玩家的最大分值位置,并抢先玩家获得该位置,这样计算机就具有了防御的能力。
总述:该算法的关键所在就是判断每个空棋格的分值,据此来实现人机对弈计算机的进攻与防守。该算法的重点就是设计获胜组合用于后期的判断,该算法的难就是实现空棋格的最佳位置的计算。但是该算法的人工智能程度比起其他算法有明显的优势。
参考文献:《VISUAL C++游戏编程基础》 作者:荣钦科技 主编:肖钦亮