0

I am building a Tic Tac Toe game in Java and a created an endGame() func to see if a player has won. When I was testing it, I saw that in some cases it did not work how it was supposed to(for ex. when I was testing the 3rd col vertically, the function would return after I press like 2 other buttons and the return value wasn't always right). I just moved the if statement up and it worked but the last 2 cases didn't. This is the code:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GameFrame extends JFrame {
    private JPanel panel;
    private JLabel result;
    private JButton[][] buttons = new JButton[3][3];
    private boolean isXTurn = true;
    private boolean gameOver = false;
    
    public GameFrame() {
        setProperties();
        init();
        setUI();
    }
    public void setProperties() {
        setSize(300,300);
        setLocationRelativeTo(null);
        setTitle("Tic Tac Toe");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public void init() {
        result = new JLabel("");
        panel = new JPanel(new GridLayout(3,3));
        for(int i = 0;i < buttons.length;i++) {
            for(int j = 0;j < buttons[i].length;j++) {
                buttons[i][j] = new JButton();
                int finalI = i;
                int finalJ = j;
                buttons[i][j].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if(isXTurn) {
                            if(!buttons[finalI][finalJ].getText().equals("O")) {
                                buttons[finalI][finalJ].setText("X");
                                isXTurn = false;
                            }
                            if(!endGame().equals("")) {
                                System.out.println(endGame());
                            }
                        } else {
                            if(!buttons[finalI][finalJ].getText().equals("X")) {
                                buttons[finalI][finalJ].setText("O");
                                isXTurn = true;
                            }
                            System.out.println(endGame());
                        }
                    }
                });
            }
        }
    }
    public void setUI() {
        for(int i = 0;i < buttons.length;i++) {
            for(int j = 0;j < buttons[i].length;j++) {
                panel.add(buttons[i][j]);
            }
        }

        add(panel);
    }
    public String endGame() {
        if(buttons[0][2].getText().equals(buttons[1][2].getText()) && buttons[1][2].getText().equals(buttons[2][2].getText())) {
            return buttons[0][2].getText();
        }
        if(buttons[0][1].getText().equals(buttons[1][1].getText()) && buttons[1][1].getText().equals(buttons[2][1].getText())) {
            return buttons[0][1].getText();
        }
        if(buttons[0][0].getText().equals(buttons[0][1].getText()) && buttons[0][1].getText().equals(buttons[0][2].getText())) {
            return buttons[0][0].getText();
        }
        if(buttons[1][0].getText().equals(buttons[1][1].getText()) && buttons[1][1].getText().equals(buttons[1][2].getText())) {
            return buttons[1][0].getText();
        }
        if(buttons[2][0].getText().equals(buttons[2][1].getText()) && buttons[2][1].getText().equals(buttons[2][2].getText())) {
            return buttons[2][0].getText();
        }
        if(buttons[0][0].getText().equals(buttons[1][0].getText()) && buttons[1][0].getText().equals(buttons[2][0].getText())) {
            return buttons[0][0].getText();
        }
        if(buttons[0][0].getText().equals(buttons[1][1].getText()) && buttons[1][1].getText().equals(buttons[2][2].getText())) {
            return buttons[0][0].getText();
        }
        if(buttons[0][2].getText().equals(buttons[1][1].getText()) && buttons[1][1].getText().equals(buttons[2][0].getText())) {
            return buttons[0][2].getText();
        }

        return "";
    }

}
AronKafe
  • 11
  • 3

0 Answers0