119 lines
No EOL
5.1 KiB
Java
119 lines
No EOL
5.1 KiB
Java
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import javax.swing.*;
|
|
import javax.swing.border.CompoundBorder;
|
|
|
|
@SuppressWarnings("serial")
|
|
public class Gui extends JFrame {
|
|
private JPanel panel = new JPanel(new GridLayout(3, 3));
|
|
private boolean turn = true;
|
|
private JLabel[][] labels = new JLabel[][] {{new JLabel(" "), new JLabel(" "), new JLabel(" ")}, {new JLabel(" "), new JLabel(" "), new JLabel(" ")}, {new JLabel(" "), new JLabel(" "), new JLabel(" ")}};
|
|
|
|
public Gui(String s) {
|
|
super(s);
|
|
|
|
initComponents();
|
|
}
|
|
|
|
private void initComponents() {
|
|
for (int i = 0; i < labels.length; i++) {
|
|
for (int j = 0; j < labels[0].length; j++) {
|
|
labels[i][j].addMouseListener(new MouseListener() {
|
|
@Override
|
|
public void mouseClicked(MouseEvent e) {
|
|
JLabel l = (JLabel) e.getSource();
|
|
|
|
if (l.getText().equals(" ")) {
|
|
if (turn) {
|
|
l.setText("X");
|
|
l.setForeground(Color.BLUE);
|
|
} else {
|
|
l.setText("O");
|
|
l.setForeground(Color.RED);
|
|
}
|
|
turn = !turn;
|
|
}
|
|
|
|
for (int i = 0; i < labels.length; i++) {
|
|
if (labels[i][0].getText().equals(labels[i][1].getText()) && labels[i][0].getText().equals(labels[i][2].getText()) && labels[i][0].getText().equals("X")) win("X");
|
|
else if (labels[i][0].getText().equals(labels[i][1].getText()) && labels[i][0].getText().equals(labels[i][2].getText()) && labels[i][0].getText().equals("O")) win("O");
|
|
}
|
|
|
|
for (int i = 0; i < labels[0].length; i++) {
|
|
if (labels[0][i].getText().equals(labels[1][i].getText()) && labels[1][i].getText().equals(labels[2][i].getText()) && labels[0][i].getText().equals("X")) win("X");
|
|
else if (labels[0][i].getText().equals(labels[1][i].getText()) && labels[1][i].getText().equals(labels[2][i].getText()) && labels[0][i].getText().equals("O")) win("O");
|
|
}
|
|
|
|
if (labels[0][0].getText().equals(labels[1][1].getText()) && labels[1][1].getText().equals(labels[2][2].getText()) && labels[0][0].getText().equals("X")) win("X");
|
|
else if (labels[0][0].getText().equals(labels[1][1].getText()) && labels[1][1].getText().equals(labels[2][2].getText()) && labels[0][0].getText().equals("O")) win("O");
|
|
|
|
if (labels[0][2].getText().equals(labels[1][1].getText()) && labels[1][1].getText().equals(labels[2][0].getText()) && labels[0][2].getText().equals("X")) win("X");
|
|
else if (labels[0][2].getText().equals(labels[1][1].getText()) && labels[1][1].getText().equals(labels[2][0].getText()) && labels[0][2].getText().equals("O")) win("O");
|
|
|
|
if(allfilled()) win(" ");
|
|
}
|
|
|
|
@Override
|
|
public void mouseExited(MouseEvent e) {}
|
|
|
|
@Override
|
|
public void mouseEntered(MouseEvent e) {}
|
|
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {}
|
|
|
|
@Override
|
|
public void mouseReleased(MouseEvent e) {}
|
|
});
|
|
|
|
labels[i][j].setFont(new Font("Monospaced",Font.BOLD,128));
|
|
labels[i][j].setBorder(new CompoundBorder(BorderFactory.createLineBorder(Color.BLACK), BorderFactory.createEmptyBorder(0, 5, 0, 5)));
|
|
labels[i][j].setHorizontalAlignment(SwingConstants.CENTER);
|
|
panel.add(labels[i][j]);
|
|
}
|
|
}
|
|
|
|
add(panel);
|
|
|
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Exit when close button clicked
|
|
pack();
|
|
setVisible(true);
|
|
}
|
|
|
|
private void win(String s) {
|
|
String winString;
|
|
|
|
if (s.equals("X")) winString = "X Wins!";
|
|
else if (s.equals("O")) winString = "O Wins!";
|
|
else winString = "It's a tie!";
|
|
|
|
JOptionPane.showMessageDialog(this, winString);
|
|
|
|
for (int i = 0; i < labels.length; i++) {
|
|
for (int j = 0; j < labels[0].length; j++) {
|
|
labels[i][j].setText(" ");
|
|
turn = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private boolean allfilled() {
|
|
for (int i = 0; i < labels.length; i++) {
|
|
for (int j = 0; j < labels[0].length; j++) {
|
|
if (labels[i][j].getText().equals(" ")) return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/** The entry main() method */
|
|
public static void main(String[] args) {
|
|
// Run GUI codes in the Event-Dispatching thread for thread safety
|
|
SwingUtilities.invokeLater(new Runnable() {
|
|
public void run() {
|
|
new Gui("Tic Tac Toe");
|
|
}
|
|
});
|
|
}
|
|
} |