/*This program is Tic-Tac-Toe game which contain nine button and when user
click the button it appear x or o for win.
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
publicclass mytictactoe implements ActionListener
{
/* Instance Variables*/
private JFrame window = new JFrame("Tic-Tac-Toe");
private JButton button1 = new JButton(" ");
private JButton button2 = new JButton(" ");
private JButton button3 = new JButton(" ");
private JButton button4 = new JButton(" ");
private JButton button5 = new JButton("");
private JButton button6 = new JButton(" ");
private JButton button7 = new JButton(" ");
private JButton button8 = new JButton(" ");
private JButton button9 = new JButton(" ");
private String letter = " ";
privateintcount = 0;
privatebooleanwin = (false);
public mytictactoe()
{
/*create window*/
window.setSize(300, 300);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLayout(new GridLayout(3, 3));
/* Add Color to the Button*/
button1.setBackground(Color.BLUE);
button2.setBackground(Color.BLUE);
button3.setBackground(Color.BLUE);
button4.setBackground(Color.BLUE);
button5.setBackground(Color.BLUE);
button6.setBackground(Color.BLUE);
button7.setBackground(Color.BLUE);
button8.setBackground(Color.BLUE);
button9.setBackground(Color.BLUE);
/* Add Buttons to the Wincow*/
window.add(button1);
window.add(button2);
window.add(button3);
window.add(button4);
window.add(button5);
window.add(button6);
window.add(button7);
window.add(button8);
window.add(button9);
/* Make the window Visible*/
window.setVisible(true);
/* Add The Action Listener to the Buttons */
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
button6.addActionListener(this);
button7.addActionListener(this);
button8.addActionListener(this);
button9.addActionListener(this);
}
/*Make the Window Visible*/
publicvoid actionPerformed(ActionEvent a)
{
count++;
/* Calculate who's Turn It is*/
if (count == 1 || count == 3 || count == 5 || count == 7 || count == 9)
{
letter = "X";
} elseif (count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
{
letter = "O";
}
/* Display x's or o's on the buttons*/
if(a.getSource() == button1)
{
button1.setText(letter);
button1.setEnabled(false);
}elseif (a.getSource() == button2)
{
button2.setText(letter);
button2.setEnabled(false);
}elseif (a.getSource() == button3)
{
button3.setText(letter);
button3.setEnabled(false);
}elseif (a.getSource() == button4)
{
button4.setText(letter);
button4.setEnabled(false);
}elseif (a.getSource() == button5)
{
button5.setText(letter);
button5.setEnabled(false);
}elseif (a.getSource() == button6)
{
button6.setText(letter);
button6.setEnabled(false);
}elseif (a.getSource() == button7)
{
button7.setText(letter);
button7.setEnabled(false);
}elseif (a.getSource() == button8)
{
button8.setText(letter);
button8.setEnabled(false);
}elseif (a.getSource() == button9)
{
button9.setText(letter);
button9.setEnabled(false);
}
/* Determine who won*/
// Horizontal wins
if (button1.getText() == button2.getText()
button2.getText() == button3.getText()
button1.getText() != ""){
win=true;
}elseif(button4.getText() == button5.getText()
button5.getText() == button6.getText()
button4.getText() != ""){
win=true;
}elseif(button7.getText() == button8.getText()
button8.getText() == button9.getText()
button7.getText() != ""){
win=true;
/* vertical wins*/
}elseif(button1.getText() == button4.getText()
button4.getText() == button7.getText()
button1.getText() != ""){
win=true;
}elseif(button2.getText() == button5.getText()
button5.getText() == button8.getText()
button2.getText() != ""){
win=true;
}elseif(button3.getText() == button6.getText()
button6.getText() == button9.getText()
button3.getText() != ""){
win=true;
}
/*diagonal wins*/
elseif(button1.getText() == button5.getText()
button5.getText() == button9.getText()
button1.getText() != ""){
win=true;
}elseif(button3.getText() == button5.getText()
button5.getText() == button7.getText()
button3.getText() != ""){
win=true;
}else {
win = false;
}
/* Show a dialog if someone wins or the game is tie*/
if (win == true)
{
JOptionPane.showMessageDialog(null, letter + "WINS:");
}elseif (count == 9 & win == false)
JOptionPane.showMessageDialog(null, "Tie Game!");
}
publicstaticvoid main(String[] args)
{
new mytictactoe();
}
}
Description
This game consisting of3 by 3 grid. Each player (represented by X and O) takes alternating turns trying to earn three of their letters in a row horizontally, vertically, or diagonally.
At this point, I needed to make a grid layout 3 by 3. My idea was to create 9 buttons in each of the grid boxes. But buttons would respond when clicked with either a X or an O depending on who’s turn it was.
What we see is a window with nine buttons labeled X. Each time the button is pressed it invokes the actionPerformed method and prints to the consol “A buttons were pressed.” My next step was to, when the program was started, have the buttons blank, and when pressed, label them X. To do that, I set the label to null when the object was first created in the instance variables. Then in the actionPerformed method, I had the button label change to X if it was pressed by doing this.
The next problem I had to surmount was to determine whose turn it was. I did this by creating a hidden variable that increments each time the button is pressed.
The count integer increments by one each time the button is clicked. I also created a letter string that would vary depending on count’s value. If count is, 1,3,5,7 or 9 letter is defined as X if count is 2,4,6,8 or 10 count is defined as O. I found out that even if the button is pressed, the button is still actively causing the button to change to both O and X. Setting the setEnable() method to false fixed this.
Now we need to determine the winner. I created some logical statements to determine each possible case of winning. Eventually if button1, button2, and button3 were all the same value, that person won, but we also have to account for the fact that when the program starts each button is null causing the winner to be null. However null is not a player and in our logical statements we must account for this. I created a Boolean win instance variable set to false by default and then added these logical statements to my actionPerformed method.
Which accounts should be every possible win. Now that we have determined the winner, lets add a pop up box announcing the winner. All we have to do is create an if statement and if there is a winner announce it, if there is no winner after nine clicks announce there is a tie. To create a pop up box we are going to use showMessageDialog provided to us in the Joptionpane package.