2021-10-29 java学习五子棋实现

import java.util.Scanner;
//五子棋的实现
public class game {
    public static void main(String[] args) {
        char[][] map = new char[11][11];//棋盘大小
        Scanner scan = new Scanner(System.in);
        boolean isFlag = true;
        //*棋子的坐标
        int x;
        int y;
        //o棋子的坐标
        int l;
        int k;
        for (int i = 0; i < map.length; i++) {//棋盘
            for (int j = 0; j < map[i].length; j++) {
                map[i][j] = '-';
            }
        }
        while (isFlag) {
            //给棋盘坐标留空
            map[0][0] = 0;
            for (int i = 1; i < map.length; i++) {
                char j = 0;
                map[0][i] = j;
                map[i][0] = j;
            }
            //空位
            map[0][0] = ' ';
            //棋盘y坐标
            map[0][1] = '0';
            map[0][2] = '1';
            map[0][3] = '2';
            map[0][4] = '3';
            map[0][5] = '4';
            map[0][6] = '5';
            map[0][7] = '6';
            map[0][8] = '7';
            map[0][9] = '8';
            map[0][10] = '9';
            //棋盘x坐标
            map[1][0] = '0';
            map[2][0] = '1';
            map[3][0] = '2';
            map[4][0] = '3';
            map[5][0] = '4';
            map[6][0] = '5';
            map[7][0] = '6';
            map[8][0] = '7';
            map[9][0] = '8';
            map[10][0] = '9';

            //打印棋盘
            for (int i = 0; i < map.length; i++) {
                for (int j = 0; j < map[i].length; j++) {
                    System.out.print(" " + map[i][j]);
                }
                System.out.println();
            }

            for (; ; ) {//棋子*
                System.out.print("请*输入棋子x坐标: ");
                x = scan.nextInt();
                if (x < 0 || x > 9) {
                    System.out.println("没有此坐标,重新输入");
                    continue;
                }
                x++;
                System.out.print("请*输入棋子y坐标: ");
                y = scan.nextInt();
                if ( y < 0 || y>9) {
                    System.out.println("没有此坐标,重新输入");
                    continue;
                }
                y++;
                if (map[x][y] == 'o'||map[x][y]=='*') {
                    System.out.println("此位置有棋子 ?");
                } else {
                    map[x][y] = '*';
                    break;
                }
            }

            //打印棋盘
            for (int i = 0; i < map.length; i++) {
                for (int j = 0; j < map[i].length; j++) {
                    System.out.print(" " + map[i][j]);
                }
                System.out.println();
            }
            char a = map[x][y];
            //获胜条件横着连成5子 五种
            if(a==map[x][y-1]&&a==map[x][y-2]&&a==map[x][y-3]&&a==map[x][y-4]){//第一种 右边四子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
            }
            else if(y<7&&a==map[x][y+1]&&a==map[x][y+2]&&a==map[x][y+3]&&a==map[x][y+4]){//第二种 左边四子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            else if(a==map[x][y-1]&&a==map[x][y-2]&&a==map[x][y+1]&&a==map[x][y+2]){//第三种左右个两子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
           else if(a==map[x][y-1]&&a==map[x][y-2]&&a==map[x][y-3]&&a==map[x][y+1]){//第四种左三右一
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
           }
           else if(a==map[x][y-1]&&a==map[x][y+1]&&a==map[x][y+2]&&a==map[x][y+3]){//第五种右三左一
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
           }

            //获胜条件竖着连成5子 五种
            if(a==map[x-1][y]&&a==map[x-2][y]&&a==map[x-3][y]&&a==map[x-4][y]){//第一种 右边四子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(x<7&&a==map[x+1][y]&&a==map[x+2][y]&&a==map[x+3][y]&&a==map[x+4][y]){//第二种 左边四子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(a==map[x-1][y]&&a==map[x-2][y]&&a==map[x+1][y]&&a==map[x+2][y]){//第三种左右个两子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(a==map[x-1][y]&&a==map[x-2][y]&&a==map[x-3][y]&&a==map[x+1][y]){//第四种左三右一
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(a==map[x-1][y]&&a==map[x+1][y]&&a==map[x+2][y]&&a==map[x+3][y]){//第五种右三左一
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
            }
           //获胜方法三 对角线5个棋子相等
            if(a==map[x-1][y-1]&&a==map[x-2][y-2]&&a==map[x-3][y-3]&&a==map[x-4][y-4]){//第一种 右边四子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(x<7&&y<7&&a==map[x+1][y+1]&&a==map[x+2][y+2]&&a==map[x+3][y+3]&&a==map[x+4][y+4]){//第二种 左边四子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(a==map[x-1][y-1]&&a==map[x-2][y-2]&&a==map[x+1][y+1]&&a==map[x+2][y+2]){//第三种左右个两子
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(a==map[x-1][y-1]&&a==map[x-2][y-2]&&a==map[x-3][y-3]&&a==map[x+1][y+1]){//第四种左三右一
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(a==map[x-1][y-1]&&a==map[x+1][y+1]&&a==map[x+2][y+2]&&a==map[x+3][y+3]){//第五种右三左一
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
        //获胜方法三(2) 反对角线5个棋子相等
            if(x<7&&a==map[x+1][y-1]&&a==map[x+2][y-2]&&a==map[x+3][y-3]&&a==map[x+4][y-4]){//对角线下
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(x<7&&y<7&&a==map[x-1][y+1]&&a==map[x-2][y+2]&&a==map[x-3][y+3]&&a==map[x-4][y+4]){//对角线上
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(x<7&&a==map[x+1][y-1]&&a==map[x+2][y-2]&&a==map[x-1][y+1]&&a==map[x-2][y+2]){//对角线中 上下
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(y<7&&a==map[x-1][y+1]&&a==map[x-2][y+2]&&a==map[x-3][y+3]&&a==map[x+1][y-1]){//下一 上三
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(x<7&&y<7&&a==map[x-1][y+1]&&a==map[x+1][y-1]&&a==map[x+2][y-2]&&a==map[x+3][y-3]){//下三 上一
                System.out.println("*棋子获胜!!!");
                isFlag =false ;
                break;
            }
            //棋子o
            for (; ; ) {
                System.out.print("请o输入棋子x坐标: ");
                l = scan.nextInt();
                if (l < 0 || l > 9 ) {
                    System.out.println("没有此坐标,重新输入");
                        continue;
                }
                l++;
                System.out.print("请o输入棋子y坐标: ");
                k = scan.nextInt();
                if ( k < 0 || k > 9) {
                    System.out.println("没有此坐标,重新输入");
                    continue;
                }
                k++;
                if (map[l][k] == '*'||map[l][k]=='o') {
                    System.out.println("此位置有棋子 ?");
                } else {
                    map[l][k] = 'o';
                    break;
                }
            }

            //打印棋盘
            for (int i = 0; i < map.length; i++) {
                for (int j = 0; j < map[i].length; j++) {
                    System.out.print(" " + map[i][j]);
                }
                System.out.println();
            }

            char b = map[l][k];
            //获胜条件横着连成5子 五种
            if(b==map[l][k-1]&&b==map[l][k-2]&&b==map[l][k-3]&&b==map[l][k-4]){//第一种 右边四子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(k<7&&b==map[l][k+1]&&b==map[l][k+2]&&b==map[l][k+3]&&b==map[l][k+4]){//第二种 左边四子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l][k-1]&&b==map[l][k-2]&&b==map[l][k+1]&&b==map[l][k+2]){//第三种左右个两子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l][k-1]&&b==map[l][k-2]&&b==map[l][k-3]&&b==map[l][k+1]){//第四种左三右一
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l][k-1]&&b==map[l][k+1]&&b==map[l][k+2]&&b==map[l][k+3]){//第五种右三左一
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }

            //获胜条件竖着连成5子 五种
            if(b==map[l-1][k]&&b==map[l-2][k]&&b==map[l-3][k]&&b==map[l-4][k]){//第一种 右边四子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(l<7&&b==map[l+1][k]&&b==map[l+2][k]&&b==map[l+3][k]&&b==map[l+4][k]){//第二种 左边四子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l-1][k]&&b==map[l-2][k]&&b==map[l+1][k]&&b==map[l+2][k]){//第三种左右个两子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l-1][k]&&b==map[l-2][k]&&b==map[l-3][k]&&b==map[l+1][k]){//第四种左三右一
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l-1][k]&&b==map[l+1][k]&&b==map[l+2][k]&&b==map[l+3][k]){//第五种右三左一
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            //获胜方法三 对角线5个棋子相等
            if(b==map[l-1][k-1]&&b==map[l-2][k-2]&&b==map[l-3][k-3]&&b==map[l-4][k-4]){//第一种 右边四子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(l<7&&k<7&&b==map[l+1][k+1]&&b==map[l+2][k+2]&&b==map[l+3][k+3]&&b==map[l+4][k+4]){//第二种 左边四子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l-1][k-1]&&b==map[l-2][k-2]&&b==map[l+1][k+1]&&b==map[l+2][k+2]){//第三种左右个两子
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l-1][k-1]&&b==map[l-2][k-2]&&b==map[l-3][k-3]&&b==map[l+1][k+1]){//第四种左三右一
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(b==map[l-1][k-1]&&b==map[l+1][k+1]&&b==map[l+2][k+2]&&b==map[l+3][k+3]){//第五种右三左一
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }

            //获胜方法三(2) 反对角线5个棋子相等
            if(l<7&&b==map[l+1][k-1]&&b==map[l+2][k-2]&&b==map[l+3][k-3]&&b==map[l+4][k-4]){//对角线下
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(l<7&&k<7&&b==map[l-1][k+1]&&b==map[l-2][k+2]&&b==map[l-3][k+3]&&b==map[l-4][k+4]){//对角线上
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(l<7&&b==map[l+1][k-1]&&b==map[l+2][k-2]&&b==map[l-1][k+1]&&b==map[l-2][k+2]){//对角线中 上下
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(k<7&&b==map[l-1][k+1]&&b==map[l-2][k+2]&&b==map[l-3][k+3]&&b==map[l+1][k-1]){//下一 上三
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
            if(k<7&&l<7&&b==map[l-1][k+1]&&b==map[l+1][k-1]&&b==map[l+2][k-2]&&b==map[l+3][k-3]){//下三 上一
                System.out.println("o棋子获胜!!!");
                isFlag =false ;
                break;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值