C/C++AI五子棋开发(棋盘、棋子以及防守的分析)

  

学习提示:如果没有C语言与Windows项目开发基础可以通过下方链接学习:

0基础C语言学习与训练

0基础C++学习与训练

Windows项目开发系列

 

 1、棋子的描述

   在五子棋中它只有两种类型的棋子,分别是黑子与白子,而AI程序如何认识棋子呢?

 那么,我们可以把棋子最基本的共有属性提取出来,例如:棋子的颜色与位置,从而,形成一个节点,

 而每个节点就代表着一个棋子,这样,AI程序就可以通过节点中的信息知道棋子是黑子还是白子,以及,

 在棋盘中的位置,从而,AI程序就可以认识并辨别不同颜色的棋子了。

 

 2、棋盘的标记

   AI程序在落子前需要判断棋盘的位置上能否落子。就像人在落子前,会先(观察对应的位置)是否存在棋子,

 如果没有,才可以落子。所以,就需要为AI程序构建一个棋盘标记,如下图。

  例子:

     

  例子分析:

  通过上面的例子,我们可以直观地看到,在一个棋盘上没有落子的位置标记为0。

  已经落子的位置标记为1或2,区分AI与对手,这样,AI程序就可以知道哪个位置可以落子了。

 

 3、棋子的查找

   对于AI程序,它需要知道当前的(对手与自己)落了多少棋子,以及,每个棋子的位置,

  从而,作出正确的进攻与防守判断。

   那么,AI程序可以每次都对(棋盘)进行扫描,从而,根据(棋盘上的标记)找出所有(棋子与对应的位置),

  但是,这样做会耗费较多的时间,那么,怎样做才可以更有效率呢?请看下面的例子。

  例子:

     

  例子分析:

    通过上面的例子,我们可以直观地看到,一共有3颗棋子,而每颗棋子描述的内容属性都是相同的,即(白子)

  以及(所在位置的行列号)。

    那么,我们只要在白子或黑子每次落子后,把信息保存到一个节点中,然后,与前一个相同属性的同色棋子

  节点连接起来,从而,形成一个有序的队列,那么,当AI程序需要知道当前棋盘中有多少棋子,以及,每个棋子的

  信息时,就可以从这个队列中快速地查找到,而不需要对整个棋盘进行扫描,从而,提高了运行的效率。

 

 4、防守判断(活三威胁)

  什么是五子棋中的活三?

  (活三)就是在(连续4个位置)中,有3个同色的棋子,或者,3个连续的同色棋子,

  同时,没有(不同色)棋子阻挡时,就称为(活三),而(活三)可以有多种不同的组合,

  接下来,我们结合例子进行学习。

  例子1:

   

  在例子1中,我们可以看到(白子A、B、C)在(连续的4个位置)中,

  同时,在同一行中(白子A)的左方与右方没有(不同色棋子)的阻挡,

  (白子C)的右方也没有(不同色棋子)的阻挡,所以,这种情况就称为(活三)。

  例子2:

  

  当前的(例子2)与(例子1)都形成了(活三),只是(白子B)的位置改变了,如果要区分这两种情况,

  可以使用(分值计算)进行辨别,因为,它们计算出来的分值是不一样的,而如何进行(分值的计算)

  我们将在后面的章节中再为大家详细介绍。

  例子3:

 

  当前的(例子3)是3个白子相连,当AI程序(判断出)以上3种情况之一时,就需要进行防守落子,

  (例子1与例子2)的防守位置比较好判断,(例子1)的防守位置就在(白子A与白子B)之间,

  而(例子2)的防守位置在(白子B与白子C)之间。

  但是,(例子3)的情况,在防守时可以有两个选择,要么在(白子A)的左方落子防守,

  要么,在(白子C)的右方落子防守,具体选择哪个位置落子更好,就需要AI程序作进一步的分析,

  而这些内容将会在后面的章节中再为大家详细介绍。

 

 4、防守判断(冲四威胁)

   什么是五子棋中的冲四?

   (冲四)就是在某个方向(形成)4个同色相连的棋子,并且,只有一个位置可以(形成)五子相连的情况,

   就称为(冲四)。

   例子1:

    

   在例子1中,我们可以看到(白子A、B、C、D)形成4个同色相连的情况,同时,(白子A)的左方被(黑子)

   阻挡,并且只有在(白子A与B)之间落子,才可以形成五子相连,所以,这种情况就称为(冲四)。

   例子2:

    

    在例子2中,我们可以看到3种不同的情况,白子都形成了(冲四),那么,只要对不同的情况进行分值的计算,

    AI程序就可以把它们区分形来,进行落子防守的判断。

 

   目前,我们已经初步了解到一个AI五子棋是如何进行(棋子的描述、棋盘的标记、棋子的查找),

   以及,什么是活三与冲四的防守判断,那么,在后面的章节中,我们会继续为大家介绍什么是分值的定义与计算

   等的内容,从而,让大家一步一步地掌握到如何去开发一个人工智能的五子棋程序。