五子棋——控制台版本

操作说明

菜的像个弟弟,大家不要嘲笑 在这里插入图片描述

开始之后默认白棋先走,(通过输入坐标的形式来下棋),如果五子连心,游戏结束

package com.jh.test206;

import java.util.Scanner;

public class FiveChessGame206 {
    private final int N = 17;
    private int score =0 ;
    private boolean gameover = false;
    private char[][] fiveChess = new char[N+1][N+1];
    private Scanner cin = new Scanner(System.in);
    private boolean who_am_i = true;

    private void init() {
        fiveChess[0][0] = ' ';
        for (int i = 1; i < N; i++) {
            if (i <= 10) {
                fiveChess[0][i] = (char) ('0' + i - 1);
            } else {
                fiveChess[0][i] = (char) ('a' + i - 11);
            }
        }
        for (int j = 1; j < N; j++) {
            if (j <= 10) {
                fiveChess[j][0] = (char) ('0' + j - 1);
            } else {
                fiveChess[j][0] = (char) ('a' + j - 11);
            }
        }
        for (int i = 1; i < N; i++) {
            for (int j = 1; j < N; j++) {
                fiveChess[i][j] = '*';
            }
        }
    }

    private void printUI() {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.print(fiveChess[i][j] + "  ");
            }
            System.out.println();
        }
    }

    private boolean judge(int x, int y, boolean who_am_i) {

        if (who_am_i) {
            /**
             * 横坐标判断
             */
            for (int i = y; i >= 0; i--) {
                if (fiveChess[x][i] == '#') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("白方胜");
                return true;
            }
            for (int i = y; i < N; i++) {
                if (fiveChess[x][i] == '#') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("白方胜");
                return true;
            }

            score = 0;
            /**
             * 纵坐标判断
             */
            for (int i = x; i >= 0; i--) {
                if (fiveChess[i][y] == '#') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("白方胜");
                return true;
            }
            for (int i = x; i < N; i++) {
                if (fiveChess[i][y] == '#') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("白方胜");
                return true;
            }

            score = 0;

            /**
             * 反斜杠判断
             */
            for (int i = x, j = y; i >= 0 && y >= 0; i--, j--) {
                if (fiveChess[i][j] == '#') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("白方胜");
                return true;
            }
            for (int i = x, j = y; i < N && y < N; i++, j++) {
                if (fiveChess[i][j] == '#') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("白方胜");
                return true;
            }

            score = 0;

            /**
             * 斜杠判断
             */

            for (int i = x, j = y; i < N && y >= 0; i++, j--) {
                if (fiveChess[i][j] == '#') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                gameover = true;
                System.out.println("白方胜");
            }
            for (int i = x, j = y; i >= 0 && y < N; i--, j++) {
                if (fiveChess[i][j] == '#') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                gameover = true;
                System.out.println("白方胜");
            }

            return false;
        } else {

            /**
             * 横坐标判断
             */
            score = 0;
            for (int i = y; i >= 0; i--) {
                if (fiveChess[x][i] == '@') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("黑方胜");
                return true;
            }
            for (int i = y; i < N; i++) {
                if (fiveChess[x][i] == '@') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("黑方胜");
                return true;
            }

            score = 0;
            /**
             * 纵坐标判断
             */
            for (int i = x; i >= 0; i--) {
                if (fiveChess[i][y] == '@') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("黑方胜");
                return true;
            }
            for (int i = x; i < N; i++) {
                if (fiveChess[i][y] == '@') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("黑方胜");
                return true;
            }

            score = 0;

            /**
             * 反斜杠判断
             */
            for (int i = x, j = y; i >= 0 && y >= 0; i--, j--) {
                if (fiveChess[i][j] == '@') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("黑方胜");
                return true;
            }
            for (int i = x, j = y; i < N && y < N; i++, j++) {
                if (fiveChess[i][j] == '@') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("黑方胜");
                return true;
            }

            score = 0;

            /**
             * 斜杠判断
             */

            for (int i = x, j = y; i < N && y >= 0; i++, j--) {
                if (fiveChess[i][j] == '@') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("黑方胜");
                return true;
            }
            for (int i = x, j = y; i >= 0 && y < N; i--, j++) {
                if (fiveChess[i][j] == '@') {
                    score++;
                } else
                    break;
            }
            if (score > 5) {
                System.out.println("黑方胜");
                return true;
            }

            return false;
        }
    }

    private int change(char number) {
        int numbers = (int) number;
        if (numbers >= 48 && numbers <= 57)
            return numbers - 48 + 1;
        else if (numbers >= 97 && numbers <=102)
            return numbers - 97 + 10+1 ;
        else
            return -1;
    }

    private boolean noRepeat(int x, int y) {
        if (fiveChess[x][y] == '*') {
            return true;
        } else {
            System.out.println("此位置已有棋子,请重新下棋");
            return false;
        }
    }

    private void playChess() {

        char inputx, inputy;
        if (who_am_i == true) {
            System.out.println("请白色棋子方下棋,请输入坐标(z,y)");
        } else {
            System.out.println("请黑色棋子方下棋,请输入坐标(x,y)");
        }
        inputx = cin.next().charAt(0);
        inputy = cin.next().charAt(0);
        int x = change(inputx);// change
        int y = change(inputy);// change
        if (x == -1 || y == -1) {
            System.out.println("棋子越界,请重新下棋");
        }
        if (x != -1 && y != -1 && noRepeat(x, y)) {
            if (who_am_i == true) {
                fiveChess[x][y] = '#';
            } else {
                fiveChess[x][y] = '@';
            }
            if (judge(x, y, who_am_i))
                gameover = true;
            who_am_i = !who_am_i;
            score = 0;
        }
    }

    private void beginner() {
        System.out.println("请选择,白方(0),或者黑方(1)下棋(默认白子先行)");
        char begin = cin.next().charAt(0);
        if (begin == '1') {
            who_am_i = false;
        }

    }

    public void run() {
        init();
        printUI();
        beginner();
        do {
            playChess();
            printUI();
        } while (gameover == false);
    }

    public static void main(String[] args) {
        FiveChessGame206 demo = new FiveChessGame206();
        demo.run();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41448891/article/details/84636904
今日推荐