使用二维数组存储棋盘信息,重复使用输出方法

定义棋盘

  1. 对棋盘这个二维数组进行初始化数据(全局定义)
  2. 打印输出(方法1初始化定义棋盘,方法2打印棋盘)

开始下棋,判断黑白双方谁下棋,交替下棋

  1. 一直下棋(while(true)),黑白交替(flag=true/false)
  2. 输入棋子的坐标,行和列(注意减一)
  3. 判断棋子的位置是否重复和越界(越界后应当重新输入)

判断输赢(每一步都得进行判断)

定义需要的图形,棋盘上的图案,棋子等。

static String[][] qp = new String[15][15]; //{{null,null},{null,null}}
    static String white = "☆";
    static String black = "★";
    static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
    static String line = "十";
for (int i = 0; i < qp.length; i++) {
            for (int j = 0; j < qp[i].length; j++) {
                qp[i][j] = line;
                //将棋盘的线被表示出来

                if (j == qp.length - 1) {
                    qp[i][j] = num[i];
                    //最后一列变成数字来表示行数
                }
                if (i == qp.length - 1) {
                    qp[i][j] = num[j];
                    //最后一行变成数字来表示列数
                }

            }

        }

接着将棋盘进行打印,每下一步棋都得将棋盘打印一次,同样是利用for循环,记得换行。

for (int i = 0; i < qp.length; i++) {
            for (int j = 0; j < qp[i].length; j++) {
                System.out.print(qp[i][j]);
//正常打印完一行
            }
            System.out.println();
//循环完一个i就换行
        }
  • 准备开始下棋,由于你俩在下棋,一直在下,直到分出胜负,故使用while循环,条件就是true,如果胜利,可以使用break跳出循环。
  • 为了实现轮流下棋的目的,可以使用Boolean类型的变量,如果是true,则轮到白棋,反之,可在代码块的末尾将其赋值为false,即可实现轮流。
  • 为了输入坐标,得在类的开头定义一个x和y,先new一个,坐标,在进行输入,注意坐标的x,y要减一
static Scanner zuoBiao = new Scanner(System.in);
    int x = zuoBiao.nextInt() - 1;
    int y = zuoBiao.nextInt() - 1;
  • 输入坐标后,得进行坐标的查重和检查,是否越界和重复,可以定义一个方法,将输入的坐标进行检查,可以学习一下equals方法的用法
public static boolean check(int x, int y) {
        if (x < 0 || y < 0 || x >=qp.length - 1 || y >=qp.length - 1) {
            //检查是否越界
            return false;
        }
s(line)) {
            //检查是否有重复的,equals方法已被定义,可直接用
            //line.quals(qp[x][y])同样可以,两者是一样的,将两个字符串进行比较,返回true or false
            return false;
        }
        return true;
        //两种情况之外才是true
    }
  • 定义一个Boolean型的变量来接收check的返回值,并以此来判断是否进行下一个if结构,如果错误,则打印提醒,并使用continue,跳过余下的代码块,接着重新运行上面的代码
else {
                    System.out.println("请输入正确的坐标");
                    continue;
                    //跳过本次循环余下的部分,重新开始循环
                }
  • 如果正确,,则进入下棋阶段,将开头已经定义好的棋子类型赋值给棋盘数组,并重新打印棋盘,此时,重新定义一个方法,来检查你下的棋是否连成五个即成功,当然为Boolean型
qp[x][y] = white;
                    Wzq.printQp();
                    boolean Win = checkWin(y, x, white);
  • 检查输赢的方法,得有x,y传入。首先定义一个水平计数器,再用for循环来计数左右两侧的棋子,如果棋盘上的字符和qz数组中的一致,则水平计数器加加,当计数器大于等于五时,可以返回true,即胜利,同样的方法可以计算垂直方向。
public static boolean checkWin(int y, int x, String qz) {
        int spsum = 1;
        int xxsum=1;
        //水平计数器,开始为1,你下了一个就是1
        for (int lx = x - 1; lx >= 0; lx--) {
            //计数左边的棋子数
            if (qp[y][lx].equals(qz)) {
                spsum++;
            }

            if (spsum >= 5) {
                return true;
            }
        }
        for (int rx = x +1; rx <qp.length-1; rx++) {
            //计数左边的棋子数
            if (qp[y][rx].equals(qz)) {
                spsum++;
            }

            if (spsum >= 5) {
                return true;
            }
        }
return false;
}
  • 如果返回true则胜利,反之。以下为完整代码
package Day3;
import java.util.Scanner;

public class Wzq {
    static String[][] qp = new String[15][15]; //{{null,null},{null,null}}
    static String white = "☆";
    static String black = "★";
    static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
    static String line = "十";
    static boolean flag = true;
    static Scanner zuoBiao = new Scanner(System.in);
    int x = zuoBiao.nextInt() - 1;
    int y = zuoBiao.nextInt() - 1;

    public static void main(String[] args) {
        Wzq.firstQp();
        //初始化数据
        Wzq.printQp();
        //打印输出
        Wzq.startQp();
        //开始下棋
    }

    /**
    *初始化棋盘
     */
    public static void firstQp() {
        for (int i = 0; i < qp.length; i++) {
            for (int j = 0; j < qp[i].length; j++) {
                qp[i][j] = line;
                //将棋盘的线被表示出来

                if (j == qp.length - 1) {
                    qp[i][j] = num[i];
                    //最后一列变成数字来表示行数
                }
                if (i == qp.length - 1) {
                    qp[i][j] = num[j];
                    //最后一行变成数字来表示列数
                }

            }

        }
        System.out.println("游戏开始");
    }

    /**
    *打印棋盘,每下完一次棋就更新一次棋盘
     */
    public static void printQp() {
        for (int i = 0; i < qp.length; i++) {
            for (int j = 0; j < qp[i].length; j++) {
                System.out.print(qp[i][j]);
            }
            System.out.println();
        }
    }

    /**
    *开始下棋./
     */
    public static void startQp() {
        while (true) {
            //一直循环下棋的过程

            if (flag) {
                System.out.println("轮到白棋了");
                int x = zuoBiao.nextInt() - 1;
                int y = zuoBiao.nextInt() - 1;
                boolean les = check(x, y);
                if (les) {

                    qp[x][y] = white;
                    Wzq.printQp();
                    boolean Win = checkWin(y, x, white);
                    if(Win){
                    System.out.println("恭喜白棋获胜");
                    break;
                    }

                    flag = false;
                } else {
                    System.out.println("请输入正确的坐标");
                    continue;
                    //跳过本次循环余下的部分,重新开始循环
                }

            }
            else {
                System.out.println("轮到黑棋了");
                int x = zuoBiao.nextInt() - 1;
                int y = zuoBiao.nextInt() - 1;

                boolean res = check(x, y);
                if (res) {

                    qp[x][y] = black;
                    Wzq.printQp();
                    boolean Win = checkWin(y, x, black);
                    if(Win){
                        System.out.println("恭喜黑棋获胜");
                    }
                    flag = true;
                } else {
                    System.out.println("请输入正确的坐标");
                }

            }


        }

    }

    /**
    *检查输入的数据是否有误./
     */
    public static boolean check(int x, int y) {
        if (x < 0 || y < 0 || x >=qp.length - 1 || y >=qp.length - 1) {
            //检查是否越界
            return false;
        }
        if (!qp[x][y].equals(line)) {
            //检查是否有重复的,equals方法已被定义,可直接用
            //line.quals(qp[x][y])同样可以,两者是一样的,将两个字符串进行比较,返回true or false
            return false;
        }
        return true;
        //两种情况之外才是true
    }

    /**
     * 检查输赢
     */
    public static boolean checkWin(int y, int x, String qz) {
        int spsum = 1;
        int xxsum=1;
        //水平计数器,开始为1,你下了一个就是1
        for (int lx = x - 1; lx >= 0; lx--) {
            //计数左边的棋子数
            if (qp[y][lx].equals(qz)) {
                spsum++;
            }

            if (spsum >= 5) {
                return true;
            }
        }
        for (int rx = x +1; rx <qp.length-1; rx++) {
            //计数左边的棋子数
            if (qp[y][rx].equals(qz)) {
                spsum++;
            }

            if (spsum >= 5) {
                return true;
            }
        }


        return false;


    }
}

有错误欢迎指出