Java实现简单五子棋

目录

1.设计思路

2.代码实现

1.初始化需要的变量

2.初始化棋盘和打印棋盘的方法

3.判断胜利的方法

 4.开始下棋

 5.总体代码

6运行结果 


1.设计思路

   1.启动五子棋游戏  调用一个方法
           初始化棋盘(开始之初初始化一次,对二维数组进行赋值) -- 初始化方法
           打印出五子棋棋盘(重复使用多次) -- 打印棋盘方法
   2.下棋 黑白双方交替下棋
           输入坐标(黑棋,白棋哪个先下棋)
           判断坐标是否合法,判断是否重复
           判断输赢

2.代码实现

1.初始化需要的变量

  static String white = "☆";
    static String black = "★";
    static String[][] qp = new String[15][15];
    static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
    static String line = "十";

2.初始化棋盘和打印棋盘的方法

    /**
     * 初始化棋盘
     */
    public static void qipan(){
        qp[14]=num;//棋盘最后一行为数字
        int t=0;
        for (int i = 0; i < qp.length-1; i++) {//循环14行即可
            for (int j = 0; j < qp.length; j++) {//每一列
                if (j == 14) {
                    qp[i][j] = num[i];//最后一列为数字
                } else {
                    qp[i][j] = line;
                }
            }
        }
    }

    /**
     * 打印棋盘
     */
    public static void print(){
        /*输出棋盘*/
        for (int i = 0; i <15 ; i++) {
            for (int j = 0; j < 15; j++) {
                System.out.print(qp[i][j]);
            }
            System.out.println();
        }
    }

3.判断胜利的方法

分别判断垂直、水平、左斜、右斜四个方向。只要满足某个方向连续5个棋子颜色相同,即胜利

代码如下:

private static boolean shuying(int x, int y, String qz) {
        //判断水平输赢
        int spsum = 0;
        for (int i = y; i >= 0; i--) {//判断向左
            if (qp[x][i] == qz) {
                spsum++;
            } else break;
        }
        for (int i = y + 1; i < qp.length - 1; i++) {//判断向右
            if (qp[x][i] == qz) {
                spsum++;
            } else break;
        }
        if (spsum >= 5)
            return true;
        //判断垂直输赢
        int czsum = 0;
        for (int i = x; i >= 0; i--) {//判断向上
            if (qp[i][y] == qz) {
                czsum++;
            } else break;
        }
        for (int i = x + 1; i < qp.length - 1; i++) {//判断向下
            if (qp[i][y] == qz) {
                czsum++;
            } else break;
        }
        if (czsum >= 5)
            return true;
        //判断左斜
        int zxsum=0;
        for (int i = x,j=y; i >=0&&j>=0; i--,j--) {//判断左上
            if(qp[i][j]==qz){
                zxsum++;
            }else break;
        }
        for (int i = x+1,j=y+1; i <qp.length-1&&j<qp[0].length-1; i++,j++) {//判断右下
            if(qp[i][j]==qz){
                zxsum++;
            }else break;
        }
        if(zxsum>=5){
            return true;
        }
        //判断右斜
        int yxsum=0;
        for(int i=x,j=y;i>=0&&j<qp[0].length-1;i--,j++){//判断右上
            if(qp[i][j]==qz){
                yxsum++;
            }else break;
        }
        for(int i=x+1,j=y-1; i<qp.length-1&&j>=0;i++,j--){//判断左下
            if(qp[i][j]==qz){
                yxsum++;
            }else break;
        }
            if(yxsum>=5){
                return true;
            }
            else return false;
        }

 4.开始下棋

黑子先下,然后调用打印棋盘方法,将棋盘打印出来,再判断黑棋是否胜利;

白棋下子,然后打印棋盘,判断胜负,一直重复下棋。知道一方胜利,游戏结束

注:没下一步需要判断棋子的坐标是否合法

判断输赢代码

 public static boolean panduan(int x,int y){
        if(x>=14||y>=14||qp[x][y]!=line){
            System.out.println("输入的不合法");
            return false;
        }
        else return true;
    }

 开始下棋代码

 public static void xiaqi() {
        boolean flag = true;
        Scanner s = new Scanner(System.in);
        while (true) {
            if (flag) {
                System.out.println("请黑子下棋");
                int x = s.nextInt() - 1;
                int y = s.nextInt() - 1;
                boolean b = panduan(x, y);
                if (b) {
                    qp[x][y] = black;
                    print();
                    boolean win = shuying(x, y, black);
                    if (win) {
                        System.out.println("黑棋胜利");
                        break;
                    }
                    flag = false;
                }
            } else {
                System.out.println("请白子下棋");
                int x = s.nextInt() - 1;
                int y = s.nextInt() - 1;
                boolean b = panduan(x, y);
                if (b) {
                    qp[x][y] = white;
                    print();
                    boolean win = shuying(x, y, white);
                    if (win) {
                        System.out.println("白棋胜利");
                        break;
                    }
                    flag = true;
                }
            }
        }
    }

 5.总体代码

import java.util.Scanner;

/**
 * 1.先初始化棋盘;
 * 2.判断下棋的位置是否合法,合法将棋盘打印出来
 * 3.判断输赢
 */
public class wzq {
    static String white = "☆";
    static String black = "★";
    static String[][] qp = new String[15][15];
    static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
    static String line = "十";
    public static void main(String[] args) {
        qipan();//初始化棋盘
        print();//打印棋盘
        xiaqi();//开始下棋
    }
    /**
     * 开始下棋
     */
    public static void xiaqi() {
        boolean flag = true;
        Scanner s = new Scanner(System.in);
        while (true) {
            if (flag) {
                System.out.println("请黑子下棋");
                int x = s.nextInt() - 1;
                int y = s.nextInt() - 1;
                boolean b = panduan(x, y);
                if (b) {
                    qp[x][y] = black;
                    print();
                    boolean win = shuying(x, y, black);
                    if (win) {
                        System.out.println("黑棋胜利");
                        break;
                    }
                    flag = false;
                }
            } else {
                System.out.println("请白子下棋");
                int x = s.nextInt() - 1;
                int y = s.nextInt() - 1;
                boolean b = panduan(x, y);
                if (b) {
                    qp[x][y] = white;
                    print();
                    boolean win = shuying(x, y, white);
                    if (win) {
                        System.out.println("白棋胜利");
                        break;
                    }
                    flag = true;
                }
            }
        }
    }

    private static boolean shuying(int x, int y, String qz) {
        //判断水平输赢
        int spsum = 0;
        for (int i = y; i >= 0; i--) {//判断向左
            if (qp[x][i] == qz) {
                spsum++;
            } else break;
        }
        for (int i = y + 1; i < qp.length - 1; i++) {//判断向右
            if (qp[x][i] == qz) {
                spsum++;
            } else break;
        }
        if (spsum >= 5)
            return true;
        //判断垂直输赢
        int czsum = 0;
        for (int i = x; i >= 0; i--) {//判断向上
            if (qp[i][y] == qz) {
                czsum++;
            } else break;
        }
        for (int i = x + 1; i < qp.length - 1; i++) {//判断向下
            if (qp[i][y] == qz) {
                czsum++;
            } else break;
        }
        if (czsum >= 5)
            return true;
        //判断左斜
        int zxsum=0;
        for (int i = x,j=y; i >=0&&j>=0; i--,j--) {//判断左上
            if(qp[i][j]==qz){
                zxsum++;
            }else break;
        }
        for (int i = x+1,j=y+1; i <qp.length-1&&j<qp[0].length-1; i++,j++) {//判断右下
            if(qp[i][j]==qz){
                zxsum++;
            }else break;
        }
        if(zxsum>=5){
            return true;
        }
        //判断右斜
        int yxsum=0;
        for(int i=x,j=y;i>=0&&j<qp[0].length-1;i--,j++){//判断右上
            if(qp[i][j]==qz){
                yxsum++;
            }else break;
        }
        for(int i=x+1,j=y-1; i<qp.length-1&&j>=0;i++,j--){//判断左下
            if(qp[i][j]==qz){
                yxsum++;
            }else break;
        }
        if(yxsum>=5){
            return true;
        }
        else return false;
    }

    /**
     * 初始化棋盘
     */
    public static void qipan(){
        qp[14]=num;//棋盘最后一行为数字
        int t=0;
        for (int i = 0; i < qp.length-1; i++) {//循环14行即可
            for (int j = 0; j < qp.length; j++) {//每一列
                if (j == 14) {
                    qp[i][j] = num[i];//最后一列为数字
                } else {
                    qp[i][j] = line;
                }
            }
        }
    }

    /**
     * 打印棋盘
     */
    public static void print(){
        /*输出棋盘*/
        for (int i = 0; i <15 ; i++) {
            for (int j = 0; j < 15; j++) {
                System.out.print(qp[i][j]);
            }
            System.out.println();
        }
    }
    public static boolean panduan(int x,int y){
        if(x>=14||y>=14||qp[x][y]!=line){
            System.out.println("输入的不合法");
            return false;
        }
        else return true;
    }
}

6运行结果 

十十十十十十十十十十十十十十⒈
十十十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 1
★十十十十十十十十十十十十十⒈
十十十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请白子下棋
2 1
★十十十十十十十十十十十十十⒈
☆十十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 2
★★十十十十十十十十十十十十⒈
☆十十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请白子下棋
2 2
★★十十十十十十十十十十十十⒈
☆☆十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 3
★★★十十十十十十十十十十十⒈
☆☆十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请白子下棋
2 3
★★★十十十十十十十十十十十⒈
☆☆☆十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 4
★★★★十十十十十十十十十十⒈
☆☆☆十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请白子下棋
2 4
★★★★十十十十十十十十十十⒈
☆☆☆☆十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 5
★★★★★十十十十十十十十十⒈
☆☆☆☆十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
黑棋胜利

Process finished with exit code 0