Java 中的 TicTacToe 游戏,X 没有出现

问题描述 投票:0回答:1

我正在做一项java作业。这是一个跟随视频。添加

isGameFinished
方法后,我的主板不再显示 X。 (我一直在运行它,直到此时才遇到问题) 我很难看出我犯了什么错误。

import java.util.Random;
import java.util.Scanner;

public class TicTacToe {

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

        while (true) {
            playerMove(board, scanner);
            if (isGameFinished(board)) {
                break;
            }

            printBoard(board);

            computerTurn(board);
            if (isGameFinished(board)) {
                break;
            }
            printBoard(board);
        }
        // print(board);
        // scanner.close();
    }

    private static boolean isGameFinished(char[][] board) {
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                if (board[i][j] == ' ') {
                    return false;
                }
            }
        }
        printBoard(board);
        System.out.println("Game ended in a tie");
        return true;
        // TODO Auto-generated method stub

    }

    private static void computerTurn(char[][] board) {
        Random rand = new Random();
        int computerMove;
        while (true) {
            computerMove = rand.nextInt(9) + 1;
            if (isValidMove(board, computerMove)) {
                break;
            }
        }
        System.out.println("Computer chose space " + computerMove);
        placeMove(board, Integer.toString(computerMove), 'O');
    }

    private static boolean isValidMove(char[][] board, int position) {
        switch (position) {
        case 1:
            return (board[0][0] == ' ');

        case 2:
            return (board[0][1] == ' ');

        case 3:
            return (board[0][2] == ' ');

        case 4:
            return (board[1][0] == ' ');
        case 5:
            return (board[1][1] == ' ');
        case 6:
            return (board[1][2] == ' ');
        case 7:
            return (board[2][0] == ' ');
        case 8:
            return (board[2][1] == ' ');
        case 9:
            return (board[2][2] == ' ');

        default:
            System.out.println(":(");
        }
        return false;
    }

    private static void playerMove(char[][] board, Scanner scanner) {
        String userInput;
        while (true) {
            System.out.println("Where would you like to play? (1-9)");
            userInput = scanner.next();
            if (isValidMove(board, Integer.parseInt(userInput))) {
                break;
            } else {
                System.out.println(userInput + " is not a valid move. Choose another spot");
            }
            placeMove(board, userInput, 'X');
        }
    }

    private static void placeMove(char[][] board, String position, char symbol) {
        switch (position) {
        case "1":
            board[0][0] = symbol;
            break;
        case "2":
            board[0][1] = symbol;
            break;
        case "3":
            board[0][2] = symbol;
            break;
        case "4":
            board[1][0] = symbol;
            break;
        case "5":
            board[1][1] = symbol;
            break;
        case "6":
            board[1][2] = symbol;
            break;
        case "7":
            board[2][0] = symbol;
            break;
        case "8":
            board[2][1] = symbol;
            break;
        case "9":
            board[2][2] = symbol;
            break;

        default:
            System.out.println(":(");
        }
    }

    private static void printBoard(char[][] board) {
        System.out.println(board[0][0] + "|" + board[0][1] + "|" + board[0][2]);
        System.out.println("-+-+-");
        System.out.println(board[1][0] + "|" + board[1][1] + "|" + board[1][2]);
        System.out.println("-+-+-");
        System.out.println(board[2][0] + "|" + board[2][1] + "|" + board[2][2]);
    }

}

我尝试回溯我的工作,撤消我所做的事情,并将其与视频教程进行比较,但我没有看到它。

your text

java tic-tac-toe
1个回答
0
投票

这里有一些建议。

利用 Arrays#fill 方法。

char[][] board = new char[3][3];
for (char[] r : board) Arrays.fill(r, ' ');

简化 isValidMove 方法。

private static boolean isValidMove(char[][] board, int position) {
    return switch (position) {
        case 1, 2, 3 -> board[0][position - 1] == ' ';
        case 4, 5, 6 -> board[1][position - 4] == ' ';
        case 7, 8, 9 -> board[2][position - 7] == ' ';
        default -> false;
    };
}

还有 placeMove 方法。

private static void placeMove(char[][] board, int position, char symbol) {
    switch (position) {
        case 1, 2, 3 -> board[0][position - 1] = symbol;
        case 4, 5, 6 -> board[1][position - 4] = symbol;
        case 7, 8, 9 -> board[2][position - 7] = symbol;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.