三子棋具体就不多介绍了,AI棋用O表示,我们的棋用X表示。先手后手自己选。这里主要说一下AI算法。首先AI会对整个棋盘MAP[3][3]进行遍历,每个格子都有一个权值weight[i][j]。权值的第一次计算方法是对每一行i每一列j进行计算,计算基于这一格有几种获胜的路线。例如没有走时,9个格的权值为:
[][][] 3 2 3
[][][] 2 4 2
[][][] 3 2 3
角落有横竖斜三种获胜方法,边有横竖两种方法,中心有横竖两斜4种方法。假如某格有X阻挡,那么权值会相应变化,例如
[][][] 2 1 2
[]X[] 1 0 1
[][][] 2 1 2
由于有中心阻挡,那么角只有横竖两种方法赢,因此权值为2。但该AI还需继续优化。例如以下:
[]X[] 1 0 1
[]0[] 1 0 2
XX0 0 0 0
AI面对这种情况,本来下在第一个格子就赢了,但他会选择权值为2的格子。因此我们可以在现有权值条件的情况下,在附加个权值。假如某一格子的路线上已经有AI的子了,那么该条路线上未落子的所有格子权值再加1,如果有两个已落子的AI格子权值就加2。例如以下情况:
原权值 优化权值
[]X[] 2 0 2 5 0 3
[]0[] 2 0 2 3 0 4
[]X0 2 0 0 3 0 0
第一个格子5是由于斜路线上有两个子,那在原有的基础2上先加1,再加2,所以权值为2+1+2。第2行第3列权值为4,因为横竖两条路线均有1个子,因此权值为2+1+1,其余格子路线上均有1个子,因此权值为2+1。这样落在权值5那个格子上AI就赢了。但是仅仅这些判断是不够的。例如:
初始 优化
X[]X 0 1 0 0 2 0
[]0[] 1 0 1 2 0 2
[][]0 1 2 0 2 4 0
AI会选择权值为4的格子。那此时AI选择权值为2的格子时,你只需要走一步就赢了,AI就输了,因此该AI算法还得继续。
那么AI可以逆向思考一番,AI可以考虑一下当前情况在计算AI权值的同时再计算一次我们的权值。例如上面例子:
AI权值 你的权值 优化AI 优化你
X[]X 0 1 0 0 1 0 0 2 0 0 4 0
[]0[] 1 0 1 1 0 0 2 0 2 2 0 0
[][]0 1 2 0 1 0 0 2 4 0 2 0 0
我们把两个权值相加(另外把AI的权值应该再加1,因为AI判断赢要优先于输或平,假如AI方有权值大的,代表一步能赢的,我方也有这种情况,那相加权值相同,AI既可以选择赢棋那一格,也可以选择堵你将要赢的那一