//  Scott DeRuiter          7/24/2002
//  TicTacToe.java
//  Play the game of Tictactoe

public class TicTacToe   
{

	private char [][] board = { { '1', '2', '3' },
			            { '4', '5', '6' },
			            { '7', '8', '9' } };
	private boolean player1turn, winner, done;
	private char choice;

	public TicTacToe ( )   
	{
		done = winner = false;
		player1turn = true;
	}

	public static void main ( String [] args )   
	{
		TicTacToe t = new TicTacToe ( );
		t.RunGame ( );
	}

	public void RunGame ( )   
	{
		do  
		{
			PrintBoard ( );
			AskAndChange ( );
			CheckForWin ( );
			player1turn = !player1turn;
		} while ( !done );
		WinOrLoseMessage ( );
	}

	public void PrintBoard ( )  {
		System.out.println ( "\n\n" );
		for ( int i = 0; i < board.length; i++ )   
		{
			System.out.print ( "        " );
			for ( int j = 0; j < board[i].length; j++ )
				System.out.print ( board [i][j] + "    " );
			System.out.println ( "\n" );
		}
		System.out.println ( "\n\n" );
	}

	public void AskAndChange ( )   
	{
		TextReader console = new TextReader ( );
		boolean askagain = false;
		do 
		{
			if ( player1turn )
				System.out.print ( "\n\nPlayer 1, " );
			else
				System.out.print ( "\n\nPlayer 2, " );
			System.out.print ( "enter the place for your next move (1 - 9) ->  " );
			choice = console.readlnChar ( );
			switch ( choice )   
			{
				case '1': case '2': case '3': case '4': case '5': case '6':
				case '7': case '8': case '9': 
					askagain = Change ( choice );    break;
				default:
					askagain = true;
			}
		} while ( askagain );
	}

	public boolean Change ( char choice )  
	{
		int row = ((int)choice - 49) / 3;
		int col = ((int)choice - 49) % 3;
		if ( board [row][col] == 'X' || board [row][col] == 'O' )
			return true;
		else if ( player1turn )
			board [row][col] = 'X';
		else
			board [row][col] = 'O';
		return false;
	}

	public void CheckForWin ( )   
	{
		char gamepiece = 'O';
		if ( player1turn )
			gamepiece = 'X';
		CheckForRowWin ( gamepiece );
		CheckForColWin ( gamepiece );
		CheckForDiagWin ( gamepiece );
		CheckForCatsGame ( );
	}

	public void CheckForRowWin ( char gamepiece )    
	{
		int count = 0;
		for (int i = 0; i <= 2; i++)
		{
			count = 0;
			for (int j = 0; j <= 2; j++)
				if ( board[i][j] == gamepiece )
					count++;
			if ( count == 3 )  
 			{
				done = true;
				winner = true;
			}
		}
	}
	
	public void CheckForColWin ( char gamepiece )  
	{
		int count = 0;
		for (int j = 0; j <= 2; j++)
		{
			count = 0;
			for (int i = 0; i <= 2; i++)
				if ( board[i][j] == gamepiece )
					count++;
			if ( count == 3 )  
			{
				done = true;
				winner = true;
			}
		}
	}

	public void CheckForDiagWin ( char gamepiece )    
	{
		if ( board[0][0] == board[1][1] && board[1][1] == board[2][2] )  
		{
			done = true;
			winner = true;
		}
		if ( board[0][2] == board[1][1] && board[1][1] == board[2][0] )  
		{
			done = true;
			winner = true;
		}
	}

	public void CheckForCatsGame ( )    
	{
		int count = 0;
		for (int i = 0; i <= 2; i++)
			for (int j = 0; j <= 2; j++)
				if ( board[i][j] == 'X' || board[i][j] == 'O' )
					count++;
		if ( count == 9 )
			done = true;
	}

	public void WinOrLoseMessage ( )  
	{
		player1turn = !player1turn;
		PrintBoard ( );
		if ( !winner )
			System.out.println ( "\n\nIt was a cat's game" );
		else if (player1turn && winner)
			System.out.println ( "\n\nPLAYER 1 IS THE WINNER!!" );
		else if (!player1turn && winner)
			System.out.println ( "\n\nPLAYER 2 IS THE WINNER!!" );
		System.out.println ( "\n\n" );
	}
}

Back to Lesson 17 Examples

Back to Java Main Page