首页 > 解决方案 > 井字游戏获胜逻辑 Java

问题描述

我正在编写一个包含两个文件的井字游戏,一个用于 TTT 对象,另一个用于运行实际游戏的主要方法。除了我的获胜/平局方法外,一切都运行良好。我正在从所有可能的获胜线中创建字符串,这些线也正常工作。但是,我返回“X”或“O”的逻辑无法正常运行。在我的游戏主要方法中,我可以打印一个获胜组合,它会成功打印一个“XXX”或“OOO”,但该方法没有正确识别它并将其用于条件。

伪获胜/平局方法:

从每个获胜组合创建 8 个不同的字符串

检查它们中的任何一个是否等于“XXX”或“OOO”

如果是,则返回“X”或“O”

public class TicTacToe {

//Enum data type for board states
public enum states { 
    X,
    O,
    EMPTY;
    
}
//2D Array for board
private static states[][] board = new states[3][3];

//Method constructor
public TicTacToe() {
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            board[i][j] = states.EMPTY;
        }
    }   
}

//Method to display the board in console
public void displayBoard() {
    System.out.printf("%5s  %5s  %5s\n\n%5s  %5s  %5s\n\n%5s  %5s  %5s\n\n", 
            board[0][0], board[0][1], board[0][2],
            board[1][0], board[1][1], board[1][2],
            board[2][0], board[2][1], board[2][2]);                                                 
}

//Method to set a board position to X or O
public void setBoard(int row, int column, states i) {
    if (board[row][column] == states.EMPTY) {
        board[row][column] = i;
    }
    else {
        throw new RuntimeException();
    }


//Method to check for a winner or draw
public String winDraw() {
    String row1 = board[0][0].toString() + board[0][1].toString() + board[0][2].toString();
    String row2 = board[1][0].toString() + board[1][1].toString() + board[1][2].toString();
    String row3 = board[2][0].toString() + board[2][1].toString() + board[2][2].toString();
    String col1 = board[0][0].toString() + board[1][0].toString() + board[2][0].toString();
    String col2 = board[0][1].toString() + board[1][1].toString() + board[2][1].toString();
    String col3 = board[0][2].toString() + board[1][2].toString() + board[2][2].toString();
    String diag = board[0][0].toString() + board[1][1].toString() + board[2][2].toString();
    String antiDiag = board[0][2].toString() + board[1][1].toString() + board[2][0].toString();
    
    if(row1 == "XXX" || row2 == "XXX" || row3 == "XXX" || col1 == "XXX" || col2 == "XXX" || col3 == "XXX" || diag == "XXX" || antiDiag == "XXX") {
        return "X";
    }
    else if(row1 == "OOO" || row2 == "OOO" || row3 == "OOO" || col1 == "OOO" || col2 == "OOO" || col3 == "OOO" || diag == "OOO" || antiDiag == "OOO") {
        return "O";
    }
    else {
        return null;
    }
}

}

标签: javaclassconditional-statements

解决方案


推荐阅读