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 to share