四子连线(类似五子棋)

这道题和小北上道题一样,都是温油的java老师留下来的课后作业

首先小北说一下游戏规则:

在一个10×10的棋盘上,有红方和黄方,两个人下棋,每个人只能选择下在哪一列,意思就是说,如果board[i][j]没有下子(为空)的话,board[i-1][j]就不能下子,从棋盘的最后一行开始下,哪一方先下到四个棋子横,四个棋子竖,四个棋子斜(包括左斜和右斜)都算成功。

package ChessBoard;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        int[] index=new int[10];//标记每列的棋子,默认值全为0
        String[][] chessboard=new String[10][10];
        Init_ChessBoard(chessboard);//初始化棋盘
        BigCheck(index,chessboard);
    }
    private static void BigCheck(int[] index, String[][] chessboard) {
        Showchessboard(chessboard);
        Scanner scanner=new Scanner(System.in);
        boolean is=false;
        boolean it=false;
        System.out.println("红队请选择列数:(0-9)");
        int RED=scanner.nextInt();
        //判断此列是否合理,列index++,相应位置给R
        try{
            is=REDHuoChi(index, chessboard, RED);
        }catch (ArrayIndexOutOfBoundsException e) {
//            BigCheck(index, chessboard);//如果位置不合适重新输入
            is=false;
        }finally {
            if(!is)
                BigCheck(index,chessboard);
        }
        it = IsREDGameOver(chessboard);//判断红队是否胜利
        if (!it) {
            Showchessboard(chessboard);
            System.out.println("黄队请选择列数:(0-9)");
            int Yellow = scanner.nextInt();
            try {
                is = YELLOWHuoChi(index, chessboard, Yellow);//判断列数是否合理
            }catch (ArrayIndexOutOfBoundsException e){
                is=false;
            }finally {
                {
                    if(!is)
                        BigCheck(index,chessboard);
                }
            }
            it = IsYELLOWGameOver(chessboard);//判断黄队是否胜利
            if (!it) {
                BigCheck(index, chessboard);
            }
        }
    }
    private static  boolean IsREDGameOver(String[][] chessboard) {
        //判断游戏是否结束
        boolean is=false;
        A:for (int i = 0; i <7 ; i++) {
            for (int j = 0; j <10 ; j++) {
                //判断同一行是否四个
                if((chessboard[i][j]=="R   ")&&(chessboard[i+1][j]=="R   ")&&(chessboard[i+2][j]=="R   ")&&(chessboard[i+3][j]=="R   ")){
                    is=true;
                    System.out.println("RED----GameOver!");
                    break A;
                }
            }
        }
        B:for (int i = 0; i <10 ; i++) {
            for (int j = 0; j <7 ; j++) {
                //判断同一列是否四个
                if((chessboard[i][j]=="R   ")&&(chessboard[i][j+1]=="R   ")&&(chessboard[i][j+2]=="R   ")&&(chessboard[i][j+3]=="R   ")){
                    is=true;
                    System.out.println("RED----GameOver!");
                    break B;
                }
            }
        }
        C:for (int i = 3; i <7 ; i++) {
            for (int j = 3; j <7 ; j++) {
                //判断同一左斜是否四个
                if((chessboard[i][j]=="R   ")&&(chessboard[i-1][j-1]=="R   ")&&(chessboard[i-2][j-2]=="R   ")&&(chessboard[i-3][j-3]=="R   ")){
                    is=true;
                    System.out.println("RED----GameOver!");
                    break C;
                }
            }
        }
        D:for (int i = 0; i <7 ; i++) {
            for (int j = 0; j <7 ; j++) {
                //判断同一右斜是否四个
                if((chessboard[i][j]=="R   ")&&(chessboard[i+1][j+1]=="R   ")&&(chessboard[i+2][j+2]=="R   ")&&(chessboard[i+3][j+3]=="R   ")){
                    is=true;
                    System.out.println("RED----GameOver!");
                    break D;
                }
            }
        }
        return is;
    }
    private static  boolean IsYELLOWGameOver(String[][] chessboard) {
        //判断游戏是否结束
        boolean is=false;
        A:for (int i = 0; i <7 ; i++) {
            for (int j = 0; j <10 ; j++) {
                //判断同一行是否四个
                if((chessboard[i][j]=="Y   ")&&(chessboard[i+1][j]=="Y   ")&&(chessboard[i+2][j]=="Y   ")&&(chessboard[i+3][j]=="Y   ")){
                    is=true;
                    System.out.println("YELLOW-----GameOver!");
                    break A;
                }
            }
        }
        B:for (int i = 9; i <10 ; i++) {
            for (int j = 0; j <7 ; j++) {
                //判断同一列是否四个
                if((chessboard[i][j]=="Y   ")&&(chessboard[i][j+1]=="Y   ")&&(chessboard[i][j+2]=="Y   ")&&(chessboard[i][j+3]=="Y   ")){
                    is=true;
                    System.out.println("YELLOW-----GameOver!");
                    break B;
                }
            }
        }
        C:for (int i = 3; i <7 ; i++) {
            for (int j = 3; j <7 ; j++) {
                //判断同一左斜是否四个
                if((chessboard[i][j]=="Y   ")&&(chessboard[i-1][j-1]=="Y   ")&&(chessboard[i-2][j-2]=="Y   ")&&(chessboard[i-3][j-3]=="Y   ")){
                    is=true;
                    System.out.println("YELLOW-----GameOver!");
                    break C;
                }
            }
        }
        D:for (int i = 0; i <7 ; i++) {
            for (int j = 0; j <7 ; j++) {
                //判断同一右斜是否四个
                if((chessboard[i][j]=="Y   ")&&(chessboard[i+1][j+1]=="Y   ")&&(chessboard[i+2][j+2]=="Y   ")&&(chessboard[i+3][j+3]=="v")){
                    is=true;
                    System.out.println("YELLOW-----GameOver!");
                    break D;
                }
            }
        }
        System.out.println(is);
        return is;
    }
    private static boolean REDHuoChi(int[] index, String[][] chessboard, int lie) {
        //判断此列是否合理
        boolean heli=false;
        if(lie<=9&&lie>=0) {
            if (index[lie] >9){
                System.out.println("此列已满,请选择其他列!");
            } else {
                //判断此列有多少个棋子
                chessboard[9-index[lie]][lie]="R   ";
                index[lie]++;
                heli=true;
            }
        }else{
            System.out.println("此列不存在请重新选择!");
        }
        return heli;
    }
    private static boolean YELLOWHuoChi(int[] index, String[][] chessboard, int lie) {
        //判断此列是否合理
        boolean heli=false;
        if(lie<=9&&lie>=0) {
            if (index[lie] >9){
                System.out.println("此列已满,请选择其他列!");
            } else {
                //判断此列有多少个棋子
                chessboard[9-index[lie]][lie]="Y   ";
                index[lie]++;
                heli=true;
            }
        }else{
            System.out.println("此列不存在请重新选择!");
        }
        return heli;
    }
    private static void Init_ChessBoard(String[][] chessboard) {
        //初始化棋盘
        for (int i = 0; i <10 ; i++) {
            for (int j = 0; j <10 ; j++) {
                chessboard[i][j]="|   ";
            }
        }
    }
    private static void Showchessboard(String[][] chessboard) {
        //输出棋盘
        for (int i = 0; i <10 ; i++) {
            for (int j = 0; j <10 ; j++) {
                System.out.print(chessboard[i][j]);
            }
            System.out.println();
        }
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值