java中的基本Tic Tac Toe

时间:2015-06-27 22:50:08

标签: java arrays for-loop

我正在尝试在Java中制作一个简单的tic tac toe游戏,我差不多完成但是我的程序没有声明胜利者并且没有声明游戏是否是平局,即使在我的代码中我也是告诉它申报胜利者。

这是我的代码:

 import java.util.*;

 public class TicTacToe {

/**
 * @param args the command line arguments
 */
public static int row, colm;
public static char board[][] = new char [3][4];
public static Scanner console = new Scanner(System.in);
public static char turn = 'X';

public static void main(String[] args) {
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 4; j++){
            board[i][j] = '_';
        }
    }

    board();
    play();
    winner(row,colm);
}

public static void board() {
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 4; j++) {
            if(j == 0) {
                System.out.print("|");
            } else {
                System.out.print(board[i][j]+"|");
            }

        }
        System.out.println();
    }
}

public static void play() {
    boolean playing = true;
    while(playing) {
        row = console.nextInt();
        colm = console.nextInt();
        board[row][colm] = turn;
        if(winner(row,colm)) {
            playing = false;
            System.out.print("you win");
        }
        board();
        if(turn == 'X') {
            System.out.println("Player 2 your O");
            turn = 'O';
        } else
            turn='X';
    }
}

public static boolean winner(int move1, int move2) {
    if(board[0][move2] == board[1][move2] && board[0][move2] == board[2][move2])
        return true;
    if(board[move1][0] == board[move1][1] && board[move1][0] == board[move1][2])
        return true;
    if(board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[1][1] != '_')
       return true;
    if(board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[1][1] != '_')
       return true;
    return false;
}

1 个答案:

答案 0 :(得分:1)

如果这样做,那么在有人赢了之后turn会有错误的值,并且你想在main中显示它,这里有更正:

public static void main(String[] args) {
    ...
    board();
    play();
    // remove winner(row,colm); it isn't doing anything here
    // turn has the right value of the winner here if play() is modified
}

public static void play() {
    // remove boolean playing = true; it is not needed
    for (;;) { // I call it the 'forever', but you can also write while(true)
        ...
        board[row][colm] = turn;
        board(); // move up unless you don't want to display the board on wins
        if (winner(row,colm)) {
            System.out.print(turn + " you win");
            return; // (or break) <-- otherwise turn has the wrong value in main
        }
        ...
    }
}