每走一步,调用判断方法
思路为:
首先你应该有一个组的集合,就是横、竖、斜三个方向,每5格一组,这个可以根据你的宽高计算出来。
循环这个集合。如果有同色连接5个,那么为胜
同时将五格中已有4个同色并且剩余一格未操作的,放入一个集合内,若上一步没有结果,那么判断这个集合,如果有这个集合有两条以上,并且未操作格坐标不为同一个,那么同样为胜
这么说明白不?
public boolean isWin(int row, int column) {
boolean isWin = false;
char curChess = turn?'@':'o';
if (this.isHorizontalWin(row, column, curChess)
|| this.isVerticalWin(row, column, curChess)
|| this.isLeftObliqueDownWin(row, column, curChess)
|| this.isLeftObliqueUpWin(row, column, curChess)) {
isWin = true;
}
return isWin;
}
public boolean isHorizontalWin(int row, int column, char curChess) {
boolean isWin = false;
int count = 0;
for (int c = column-1; c>=0; c--) {
if (cells[row][c] == curChess) {
count++;
} else {
break;
}
}
for (int c = column+1; c
count++;
} else {
break;
}
}
System.out.println("horizontal count :"+ count);
if (count >=4) {
isWin = true;
}
return isWin;
}
public boolean isVerticalWin(int row, int column, char curChess) {
boolean isWin = false;
return isWin;
}
public boolean isLeftObliqueDownWin(int row, int column, char curChess) {
boolean isWin = false;
return isWin;
}
public boolean isLeftObliqueUpWin(int row, int column, char curChess) {
boolean isWin = false;
int count = 0;
for (int r = row-1, c = column-1; r>=0 && c>=0; r--, c--){
if (cells[r][c] == curChess) {
count++;
} else {
break;
}
}
if (count >=4) {
isWin = true;
}
return isWin;
}
写个算法
判断矩阵横竖斜。。。,要颜色一样,没走一步都要判定
做的更好点的话,可以连续4个就判定输