欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

控制台版单机双人五子棋游戏(Java版)---新人小白

程序员文章站 2024-03-18 15:03:22
...

控制台版单机双人五子棋游戏(Java版)—新人小白控制台版单机双人五子棋游戏(Java版)---新人小白

设置了两个方法:①下棋(输入两个数判断是否有重棋,是否出界)
②判断五子连棋的输赢(一个米字的形式,所以在下棋这个点的附近判断,共分成了8种情况-----有点麻烦哈,不过好理解)

import java.util.Scanner;
public class Game {
    char[][] arr;
    int m, n;
    boolean black = false;//判断棋子是否为黑棋
    public static void main(String[] args) {
        Game ch = new Game();//对象chess下棋的缩写ch
        Scanner sc = new Scanner(System.in);
        ch.arr = new char[15][15];
        for (int i = 0; i < 15; i++) {
            for (int j = 0; j < 15; j++) {
                ch.arr[i][j] = '+';
            }
        }
        int count = 1;//奇数时黑棋下,偶数时白棋下
        while (true) {
            if (count % 2 != 0) {
                System.out.println("请黑棋下,输入行和列:");
                count++;
            } else {
                System.out.println("请白棋下,输入行和列:");
                count++;
            }
            ch.play(sc);//调用下棋的方法
            for (int i = 0; i < 15; i++) {
                for (int j = 0; j < 15; j++) {
                    System.out.print(ch.arr[i][j] + " ");
                }
                System.out.println();
            }
            if (ch.judge()) {
                if (ch.black) {
                    System.out.println("白棋胜");
                    break;
                } else {
                    System.out.println("黑棋胜");
                    break;
                }
            }
        }
    }
    /**
     * 下棋
     * @param sc
     */
    public void play(Scanner sc) {
        m = sc.nextInt();
        n = sc.nextInt();
        if (m < 15 && n < 15 && m >= 0 && n >= 0) {
            if (arr[m][n] == '+') {
                if (black) {
                    arr[m][n] = '○';
                } else {
                    arr[m][n] = '●';
                }
                black = !black;
            } else {
                System.out.println("已存在,请重新输入:");
                play(sc);
            }
        } else {
            System.out.println("超出范围,请重新输入:");
            play(sc);
        }
    }
    /**
     * 判断输赢,以上下左右左斜右斜---8钟情况(或许有点麻烦了)
     * @return
     */
//左右方向
    public boolean judge() {
        int count = 1;
        char k = arr[m][n];
        for (int i = n - 1; i >= 0; i--) {//左方
            if (arr[m][i] == k) {
                count++;
            } else {
                break;
            }
        }
        if (count >= 5) {
            return true;
        }
        for (int i = n + 1; i < 5; i++) {//右方
            if (arr[m][i] == k) {
                count++;
            } else {
                break;
            }
        }
        if (count >= 5) {
            return true;
        } else {
            count = 1;
        }
//上下方向
        for (int i = m - 1; i >= 0; i--) {//上方
            if (arr[i][n] == k) {
                count++;
            } else {
                break;
            }
        }
        if (count >= 5) {
            return true;
        }
        for (int i = m + 1; i < 15; i++) {//下方
            if (arr[i][n] == k) {
                count++;
            } else {
                break;
            }
        }
        if (count >= 5) {
            return true;
        } else {
            count = 1;
        }
//以\的形式表示
        for (int i = m - 1, j = n - 1; i >= 0 && j >= 0; i--, j--) {//左上方
            if (arr[i][j] == k) {
                count++;
            } else {
                break;
            }
        }
        for (int i = m + 1, j = n + 1; i < 15 && j < 15; i++, j++) {//右下方
            if (arr[i][j] == k) {
                count++;
            } else {
                break;
            }
        }
        if (count >= 5) {
            return true;
        } else {
            count = 1;
        }
//以/的形式表示
        for (int i = m - 1, j = n + 1; i >= 0 && j < 15; i--, j++)//右上方
        {
            if (arr[i][j] == k) {
                count++;
            } else {
                break;
            }![在这里插入图片描述](https://img-blog.csdnimg.cn/20200402141150890.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoZW5hbjEyMzQ1Njc=,size_16,color_FFFFFF,t_70)
        }
        for (int i = m + 1, j = n - 1; i < 15 && j >= 0; i++, j--) { //左下方
            if (arr[i][j] == k) {
                count++;
            } else {
                break;
            }
        }
        if (count >= 5) {
            return true;
        }
        return false;
    }
}

本人还是Java小白,以上方法或许有点麻烦,还请谅解。以上有一个缺点是:只能玩一局,判断输赢之后便结束程序了。
部分结果运行示意图:
控制台版单机双人五子棋游戏(Java版)---新人小白