定义黑白子
flag=1 //黑子
flag=2 //白子
创建新项目并定义函数
public class Win {
}
l 行 r 列 chessArr棋子所在棋盘行列值存储
public static boolean ifwin(int l, int r, int[][] chessArr) {
if (line(l, r, chessArr) >= 5 ||
row(l, r, chessArr) >= 5 ||
zuoshang(l, r, chessArr) >= 5 ||
youshang(l, r, chessArr) >= 5) {
return true;
}
return false;
}
胜负判断根据:所落最后一颗棋子周围八个方向是否有相同颜色的连续五子
根据在函数中提及的方向分别写出对应代码
(代码出发位置以最后一颗棋子为中心向八个方向扩展)
1.从右上方到左下方
private static int youshang(int l, int r, int[][] chessArr) {
int count = 0;
for (int i = l - 1, j = r + 1; i >= 0 && j < chessArr.length; i--, j++) {
if (chessArr[l][r] == chessArr[i][j]) {
count++;
} else {
break;
}
}
for (int i = l + 1, j = r - 1; i < chessArr.length && j >= 0; i++, j--) {
if (chessArr[l][r] == chessArr[i][j]) {
count++;
} else {
break;
}
}
System.out.println("右上"+count);
count++;
return count;
}
2.从左上方到右下方
private static int zuoshang(int l, int r, int[][] chessArr) {
int count=0;
for (int i = l - 1, j = r - 1; i >= 0 && j >=0; i--, j--) {
if (chessArr[l][r] == chessArr[i][j]) {
count++;
} else {
break;
}
}
for (int i = l + 1, j = r+ 1; i < chessArr.length && j <chessArr.length; i++, j++) {
if (chessArr[l][r] == chessArr[i][j]) {
count++;
} else {
break;
}
}
System.out.println("左上"+count);
count++;
return count;
}
3.纵向
private static int row(int l, int r, int[][] chessArr) {
int count=0;
int c1=chessArr[l][r];
for (int i=l-1;i>=0;i--){
if(c1==chessArr[i][r]){
count++;
}
else {break;}
}
for (int i=l+1;i<chessArr.length;i++){
if(c1==chessArr[i][r]){
count++;
}
else {break;}
}
System.out.println("纵向"+count);
count++;
return count;
}
4.横向
private static int line(int l, int r, int[][] chessArr) {
int count=0;
int c1=chessArr[l][r];
for (int i=r-1;i>=0;i--){
if(c1==chessArr[l][i]){
count++;
}
else {break;}
}
for (int i=r+1;i<chessArr.length;i++){
if(c1==chessArr[l][i]){
count++;
}
else {break;}
}
System.out.println("横"+count);
count++;
return count;
}
将编写好的判断胜负函数加入监听器对象中
if (iswin){
if (flag==1){
System.out.println("黑棋胜利");
flag=0;
}else if (flag==2){
System.out.println("白棋胜利");
flag=0;
}
}