Java 五子棋取胜条件判断

本文详细描述了如何在围棋游戏中通过编程实现黑白子的胜负判断,通过检查棋子在棋盘上周围八个方向是否形成连续五子来确定胜利者,包括右上至左下、左上至右下、纵向和横向四个方向的判断函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义黑白子

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;
            }
        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值