281 lines
11 KiB
Java
281 lines
11 KiB
Java
import javax.swing.*;
|
|
import javax.swing.border.Border;
|
|
import java.awt.*;
|
|
|
|
public class TicTacToe {
|
|
private static int turnNumber = 0;
|
|
private static final JPanel panel = new JPanel();
|
|
private static final JTextField ta = new JTextField("Player A's Turn (X)");
|
|
private static final JButton r1c1 = new JButton("");
|
|
private static final JButton r1c2 = new JButton("");
|
|
private static final JButton r1c3 = new JButton("");
|
|
private static final JButton r2c1 = new JButton("");
|
|
private static final JButton r2c2 = new JButton("");
|
|
private static final JButton r2c3 = new JButton("");
|
|
private static final JButton r3c1 = new JButton("");
|
|
private static final JButton r3c2 = new JButton("");
|
|
private static final JButton r3c3 = new JButton("");
|
|
private static final JButton restart = new JButton("New Game");
|
|
private static final JPanel startMain = new JPanel();
|
|
|
|
public static void main(String[]args){
|
|
JFrame frame = new JFrame("Tic Tac Toe");
|
|
frame.setSize(600,650);
|
|
ta.setEditable(false);
|
|
restart.addActionListener(e -> {
|
|
enableAll();
|
|
ta.setText("Player A's Turn (X)");
|
|
});
|
|
r1c1.setSize(67,67);
|
|
r1c1.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r1c1.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r1c1.setText("O");
|
|
r1c1.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r1c1.setText("X");
|
|
r1c1.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
r1c2.setSize(67,67);
|
|
r1c2.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r1c2.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r1c2.setText("O");
|
|
r1c2.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r1c2.setText("X");
|
|
r1c2.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
r1c3.setSize(67,67);
|
|
r1c3.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r1c3.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r1c3.setText("O");
|
|
r1c3.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r1c3.setText("X");
|
|
r1c3.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
r2c1.setSize(67,67);
|
|
r2c1.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r2c1.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r2c1.setText("O");
|
|
r2c1.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r2c1.setText("X");
|
|
r2c1.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
r2c2.setSize(67,67);
|
|
r2c2.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r2c2.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r2c2.setText("O");
|
|
r2c2.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r2c2.setText("X");
|
|
r2c2.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
r2c3.setSize(67,67);
|
|
r2c3.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r2c3.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r2c3.setText("O");
|
|
r2c3.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r2c3.setText("X");
|
|
r2c3.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
r3c1.setSize(67,67);
|
|
r3c1.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r3c1.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r3c1.setText("O");
|
|
r3c1.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r3c1.setText("X");
|
|
r3c1.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
r3c2.setSize(67,67);
|
|
r3c2.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r3c2.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r3c2.setText("O");
|
|
r3c2.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r3c2.setText("X");
|
|
r3c2.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
r3c3.setSize(67,67);
|
|
r3c3.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
r3c3.addActionListener(e -> {
|
|
turnNumber++;
|
|
if(turnNumber % 2 == 0){
|
|
r3c3.setText("O");
|
|
r3c3.setEnabled(false);
|
|
ta.setText("Player A's Turn (X)");
|
|
}else{
|
|
r3c3.setText("X");
|
|
r3c3.setEnabled(false);
|
|
ta.setText("Player B's Turn (O)");
|
|
}
|
|
checkWin();
|
|
});
|
|
panel.setLayout(new GridLayout(3,3));
|
|
|
|
panel.add(r1c1);
|
|
panel.add(r1c2);
|
|
panel.add(r1c3);
|
|
panel.add(r2c1);
|
|
panel.add(r2c2);
|
|
panel.add(r2c3);
|
|
panel.add(r3c1);
|
|
panel.add(r3c2);
|
|
panel.add(r3c3);
|
|
startMain.setLayout(new GridLayout(5,5));
|
|
JButton start = new JButton("Start");
|
|
JLabel main = new JLabel("Tic Tac Toe", SwingConstants.CENTER);
|
|
main.setFont(new Font("Trebuchet MS", Font.PLAIN, 70));
|
|
main.setSize(400,400);
|
|
startMain.add(main);
|
|
startMain.add(start);
|
|
frame.add(startMain);
|
|
frame.setVisible(true);
|
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
start.addActionListener(e -> {
|
|
startMain.setVisible(false);
|
|
frame.add(restart, BorderLayout.PAGE_START);
|
|
frame.add(ta, BorderLayout.PAGE_END);
|
|
frame.add(panel, BorderLayout.CENTER);
|
|
});
|
|
}
|
|
public static void checkWin(){
|
|
if(r1c1.getText().equals("X") && r1c2.getText().equals("X") && r1c3.getText().equals("X")){
|
|
ta.setText("Player A Won! (X)");
|
|
disableAll();
|
|
}else if(r1c1.getText().equals("O") && r1c2.getText().equals("O") && r1c3.getText().equals("O")){
|
|
ta.setText("Player B Won! (O)");
|
|
disableAll();
|
|
}else if(r1c1.getText().equals("X") && r2c2.getText().equals("X") && r3c3.getText().equals("X")){
|
|
ta.setText("Player A Won! (X)");
|
|
disableAll();
|
|
}else if(r1c1.getText().equals("O") && r2c2.getText().equals("O") && r3c3.getText().equals("O")){
|
|
ta.setText("Player B Won! (O)");
|
|
disableAll();
|
|
}else if(r1c1.getText().equals("X") && r2c1.getText().equals("X") && r3c1.getText().equals("X")){
|
|
ta.setText("Player A Won! (X)");
|
|
disableAll();
|
|
}else if(r1c1.getText().equals("O") && r2c1.getText().equals("O") && r3c1.getText().equals("O")){
|
|
ta.setText("Player B Won! (O)");
|
|
disableAll();
|
|
}else if(r2c1.getText().equals("X") && r2c2.getText().equals("X") && r2c3.getText().equals("X")){
|
|
ta.setText("Player A Won! (X)");
|
|
disableAll();
|
|
}else if(r2c1.getText().equals("O") && r2c2.getText().equals("O") && r2c3.getText().equals("O")){
|
|
ta.setText("Player B Won! (O)");
|
|
disableAll();
|
|
}else if(r1c2.getText().equals("X") && r2c2.getText().equals("X") && r3c2.getText().equals("X")){
|
|
ta.setText("Player A Won! (X)");
|
|
disableAll();
|
|
}else if(r1c2.getText().equals("O") && r2c2.getText().equals("O") && r3c2.getText().equals("O")){
|
|
ta.setText("Player B Won! (O)");
|
|
disableAll();
|
|
}else if(r1c3.getText().equals("X") && r2c3.getText().equals("X") && r3c3.getText().equals("X")){
|
|
ta.setText("Player A Won! (X)");
|
|
disableAll();
|
|
}else if(r1c3.getText().equals("O") && r2c3.getText().equals("O") && r3c3.getText().equals("O")){
|
|
ta.setText("Player B Won! (O)");
|
|
disableAll();
|
|
}else if(r3c1.getText().equals("X") && r3c2.getText().equals("X") && r3c3.getText().equals("X")){
|
|
ta.setText("Player A Won! (X)");
|
|
disableAll();
|
|
}else if(r3c1.getText().equals("O") && r3c2.getText().equals("O") && r3c3.getText().equals("O")){
|
|
ta.setText("Player B Won! (O)");
|
|
disableAll();
|
|
}else if(r3c1.getText().equals("X") && r2c2.getText().equals("X") && r1c3.getText().equals("X")){
|
|
ta.setText("Player A Won! (X)");
|
|
disableAll();
|
|
}else if(r3c1.getText().equals("O") && r2c2.getText().equals("O") && r1c3.getText().equals("O")){
|
|
ta.setText("Player B Won! (O)");
|
|
disableAll();
|
|
}else if(!r1c1.isEnabled() && !r1c2.isEnabled() && !r1c3.isEnabled() && !r2c1.isEnabled() && !r2c2.isEnabled() && !r2c3.isEnabled() && !r3c1.isEnabled() && !r3c2.isEnabled() && !r3c3.isEnabled()){
|
|
ta.setText("Draw!");
|
|
disableAll();
|
|
}
|
|
}
|
|
public static void disableAll(){
|
|
r1c1.setEnabled(false);
|
|
r1c2.setEnabled(false);
|
|
r1c3.setEnabled(false);
|
|
r2c1.setEnabled(false);
|
|
r2c2.setEnabled(false);
|
|
r2c3.setEnabled(false);
|
|
r3c1.setEnabled(false);
|
|
r3c2.setEnabled(false);
|
|
r3c3.setEnabled(false);
|
|
}
|
|
|
|
public static void enableAll(){
|
|
turnNumber = 0;
|
|
r1c1.setEnabled(true);
|
|
r1c2.setEnabled(true);
|
|
r1c3.setEnabled(true);
|
|
r2c1.setEnabled(true);
|
|
r2c2.setEnabled(true);
|
|
r2c3.setEnabled(true);
|
|
r3c1.setEnabled(true);
|
|
r3c2.setEnabled(true);
|
|
r3c3.setEnabled(true);
|
|
r1c1.setText("");
|
|
r1c2.setText("");
|
|
r1c3.setText("");
|
|
r2c1.setText("");
|
|
r2c2.setText("");
|
|
r2c3.setText("");
|
|
r3c1.setText("");
|
|
r3c2.setText("");
|
|
r3c3.setText("");
|
|
panel.setEnabled(true);
|
|
}
|
|
}
|