最近做了五子棋,记录下自己完成五子棋的人机对战的思路。


棋盘的权值存在一个二维数组中),从中找出权值最大的点坐标,并下子(白子)。


如何遍历黑子周围的棋子情况? 另一个是:如何设定权值?


    首先,是设定权值。这个没有固定的设定方案,可以先试着设定,然后,尝试效果后(主要是白子的攻防情况是否合理),再调整。

    以下是我的设定方案:


   

五子棋人机对战 java开发 五子棋人机对战怎么赢_权值


设置权值的一个很重要的目的是为了进行防守,所以应当在连续黑子的两端(下面图中的橙色区域)设置权值,这样就有利于白子填充在连续黑子的两端,从而达到防守的目的,下面这张图可以说明:

    

五子棋人机对战 java开发 五子棋人机对战怎么赢_权值_02

    中心的黑子:表示当前所下的黑子,周围的棋子表示是之前下的。

红色箭头:表示需要遍历的八个方向,因为中心黑子的坐标(i, j)是已知的,所以很容易得到周围的棋子坐标(i+n, j+m)。

橙色方框:表示连续黑子的末端,可能是空白(表示还没有棋子填充),也可能是白子。


    接着是算法思想:

活一),当遍历整个棋盘后,便在这八个点中随机选择一个(用随机数),填上黑子。


活二或者眠二(以此类推,会构成活三眠三~~),这时,根据权值表,会赋予周围棋子更大的权值(权值应当是累加的,也就是说,当前权值 += 之前权值),最后遍历后,下白子。