欢迎使用小文版五子棋
网络对战部分需在不同的机器上方可使用。
不过可以在本地模拟里感受其功能
操作部分简单即不罗嗦了。嘿嘿
下面说说AI的思想
初级思想(网上搜索得):
一,先求五子棋的获胜组合
在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得
获胜组合的总数。我们假定当前的棋盘为10*10。
(1),计算水平方向的获胜组合数,每一列的获胜组合是:6,共10列,所以水平方向的获胜组合数为:6*10=60
(2),计算垂直方向的获胜组合总数,每一行的获胜组合是:6,共10行,则垂直方向的获胜组合数为:6*10=60
(3),计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36
(4),计算反对角线方向的获胜组合总数,反对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36
这样所有的获胜组合数为:60+60+36+36=192
二,建立和使用获胜表
我们已经计算出了一个10*10的五子棋盘会有192种获胜方式,这样我们可以利用数组建立获胜表,获胜表的主要作用是:1,判断当前的获胜方式是否有效;2,判断当前的获胜方式中到底有多少子落入该获胜组合中。详细的使用您将在后面的程序中可以看出。
三,分数的设定
在游戏中为了让计算机能够决定下一步最佳的走法,必须先计算出计算机下到棋盘
上任一空格的分数,而其中最高分数便是计算机下一步的最佳走法。
原理:我们判定当前讨论的空格与当前讨论的点有几种获胜的方式,有几种该空格就加几分。这种原理初听起来似乎是无法入手,没关系,当您了解我们后面的程序后您就会明白这种决策原理了。
这种决策有一些缺陷,因为如果只根据这个模型设计,就有可能出现电脑或玩家有三个子连成一线的时候,计算机却判断不出,它认为其他某些空格是当前的获胜的最佳位置而不去攻击或防守。没关系我们完全可以通过一个加强算法来改变当前的分值情况,也就是说当电脑或玩家有三个子或四个子连成一线时,我们通过加强算法将当前与三个子或四个子有关的空格的分值提高,从而可以弥补这一缺憾。
四,攻击与防守
以上的方式,事实上计算机只是计算出了最佳的攻击位置,为了防守我们还应计算当前玩家的最佳的攻击位置。这样有什么用呢?道理很简单,如果玩家最佳攻击位置的分数大于计算机最佳攻击位置上的分数,那么计算机就将下一步的棋子摆在玩家的最佳攻击位上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。
中等思想:
改进初级的攻防失调缺陷,并增加了必胜判断以防止对方已经三子电脑(因攻分>防分,比如电脑刚好下了子后能造成2个三行,分会很高)还选择进攻。
高级思想:
在前面的基础上细化了每一种组合的记分模式,每次记录分数的时候把两端的子也包含进来了,七子检查,看两端是否阻塞分别计算分数。
作者: 李文耀(lovebit),7月19
PS:欢迎来信交流指点AI技术,个人邮箱yjandlwy@163.com
评论0