用Java编写的一个简单的五子棋控制台应用程序

它具有简单的游戏循环和胜利条件检查。记住,这只是一个基础版本,并未包含人工智能(AI)对手或图形用户界面(GUI)。

import java.util.Scanner;

public class Gomoku {
    private static final int SIZE = 15; //棋盘大小
    private static final char EMPTY = '.'; //未放置棋子的位置
    private static final char PLAYER_X = 'X';
    private static final char PLAYER_O = 'O';

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        char[][] board = new char[SIZE][SIZE];
        initializeBoard(board);
        printBoard(board);

        char currentPlayer = PLAYER_X;
        while (true) {
            System.out.println("Player " + currentPlayer + "'s turn");
            System.out.print("Enter row and column (0 - " + (SIZE - 1) + "): ");
            int row = scanner.nextInt();
            int col = scanner.nextInt();

            if (row < 0 || col < 0 || row >= SIZE || col >= SIZE || board[row][col] != EMPTY) {
                System.out.println("Invalid move. Try again.");
                continue;
            }

            board[row][col] = currentPlayer;
            printBoard(board);

            if (isWinningMove(board, row, col, currentPlayer)) {
                System.out.println("Player " + currentPlayer + " wins!");
                break;
            } else if (isBoardFull(board)) {
                System.out.println("The game is a tie!");
                break;
            }

            currentPlayer = (currentPlayer == PLAYER_X) ? PLAYER_O : PLAYER_X;
        }

        scanner.close();
    }

    private static void initializeBoard(char[][] board) {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                board[i][j] = EMPTY;
            }
        }
    }

    private static void printBoard(char[][] board) {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                System.out.print(board[i][j] + " ");
            }
            System.out.println();
        }
    }

    private static boolean isWinningMove(char[][] board, int row, int col, char player) {
        // 检查行、列、对角线
        return (checkLine(board, row, 0, 0, 1, player) ||
                checkLine(board, 0, col, 1, 0, player) ||
                checkLine(board, row, col, 1, 1, player) ||
                checkLine(board, row, col, 1, -1, player));
    }

    private static boolean checkLine(char[][] board, int startRow, int startCol, int deltaRow, int deltaCol, char player) {
        int count = 0;
        for (int i = -4; i <= 4; i++) {
            int r = startRow + i * deltaRow;
            int c = startCol + i * deltaCol;
            if (r >= 0 && r < SIZE && c >= 0 && c < SIZE && board[r][c] == player) {
                count++;
                if (count == 5) return true;
            } else {
                count = 0; // Reset count if not consecutive
            }
        }
        return false;
    }

    private static boolean isBoardFull(char[][] board) {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                if (board[i][j] == EMPTY) {
                    return false;
                }
            }
        }
        return true;
    }
}

在这份代码中,我们定义了几个关键的方法:

- `initializeBoard()`: 初始化棋盘,填充为`EMPTY`由`.`表示。
- `printBoard()`: 打印当前棋盘的状态。
- `isWinningMove()`: 检查最后一手棋是否导致胜利。
- `checkLine()`: 检查一条线上是否连续有五个相同的棋子。
- `isBoardFull()`: 检查棋盘是否已满。

玩家交替输入他们的移动,如果输入无效(超出棋盘范围或该位置已经有棋子),他们需要重新输入。游戏在有一方胜出或棋盘填满后结束。

请记得,尽管这个例子没有图形界面,也没有过多复杂的规则实现(如禁手规则等),但它为你展示了五子棋基本逻辑的实现方式。😄🎲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辽宁统招专升本&单招升学肖老师

idea的使用与分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值