/six-chess

六子棋AI实现

Primary LanguageC++

Six-Chess

核心算法

Algorithm.png

  1. 对全局的可行位置进行分析,找到最佳落子点
  2. 可行落子点的定义:该点为空,且周围有其他棋子
  3. 四个方向的定义:水平、垂直、左上至右下、右上至左下
  4. 对每一个可行落子点,统计周围4个方向,15种不同棋型的出现频率,15种棋型分别代表不同的情况,有着不同的权重分值,统计到的结果,存在一个 result[15] 的数组中
  5. 该点的得分:15种情况的各自得分*频率 之和。每个棋型的分值是很重要的参数,评分系统直接影响最后的决策。

实现要点

  1. 通过对落点的可行性进行判断,可以达到减少不必要步骤的效果,提高计算效率。
  2. result数组、max数组,是核心函数中一直维护的数组,每次调用都要通过指针指向内存地址的方式调用。
  3. 四个方向中,水平和垂直的长度等于棋盘大小,而左上至右下、右上至左下这两个方向的长度,随坐标变化而变化。
  4. 通过result数组下标代表种类,数值代表频率的方式来记录。例:result[0] = 1,表示有1次六连出现
  5. 在分析15种棋型时,先通过一个thearray数组记录这个方向下的全部棋子。每对一个棋型进行分析,就遍历一次thearray数组。确定吻合,可以通过 break 结束遍历,减少冗余的运算。

Contributors:

@jsmjsm

@C-learner678

@psyta

@Issatanic