Basic Tic Tac Toe in java

I am trying to make a simple Tic Tac Toe game in Java and I am almost done, but my program does not announce the winner or declare the game is a draw or not, even when in my code I told him to declare the winner.

Here is my 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;
}

      

+3


source to share


1 answer


If done like this, it turn

will have the wrong value after someone wins and you want to display it in main

, here are the amendments:



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


source







All Articles