五子棋是我最喜欢的棋类之一,其多种可能性和不肯定性为其增长了神秘色彩,其中分为禁手模式和不由手模式。这里就很少说了算法
主要想说一下,五子棋AI算法的整个流程。it
因为五子棋的判断很简单,就是以一个点为中心向 "米" 字型扩散,任意有5颗则胜利。因此再也不多说。循环
要想实现人机对战,给机器聪明的大脑。咱们必须将棋型转化为数字模型供机器参考rsa
例如,当遇到活4的状况(危险性最大),咱们给它设置一个最大值。遍历
整体的流程就是,先遍历棋盘每个点的八个方向(固然边缘点除外),代码以下while
void traversal(int n, int *i, int *j)
{
switch (n)
{
case 1:*i += 1; break;
case 2:*i += 1; *j += 1; break;
case 3:*j += 1; break;
case 4:*i -= 1; *j += 1; break;
case 5:*i -= 1; break;
case 6:*i -= 1; *j -= 1; break;
case 7:*j -= 1; break;
case 8:*i += 1; *j -= 1; break;
}
}cas
while (n != 5)数字
{void
k1 = chessType(n, p, q);
n += 4; /* k1,k2为2个反方向的棋型编号 */
k2 = chessType(n, p, q);
n -= 3;模型
}
//巧妙利用循环,实现n从1遍历到8