Answered You can hire a professional tutor to get the answer.

QUESTION

project and class TicI'acToe used in lab #10 and rewrite it to use a GUI to represent the tic tac toe board. You may call your project whatever you...

Class TicTacToe

import java.util.*;

/**

* A class modelling a tic-tac-toe (noughts and crosses, Xs and Os) game.

*

* @author Lynn Marshall

* @version November 8, 2012

*/

public class TicTacToe

{

public static final String PLAYER_X = "X"; // player using "X"

public static final String PLAYER_O = "O"; // player using "O"

public static final String EMPTY = " "; // empty cell

public static final String TIE = "T"; // game ended in a tie

private String player; // current player (PLAYER_X or PLAYER_O)

private String winner; // winner: PLAYER_X, PLAYER_O, TIE, EMPTY = in progress

private int numFreeSquares; // number of squares still free

private String board[][]; // 3x3 array representing the board

/**

* Constructs a new Tic-Tac-Toe board.

*/

public TicTacToe()

{

board = new String[3][3];

}

/**

* Sets everything up for a new game. Marks all squares in the Tic Tac Toe board as empty,

* and indicates no winner yet, 9 free squares and the current player is player X.

*/

private void clearBoard()

{

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3; j++) {

board[i][j] = EMPTY;

}

}

winner = EMPTY;

numFreeSquares = 9;

player = PLAYER_X; // Player X always has the first turn.

}

/**

* Plays one game of Tic Tac Toe.

*/

public void playGame()

{

int row, col;

Scanner sc;

clearBoard(); // clear the board

// print starting board

print();

// loop until the game ends

while (winner==EMPTY) { // game still in progress

// get input (row and column)

while (true) { // repeat until valid input

System.out.print("Enter row and column of chosen square (0, 1, 2 for each): ");

sc = new Scanner(System.in);

row = sc.nextInt();

col = sc.nextInt();

if (row>=0 && row<=2 && col>=0 && col<=2 && board[row][col]==EMPTY) break;

System.out.println("Invalid selection, try again.");

}

board[row][col] = player; // fill in the square with player

numFreeSquares--; // decrement number of free squares

// see if the game is over

if (haveWinner(row,col))

winner = player; // must be the player who just went

else if (numFreeSquares==0)

winner = TIE; // board is full so it's a tie

// print current board

print();

// change to other player (this won't do anything if game has ended)

if (player==PLAYER_X)

player=PLAYER_O;

else

player=PLAYER_X;

}

}

/**

* Returns true if filling the given square gives us a winner, and false

* otherwise.

*

* @param int row of square just set

* @param int col of square just set

*

* @return true if we have a winner, false otherwise

*/

private boolean haveWinner(int row, int col)

{

// unless at least 5 squares have been filled, we don't need to go any further

// (the earliest we can have a winner is after player X's 3rd move).

if (numFreeSquares>4) return false;

// Note: We don't need to check all rows, columns, and diagonals, only those

// that contain the latest filled square. We know that we have a winner

// if all 3 squares are the same, as they can't all be blank (as the latest

// filled square is one of them).

// check row "row"

if ( board[row][0].equals(board[row][1]) &&

board[row][0].equals(board[row][2]) ) return true;

// check column "col"

if ( board[0][col].equals(board[1][col]) &&

board[0][col].equals(board[2][col]) ) return true;

// if row=col check one diagonal

if (row==col)

if ( board[0][0].equals(board[1][1]) &&

board[0][0].equals(board[2][2]) ) return true;

// if row=2-col check other diagonal

if (row==2-col)

if ( board[0][2].equals(board[1][1]) &&

board[0][2].equals(board[2][0]) ) return true;

// no winner yet

return false;

}

/**

* Prints the board to standard out using toString().

*/

public void print()

{

System.out.println(this.toString());

if(this.winner!=EMPTY){

System.out.println(player+" wins");// something needs to be added here

}

}

/**

* Returns a string representing the current state of the game. This should look like

* a regular tic tac toe board, and be followed by a message if the game is over that says

* who won (or indicates a tie).

*

* @return String representing the tic tac toe game state

*/

public String toString()

{

String table = "";

for (int i = 0; i < 2; i++) {

for (int j = 0; j < 2; j++) {

table += board[i][j] + " | ";

}

table += board[i][2];

table += "n---------n";

}

table += board[2][0] + " | " + board[2][1] + " | " +board[2][2];

table += "nn";

return table;

}

}

Class TicTacToeFrame

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

/**

* A class modelling a tic-tac-toe (noughts and crosses, Xs and Os) game in a very

* simple GUI window.

*

* @author Lynn Marshall

* @version November 8, 2012

*/

public class TicTacToeFrame extends TicTacToe

{

private JTextArea status; // text area to print game status

/**

* Constructs a new Tic-Tac-Toe board and sets up the basic

* JFrame containing a JTextArea in a JScrollPane GUI.

*/

public TicTacToeFrame()

{

JFrame frame = new JFrame("Tic Tac Toe");

frame.setSize(250,250);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container content = frame.getContentPane();

status = new JTextArea(20,50);

status.setFont(new Font("Monospaced",Font.BOLD,18));

status.setEditable(false);

JScrollPane scroll = new JScrollPane(status);

frame.add(scroll);

frame.setVisible(true);

frame.pack();// add the necessary code here

}

/**

* Prints the board to the GUI using toString().

*/

public void print()

{

status.setText(toString());// add code here

}

}

In this assignment, you are to take the detector: project and class TicI‘acToe used in lab #10and rewrite it to use a GUI to represent the tic tac toe board. You may call your project whateveryou like and you may have as many java classes as you like. (It can be done with just one!) The code in the given I icTacToe class was written to make the conversion to the GUI stylefairly straight forward. You can reuse all the constants and fields, except that the board fieldnow needs to have a different type, and you will need to add a few other fields. It's recommended that you use a 3x3 Grid Layout made up of J Buttons for the tic-tac—toe board.When a button is selected, the players &quot;mark&quot; (either &quot;X&quot; or &quot;0&quot;, depending on whose turn it is)appears in the button and the button can no longer be selected. After the game ends, no buttonsmay be selected. However, if you prefer another approach, that's fine, as long as your gameworks. Now add a label field (e. g. at the bottom of your frame) to indicate the current state of the game(e.g. game in progress and X's turn; game in progress and 0's tum; game over tie; game over Xwins; game over 0 wins) in a label field. Of course, the label must change so that it is alwayscurrent (Le. reflects the current state of the game). Now add a &quot;Game&quot; menu, with two choices: New (or ctrl-N) to start a new game (whether thecurrent game is over or not), and Quit (or ctrl-Q) to quit. Feel free to experiment further with GUIs. Possible extensions include adding a component thatdisplays the number of games that X has won, the number that O has won, and the number ofties. You can also add additional menu items (e.g. change the game so that &quot;0&quot; goes first, etc.),or you could implement this functionality another way. You can even change what is displayedon the buttons from just text &quot;X&quot; and &quot;O&quot; to fancy graphic &quot;X&quot; and &quot;O&quot; (by providing jpg files}.Or whatever else you can think of to make the game look better! You may also add sounds using.wav files. These extensions are not required for full marks, but may earn bonus marks.
Show more
LEARN MORE EFFECTIVELY AND GET BETTER GRADES!
Ask a Question