/*TicTacToe.java*/
public class TicTacToe{
//private boolean isFull = false;//if true all the squares have been assigned.
//private int playerCounter = 1;//if it is odd it's player1's turn if even it's player2's turn
private TicTacToeEn[][] board = new TicTacToeEn[3][3];//to represent the 3-by-3 board
//private boolean isDraw;//to check if the game is draw
//private boolean squareStatus;//returns the status of a square, if false the square is full if true the square is empty
//private boolean victory;//if returns true one of the players has won
//private int row;//row of the 3-by-3 board
//private int column;//column of the 3-by-3 board
//private int gameCounter;//counts the moves
public enum TicTacToeEn{
X, O, EMPTY
}//end of enum
TicTacToeEn theSymbol;//of type enum holds the current theSymbol, X or O
//constructor
public TicTacToe(){
for( int i = 0; i < board.length; i++ ){
for( int j = 0; j < board[i].length; j++ ){
board[i][j] = TicTacToeEn.EMPTY;
}//columns
}//rows
}//end of constructor
//checks if square is empty
public boolean checkSquare( int row, int column ){
if(board[row][column] == TicTacToeEn.EMPTY){
return false;
}
else{
return true;
}
}//end of checkSquare()
//assigns X or O to the square
public void assignSymbol( int row, int column, int counter ){
if( isOdd( counter )){//it's player1
board[row][column] = TicTacToeEn.X;
}
else{//it's player2
board[row][column] = TicTacToeEn.O;
}
}//end of assignSymbol()
//check if the game is draw
public boolean isDraw(){
for( int i = 0; i < board.length; i++ ){
for(int j = 0; j < board[i].length; j++ ){
if( board[i][j] == TicTacToeEn.EMPTY ){//if there is an empty square
return false;
}
}//end of column array
}//end of row array
return true;//if there isn't an empty square
}//end of isDraw()
//checks if anybody has won the game
public boolean checkVictory( int row, int column, int counter ){
if( isOdd( counter )){//it's player1
theSymbol = TicTacToeEn.X;
}
else{//it's player2
theSymbol = TicTacToeEn.O;
}
//determine victory
if(
( board[row][0] == theSymbol && board[row][1] == theSymbol && board[row][2] == theSymbol )//check 3-in-the-row horizontally
|| ( board[0][column] == theSymbol && board[1][column] == theSymbol && board[2][column] == theSymbol )//check 3-in-the-row vertically
|| ( board[0][0] == theSymbol && board[1][1] == theSymbol && board[2][2] == theSymbol )//check 3-in-the-row 1st diagonal
|| ( board[0][2] == theSymbol && board[1][1] == theSymbol && board[2][0] == theSymbol )//check 3-in-the-row 2nd diagonal
){
return true;
}
else{
return false;
}
}//end of checkVictory()
//determine if the argument is odd or even
public boolean isOdd( int number){
if( number % 2 == 0){//it's even
return true;
}
else{//it's odd
return false;
}
}//end of isOdd()
/*get the right input for the array,
effectively subtracting 1 to the input so that the
index is still within the array range*/
public int optimizeInput( int theInput ){
int newInput = theInput - 1;
return newInput;
}
//print board
public void printBoard(){
/* System.out.print("\n\n\n\n\n");
System.out.println("| " + board[0][0] + " | " + board[0][1] + " | " + board[0][2] + " |");
System.out.println("| " + board[1][0] + " | " + board[1][1] + " | " + board[1][2] + " |");
System.out.println("| " + board[2][0] + " | " + board[2][1] + " | " + board[2][2] + " |");
System.out.print("\n\n\n\n\n"); */
System.
out.
print("\n\n\n\n\n"); System.
out.
printf("| %6s | %6s | %6s |", board
[0][0], board
[0][1], board
[0][2]); System.
out.
printf("\n| %6s | %6s | %6s |", board
[1][0], board
[1][1], board
[1][2]); System.
out.
printf("\n| %6s | %6s | %6s |", board
[2][0], board
[2][1], board
[2][2]); System.
out.
print("\n\n\n\n\n"); }
//validation row
public int getRowNumber( Scanner scanner ){
int rowNumber;
System.
out.
println( "\nRow and press enter or type exit to leave the program: " ); while( true ){
String userInput
= scanner.
next(); if ("exit".equalsIgnoreCase( userInput )){
System.
exit(1);//if users types exit, program terminates }
try{
rowNumber
= Integer.
valueOf( userInput
); // goes straight to catch if input not numeric if (( rowNumber >= 1 ) && ( rowNumber <= 3 )){
return rowNumber; // input was valid
}
}
System.
out.
println( "\nRe-enter row number, must be an integer value, or exit to quit program" ); }
}//end while
}//end method getRowNumber()
//validation col
public int getColNumber( Scanner scanner ){
int colNumber;
System.
out.
println( "\nCol and press enter or type exit to leave the program: " ); while( true ){
String userInput
= scanner.
next(); if ( "exit".equalsIgnoreCase( userInput )){
System.
exit(1);//if users types exit, program terminates }
try{
colNumber
= Integer.
valueOf( userInput
); // goes straight to catch if input not numeric if (( colNumber >= 1 ) && ( colNumber <= 3 )){
return colNumber; // input was valid
}
}
System.
out.
println( "\nRe-enter col number, must be an integer value, or exit to quit program" ); }
}//end while
}//end method getColNumber()
}//end of class