tictac/Gui.java
2020-05-21 16:33:25 -06:00

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");
}
});
}
}