Java在控制台中实现五子棋对战

第一步,初始化棋盘
第二步,写一个开始的函数
第三步,写下棋后改变棋盘布局函数
第四步,判断有棋子覆盖,越界情况
第五步,判断输赢
第六步,选择重开

棋子覆盖,越界情况
判断在这里插入图片描述
结束后重新开始
在这里插入图片描述
结束后退出情况
在这里插入图片描述

以下是代码,欢迎交流bug,优化改进

    //棋盘
    static String white ="☆";
    static String black ="★";
    static String PanDi ="十";
    static String[][] QiPan=new String[15][15];
    static String[]num={"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
    //使用字符1.可以确保棋盘对齐
    //启动五子棋
    public static boolean start(){
        Scanner scanner=new Scanner(System.in);
        printQiPan();
        System.out.println(" ");
        System.out.println("请玩家1输入要下的位置(横纵坐标用空格隔开)");
        if(innt()){//innt只返回true执行此语句
            System.out.println("游戏结束");
            System.out.println("若要重新开始请输入1");
            System.out.println("若要退出请输入0");
            int r=scanner.nextInt();
            if(r==1){
                return true;
            }
            else if(r==0){
                return false;
            }
        }
        return false;//应对无返回值报错情况,无意义
    }
    //五子棋初始化布局
    public static void printQiPan(){
        for(int i=0;i<=15;i++){
            if(i==15){
                for(int o=0;o<15;o++){
                    System.out.print(num[o]);
                }
            }
            else {
                for (int j = 0; j < 15; j++) {
                    System.out.print(PanDi);
                }
            }
            if(i<15) {
                System.out.print(num[i]);
                System.out.print("\n");
            }
        }
    }

    //打印更新后的五子棋棋盘
    public static void Wzq(String [][]qp){
        for(int i=0;i<16;i++){
            for(int j=0;j<16;j++) {
                if ((i != 15) && (j != 15)) {
                    System.out.print(qp[i][j]);
                }
            }
            System.out.print("\n");
        }
    }

    //下棋过程
    public static boolean innt(){
        Scanner scanner=new Scanner(System.in);
        String [][]set1=qp();//设置白棋下完的情况
        String [][]set2=qp();//设置黑棋下完的情况
        int x1=0,x2=-1,y1=0,y2=-1;
        while(true) {
                    System.out.print("\n");
                    x1 = scanner.nextInt();//黑棋输入横坐标
                    y1 = scanner.nextInt();//黑棋输入纵坐标
            while(exceed(x1,y1)){//判断越界
                x1 = scanner.nextInt();
                y1 = scanner.nextInt();
            }
                    while(Wcover(x1,y1,set2)){
                        System.out.println("请重新输入");
                        x1 = scanner.nextInt();
                        y1 = scanner.nextInt();
                        while(exceed(x1,y1)){//重新输入后再判断越界
                            x1 = scanner.nextInt();
                            y1 = scanner.nextInt();
                        }
                    }

                    //这里写黑下棋
                    set1=setBlack(x1,y1,set2);//改变下完黑棋后的棋盘
                    Wzq(set1);//打印棋盘
                    if(winB(set1)){//判断输赢
                        return true;
                    }
                    System.out.print("轮到玩家2\n");
                    x2 = scanner.nextInt();
                    y2 = scanner.nextInt();
            while (exceed(x2, y2)) {
                x2 = scanner.nextInt();
                y2 = scanner.nextInt();
            }
                    while(Bcover(x2,y2,set1)){
                        System.out.println("请重新输入");
                        x2 = scanner.nextInt();
                        y2 = scanner.nextInt();
                        while (exceed(x2, y2)) {
                            x2 = scanner.nextInt();
                            y2 = scanner.nextInt();
                        }

                  }
                        //这里写白下棋
                        set2 = setWhite(x2, y2, set1);//改变下完白棋后的棋盘
                        Wzq(set2);//打印棋盘
            if(winW(set2)){
                return true;
            };//判断输赢
                        System.out.print("\n");
                        System.out.print("轮到玩家1\n");
                    }
    }

    //判断输赢
    public static boolean winB(String [][]qp){
        for(int i=0;i<15;i++){
            for(int j=0;j<15;j++){
                if(qp[i][j]==black&&qp[i][j+1]==black&&qp[i][j+2]==black&&qp[i][j+3]==black&&qp[i][j+4]==black){
                    System.out.println("黑棋胜利了");
                    return true;
                }
                else if(qp[i][j]==black&&qp[i+1][j]==black&&qp[i+2][j]==black&&qp[i+3][j]==black&&qp[i+4][j]==black){
                    System.out.println("黑棋胜利了");
                    return true;
                }
                else if(qp[i][j]==black&&qp[i+1][j+1]==black&&qp[i+2][j+2]==black&&qp[i+3][j+3]==black&&qp[i+4][j+4]==black){
                    System.out.println("黑棋胜利了");
                    return true;
                }
            }
        }
        return false;
    }
    public static boolean winW(String [][]qp){
        for(int i=0;i<15;i++){
            for(int j=0;j<15;j++){
                if(qp[i][j]==white&&qp[i][j+1]==white&&qp[i][j+2]==white&&qp[i][j+3]==white&&qp[i][j+4]==white){
                    System.out.println("白棋胜利了");
                    return true;
                }
                else if(qp[i][j]==white&&qp[i+1][j]==white&&qp[i+2][j]==white&&qp[i+3][j]==white&&qp[i+4][j]==white){
                    System.out.println("白棋胜利了");
                    return true;
                }
                else if(qp[i][j]==white&&qp[i+1][j+1]==white&&qp[i+2][j+2]==white&&qp[i+3][j+3]==white&&qp[i+4][j+4]==white){
                    System.out.println("白棋胜利了");
                    return true;
                }
            }
        }
        return false;
    }

    //判断白棋有没有覆盖黑棋
    public static boolean Bcover(int x,int y,String [][]qp){
        if(qp[x-1][y-1]==black||qp[x-1][y-1]== white){
            return true;
        }
        else{
            return false;
        }
    }
    //判断黑棋覆盖白棋
    public static boolean Wcover(int x,int y,String [][]qp){
        if(qp[x-1][y-1]== white||qp[x-1][y-1]==black){
            return true;
        }
        else{
            return false;
        }
    }
    //落子后改变棋盘的布局
    public static String[][] setWhite(int x,int y,String [][]setqp){
        setqp[x-1][y-1]=white;
        return setqp;
    }
    public static String[][] setBlack(int x,int y,String [][]setqp){
        setqp[x-1][y-1]=black;
        return setqp;
    }
    //设置一个棋盘数组
    public static String[][] qp(){
        String [][]qqpp=new String[16][16];
        for(int i=0;i<=15;i++){
            if(i==15){
                for(int o=0;o<15;o++){
                    qqpp[i][o]=num[o];
                }
            }
            else {
                for (int j = 0; j <= 15; j++) {
                    if(j<15) {
                        qqpp[i][j] = PanDi;
                    }
                    else{
                        qqpp[i][j] = num[i];
                    }
                }
            }
        }
        return qqpp;
    }
    //判断越界
    public static boolean exceed(int x,int y){
        if(x>15||x<=0||y>15||y<=0){//
            System.out.println("棋盘容不下您了,请重新输入");
            return true;
        }
        return false;
    }
    public static void main(String[] args) {
        boolean x=true;
        while(x){
                x=start();
        }
        return;

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值