可以建立一个二维数组的数据结构:
int[][] ISFIVE = {
{2,2,1,1,1,1,1,2,2},
{1,1,1,1,1,2,2,2,2},
{2,1,1,1,1,1,2,2,2},
{2,2,2,1,1,1,1,1,2},
{2,2,2,2,1,1,1,1,1}
};
中间那个就是目前下子的位置,1表示和目前子相同颜色,2表示任意。0表示必须是空子,才合格,比如
int[][] ISFOUR = { {0,1,1,1,1,0,2,2,2},
{2,0,1,1,1,1,0,2,2},
{2,2,0,1,1,1,1,0,2},
{2,2,2,0,1,1,1,1,0}
};以上的二维数组中的数组都是属于活四,必胜棋型了。按照这个方法可以描绘出所有棋型。
关于你说的斜线部分,其实变通一下,就是数组的旋转而已,比如X,Y是当前落子的坐标,它的横向 就是 int[] temp= new int[9];
for(int i=-4;i<=4;i++){
temp[i+4] = qipan[x+i][y];
}
纵向就是
for(int i=-4;i<=4;i++){
temp[i+4] = qipan[x][y+i];
}
其实规律可以加入方向因子来解决,p,q的值为[1,0]表横向,[0.1]表纵向,[1,1]和[-1,-1]表两个斜向。
for(int i = -4;i<=4;i++){
temp[i+4] = qipan[x+p*i][y+p*i]
}
这个temp数组和上面的二维数组比较,合格就是那个棋型,就能得到4个走向的棋型。我的思路大致是这样,具体AI的设计就不一一细说了。
判断5子连珠的方法
1:X相同 Y等差1
2:Y相同 X等差1
3:XY都等差1
假设你你确实是按照XY做的,那么,你将黑子的XY放在数组(List
没落完一子 对数组里的进行排序,先按照X排,然后按照Y排。每次只需要排最后一个就好了(可以不用LIST,其他方式也行。)。
判断结果
1:是否有5个差为1/0的X
2:是否有5个差为1/0的Y
1 2都满足,即获胜。