I have written a code in Java for a tic tac toe game and need to add a graphic i
ID: 3859362 • Letter: I
Question
I have written a code in Java for a tic tac toe game and need to add a graphic in the JPanel to signify the winner. A Large X for x(player wins), an Large O for o(computer wins) and an overlapping XO for (tie). I have included the tic tac toe game. Just having issues with putting graphics in JPanel. Please help!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JTicTacToe2
extends JFrame
{
public static void main(String [] args)
{
new JTicTacToe();
}
private JButton buttonA1, buttonA2, buttonA3, buttonB1, buttonB2, buttonB3, buttonC1, buttonC2, buttonC3;
private Board board;
public JTicTacToe2()
{
// Set up the grid
this.setSize(300,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Tic-Tac-Toe");
JPanel Marker = new JPanel();
Marker.setSize(300,300);
Marker.setLayout(new GridLayout(3,3));
buttonA1 = createButton("A1");
buttonA2 = createButton("A2");
buttonA3 = createButton("A3");
buttonB1 = createButton("B1");
buttonB2 = createButton("B2");
buttonB3 = createButton("B3");
buttonC1 = createButton("C1");
buttonC2 = createButton("C2");
buttonC3 = createButton("C3");
Marker.add(buttonA1);
Marker.add(buttonA2);
Marker.add(buttonA3);
Marker.add(buttonB1);
Marker.add(buttonB2);
Marker.add(buttonB3);
Marker.add(buttonC1);
Marker.add(buttonC2);
Marker.add(buttonC3);
this.add(Marker);
this.setVisible(true);
// Start the game
board = new Board();
}
private JButton createButton(String square)
{
JButton button = new JButton();
button.setPreferredSize(new Dimension(50, 50));
Font f = new Font("Dialog", Font.PLAIN, 72);
button.setFont(f);
button.addActionListener(e -> buttonClick(e, square));
return button;
}
private void buttonClick(ActionEvent e, String square)
{
if (board.getSquare(square) != 0)
return;
JButton button = (JButton)e.getSource();
button.setText("X");
board.playAt(square, 1);
if (board.isGameOver() == 3)
{
JOptionPane.showMessageDialog(null,
// need to have a graphic with an overlapping XO
"Tie! Try Again.", "Game Over",
JOptionPane.INFORMATION_MESSAGE);
resetGame();
return;
}
if (board.isGameOver() == 1)
{
JOptionPane.showMessageDialog(null,
// need to have a graphic with an O
"Computer Wins! Better Luck Next Time.", "Game Over",
JOptionPane.INFORMATION_MESSAGE);
resetGame();
return;
}
String computerTurn = board.getNextMove();
board.playAt(computerTurn,2);
/* use a switch for computer moves. If the center is empty, play the center square.
If the center is not empty but any of the four corners are empty, play one of the corners randomly.
If the center is not empty and no corners are empty, play one of the edges.*/
switch (computerTurn)
{
case "A1":
buttonA1.setText("O");
break;
case "A2":
buttonA2.setText("O");
break;
case "A3":
buttonA3.setText("O");
break;
case "B1":
buttonB1.setText("O");
break;
case "B2":
buttonB2.setText("O");
break;
case "B3":
buttonB3.setText("O");
break;
case "C1":
buttonC1.setText("O");
break;
case "C2":
buttonC2.setText("O");
break;
case "C3":
buttonC3.setText("O");
break;
}
if (board.isGameOver() == 2)
{
JOptionPane.showMessageDialog(null,
//need to have a graphic with an X
"User Beats Computer!!!", "Game Over",
JOptionPane.INFORMATION_MESSAGE);
resetGame();
return;
}
}
// reset buttons for next play
private void resetGame()
{
board.reset();
buttonA1.setText("");
buttonA2.setText("");
buttonA3.setText("");
buttonB1.setText("");
buttonB2.setText("");
buttonB3.setText("");
buttonC1.setText("");
buttonC2.setText("");
buttonC3.setText("");
}
}
Explanation / Answer
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JTicTacToe2
extends JFrame
{
public static void main(String [] args)
{
new JTicTacToe();
}
private JButton buttonA1, buttonA2, buttonA3, buttonB1, buttonB2, buttonB3, buttonC1, buttonC2, buttonC3;
private Board board;
public JTicTacToe2()
{
// Set up the grid
this.setSize(300,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Tic-Tac-Toe");
JPanel Marker = new JPanel();
Marker.setSize(300,300);
Marker.setLayout(new GridLayout(3,3));
buttonA1 = createButton("A1");
buttonA2 = createButton("A2");
buttonA3 = createButton("A3");
buttonB1 = createButton("B1");
buttonB2 = createButton("B2");
buttonB3 = createButton("B3");
buttonC1 = createButton("C1");
buttonC2 = createButton("C2");
buttonC3 = createButton("C3");
Marker.add(buttonA1);
Marker.add(buttonA2);
Marker.add(buttonA3);
Marker.add(buttonB1);
Marker.add(buttonB2);
Marker.add(buttonB3);
Marker.add(buttonC1);
Marker.add(buttonC2);
Marker.add(buttonC3);
this.add(Marker);
this.setVisible(true);
// Start the game
board = new Board();
}
private JButton createButton(String square)
{
JButton button = new JButton();
button.setPreferredSize(new Dimension(50, 50));
Font f = new Font("Dialog", Font.PLAIN, 72);
button.setFont(f);
button.addActionListener(e -> buttonClick(e, square));
return button;
}
private void buttonClick(ActionEvent e, String square)
{
if (board.getSquare(square) != 0)
return;
JButton button = (JButton)e.getSource();
button.setText("X");
board.playAt(square, 1);
if (board.isGameOver() == 3)
{
JOptionPane.showMessageDialog(null,
// need to have a graphic with an overlapping XO
"Tie! Try Again.", "Game Over",
JOptionPane.INFORMATION_MESSAGE);
resetGame();
return;
}
if (board.isGameOver() == 1)
{
JOptionPane.showMessageDialog(null,
// need to have a graphic with an O
"Computer Wins! Better Luck Next Time.", "Game Over",
JOptionPane.INFORMATION_MESSAGE);
resetGame();
return;
}
String computerTurn = board.getNextMove();
board.playAt(computerTurn,2);
/* use a switch for computer moves. If the center is empty, play the center square.
If the center is not empty but any of the four corners are empty, play one of the corners randomly.
If the center is not empty and no corners are empty, play one of the edges.*/
switch (computerTurn)
{
case "A1":
buttonA1.setText("O");
break;
case "A2":
buttonA2.setText("O");
break;
case "A3":
buttonA3.setText("O");
break;
case "B1":
buttonB1.setText("O");
break;
case "B2":
buttonB2.setText("O");
break;
case "B3":
buttonB3.setText("O");
break;
case "C1":
buttonC1.setText("O");
break;
case "C2":
buttonC2.setText("O");
break;
case "C3":
buttonC3.setText("O");
break;
}
if (board.isGameOver() == 2)
{
JOptionPane.showMessageDialog(null,
//need to have a graphic with an X
"User Beats Computer!!!", "Game Over",
JOptionPane.INFORMATION_MESSAGE);
resetGame();
return;
}
}
// reset buttons for next play
private void resetGame()
{
board.reset();
buttonA1.setText("");
buttonA2.setText("");
buttonA3.setText("");
buttonB1.setText("");
buttonB2.setText("");
buttonB3.setText("");
buttonC1.setText("");
buttonC2.setText("");
buttonC3.setText("");
}
}