Tic Tac Toe de base en java


J'essaie de faire un simple jeu tic tac toe en Java et j'ai presque terminé mais mon programme ne déclare pas de gagnant et ne déclare pas si le jeu est un match nul ou pas même quand dans mon code je lui ai dit de déclarer un gagnant.

Voici mon code:

 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;
}
Author: Ram, 2015-06-28

1 answers

Si c'est fait comme ça, alors turn qui ont la valeur faux après que quelqu'un a gagné et que vous souhaitez l'afficher dans main, voici les corrections:

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
        }
        ...
    }
}
 1
Author: maraca, 2015-06-28 00:13:12