怎么用JAVA写一个四子棋,带解释和备注的最好是中文备注谢谢大佬

图片说明图片说明

带备注和解释哦。谢谢

package com.neu.test;

import java.util.Scanner;

public class ConnectFour {

    private static String[][] qipan = new String[6][7];//棋盘



    public static String NULL_DISK = "   ";//未下子的状态
    public static String RED_DISK = " R ";//未下子的状态
    public static String YELLOW_DISK = " Y ";//未下子的状态

    private static boolean finished=false;//是否结束

    private static Disk disk;


    public static void main(String[] args) {
        initGrid();

        Scanner scan = new Scanner(System.in);
        while (true){
            System.out.print("请"+disk.remark+"子落子:");
            String line = scan.nextLine();
            DropDisk(line);
            if(finished){
                break;
            }
        }
    }

    /**
     * 落子
     * @param loc
     */
    private static void DropDisk(String loc){
        //TODO 严格点应该再判断输入的数据格式是否符合标准,还有是否超出棋盘区域


        String[] locArr = loc.split(" ");
        int locX = Integer.valueOf(locArr[0]);
        int locY = Integer.valueOf(locArr[1]);

        if(qipan[locX][locY].equals(NULL_DISK)){
            qipan[locX][locY] = disk.val;
            checkWin();
            disk = disk.next();
            drawGrid();
        }else{
            System.out.println("该位置已经有棋子!!!!");
        }


    }

    /**
     * 检查游戏是否结束
     */
    public static void checkWin(){
        boolean keep = true;
        boolean hasBlank = false;
        for(int i=0;i<6;i++){
            if(!keep){
                break;
            }
            for(int j=0;j<7;j++){

                //向右4个子
                try{
                    String q1 = qipan[i][j];
                    String q2 = qipan[i][j+1];
                    String q3 = qipan[i][j+2];
                    String q4 = qipan[i][j+3];

                    if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){
                        keep=false;
                        break;
                    }
                }catch (Exception e){
                    //数组下标越界,不做处理
                }
                //向下4个子
                try{
                    String q1 = qipan[i][j];
                    String q2 = qipan[i+1][j];
                    String q3 = qipan[i+2][j];
                    String q4 = qipan[i+3][j];

                    if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){
                        keep=false;
                        break;
                    }
                }catch (Exception e){
                    //数组下标越界,不做处理
                }
                //右下
                try{
                    String q1 = qipan[i][j];
                    String q2 = qipan[i+1][j+1];
                    String q3 = qipan[i+2][j+2];
                    String q4 = qipan[i+3][j+3];

                    if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){
                        keep=false;
                        break;
                    }
                }catch (Exception e){
                    //数组下标越界,不做处理
                }
                //右上
                try{
                    String q1 = qipan[i][j];
                    String q2 = qipan[i+1][j-1];
                    String q3 = qipan[i+2][j-2];
                    String q4 = qipan[i+3][j-3];

                    if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){
                        keep=false;
                        break;
                    }
                }catch (Exception e){
                    //数组下标越界,不做处理
                }
                if(NULL_DISK.equals(qipan[i][j])){
                    //判断是否还有空位,有就可以继续下
                    hasBlank = true;
                }
            }
        }

        if(!keep){
            System.out.println(disk.remark+"子获胜,游戏结束!");
            finished = true;
        }else{
            if(!hasBlank){
                System.out.println("棋盘已满,平局,游戏结束!");
                finished = true;
            }
        }

    }
    /**
     * 将下好子的棋盘打印出来
     */
    public static void drawGrid(){
        for(int i=0;i<6;i++){
            System.out.print("|");
            for(int j=0;j<7;j++){
                System.out.print(qipan[i][j]+"|");
            }
            System.out.println();
        }
    }

    /**
     * 棋盘初始化
     */
    private static void initGrid(){
        System.out.println("初始化棋盘,请稍后...");
        for(int i=0;i<6;i++){
            for(int j=0;j<7;j++){
                qipan[i][j] = NULL_DISK;
            }
        }
        disk = new Disk();
        drawGrid();

        System.out.println("棋盘准备完毕!!!");
        System.out.println("规则:");
        System.out.println("在控制台输入要落子的坐标,两个坐标中间用一个空格隔开,如  2 3   输入完毕后回车键进入下一方落子 ");
        System.out.println("--------------------------------------");
    }
}

/**
 * 棋子
 */
class Disk{

    public String val;
    public String remark;

    public Disk(){
        this.remark = "红";
        this.val = ConnectFour.RED_DISK;
    }


    public Disk next(){
        Disk nextDisk = new Disk();
        if(this.val.equals(ConnectFour.RED_DISK)){
            nextDisk.remark = "黄";
            nextDisk.val = ConnectFour.YELLOW_DISK;
        }
        return nextDisk;
    };

}
package connect;
import java.util.*;

public class connect
{
    public static  void main(String args[])
    {
        int start=0;

        int count=0;
        int count_max=42;
        connect_four one=new connect_four();

        one.display_board();

        do
        {
            System.out.println("请白子先行");

            Scanner in=new Scanner(System.in);
            int cow=in.nextInt();

            if(one.judge(cow, 1) == 1)
            {
                start=1;count++;
            }
            else
            {
                start=0;
            }
        }

        while(start==0);
        one.display_board();
        System.out.println();
        int color=2;
        do
        {
            //one.getcolor();

            System.out.println("对手出棋");
            Scanner in=new Scanner(System.in);
            //int raw=in.nextInt();
            int cow=in.nextInt();
            if(one.judge(cow,color)==0)
            {
                System.out.println("出棋失败,请重新出棋");
            }
            else
            {
                    count++;
                    if(one.is_four(cow, color, 0, 1)==1)
                    {
                        if(color==1)
                            System.out.print("\t\t\t\t圈圈");
                        else
                            System.out.print("\t\t\t\t叉叉");
                        System.out.print("胜出\n");
                        one.display_board();
                        System.out.println();
                        return ;
                    }
                    if(color==2)color=1;
                    else color=2;
            }
            one.display_board();

        }
        while(count<count_max);
        if(count==count_max)
            {
                System.out.println("\t\t\t\t\t和局");
                one.display_board();
                System.out.println();
            }

    }



}


class  connect_four
{
    private int flag=0;             //
    private int max_i=6;            //最大行
    private int max_j=7;            //最大列
    private int row;                //行值
    private int cow;                //列值
    private int [] []chessboard_status=new int[6][7];//棋盘状态
    private int [] a = new int[7];                  //列的行值
    private int chess_color;        //棋子颜色

    public connect_four()           //构造函数初始化棋盘
    {
        flag=0;
        max_i=6;
        max_j=7;
        row=0;
        cow=0;
        for(int i=0;i<max_i;i++)
        {
            for(int j=0;j<max_j;j++)
            {
                a[j] = 5;
                chessboard_status[i][j]=0;
            }
        }
    }
    public int judge(int j,int color)
    {
        switch(j)
        {
            case 0:  if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}//二维数            
                                                                                 //组存放
                        else return 0;  
            case 1:  if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
                        else return 0;
            case 2:  if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
                        else return 0;
            case 3:  if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
                        else return 0;
            case 4:  if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
                        else return 0;
            case 5:  if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
                        else return 0;
            case 6:  if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
                        else return 0;
            default: ;
        }
        return 1;
    }
    public int judge_status(int i,int j)
    {
        if(i>-1&&i<max_i&&j>-1&&j<max_j)
            if(chessboard_status[i][j]==0)
                return 0;
            else if(chessboard_status[i][j]==1)
                return 1;//白色
            else
                return 2;//黑色
        else return -1;//位置输入超框
    }
    public void getcolor()
    {
        if(flag==1)
            System.out.print("白棋");
        else
            System.out.print("黑棋");
        System.out.println("\n");
    }
    public void display_board()
    {
        char a=1;
        char b=0;


        System.out.print("  ");
            for(int j=0;j<max_j;j++)
            {
                System.out.print(j+" ");


            }
            System.out.println();

        for(int i=0;i<max_i;i++)
        {

            for(int j=0;j<max_j;j++)
            {
                if(j==0)
                    System.out.print(i);
                switch(chessboard_status[i][j])
                {
                case 0: System.out.print(" *");break;
                case 1: System.out.print(" ○");break;
                case 2: System.out.print(" ×");break;
                }
            }
            System.out.println();
        }

    }
    public int is_four(int j,int color,int num,int direction)
    {
        int m=a[j]+1,n=j;
        do
        {
            switch(direction)
            {
            case 1: m=m+1;n=n;break;
            case 2: m=m+1;n=n-1;break;
            case 3: m=m;n=n-1;break;
            case 4: m=m-1;n=n-1;break;
            case 5: m=m-1;n=n;break;
            case 6: m=m-1;n=n+1;break;
            case 7: m=m;n=n+1;break;
            case 8: m=m-1;n=n-1;break;
            default :break;

            }
            if(judge_status(m,n)==color)
            {
                num++;
                if(num==3)
                {
                    return 1;
                }
            }
            else 
                {
                    m=a[j]+1;
                    n=j;
                    num=0;
                    direction++;
                }
        }while(direction!=9);
        if(num==3)  return 1;
        else return 0;
    }
}