Untitled

 avatar
unknown
plain_text
a year ago
5.1 kB
3
Indexable
class TicTacToe extends JFrame implements ActionListener { //evan
    private static JFrame gameSelectionFrame;
    private static final int ROWS = 3;
    private static final int COLS = 3;
    private static final int SIZE = 100;
    private static final int GAP = 10;
    private JButton[][] buttons;
    private int[][] values;
    private int currentPlayer;
    

    @SuppressWarnings("static-access")
    public TicTacToe(JFrame gameSelectionFrame) {
        
        buttons = new JButton[ROWS][COLS];
        values = new int[ROWS][COLS];
        currentPlayer = 1;

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 500);
        setLayout(new GridLayout(ROWS, COLS, GAP, GAP));
        setLocationRelativeTo(null);

        JLabel rulesLabel = new JLabel("Rules");
        rulesLabel.setFont(new Font("Serif", Font.PLAIN, 14));
 
        JPanel rulesPanel = new JPanel(new BorderLayout());
        rulesPanel.add(rulesLabel, BorderLayout.CENTER);
        rulesLabel.setForeground(Color.BLACK);
 
        JOptionPane.showMessageDialog(rulesPanel, "<html>Grab a friend and PLAY!<br><br>X: Player 1 O: Player 2</html>", getTitle(), JOptionPane.PLAIN_MESSAGE, new ImageIcon("Tic-tac-toe.png"));

     
        BackgroundPanel backgroundPanel = new BackgroundPanel("background_tictactoe.jpg");
        backgroundPanel.setLayout(new GridLayout(ROWS, COLS, GAP, GAP));
        setContentPane(backgroundPanel);

        JPanel gridPanel = new JPanel(new GridLayout(ROWS, COLS, GAP, GAP));
        gridPanel.setOpaque(false); 

        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                buttons[i][j] = new JButton();
                buttons[i][j].setPreferredSize(new Dimension(SIZE, SIZE));
                buttons[i][j].setFont(new Font("Arial", Font.BOLD, 30));
                buttons[i][j].addActionListener(this);
                add(buttons[i][j]);
            }
        }
        this.gameSelectionFrame = gameSelectionFrame;
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        int row = getRow(button);
        int col = getCol(button);

        if (values[row][col] == 0) {
            values[row][col] = currentPlayer;
            button.setText(currentPlayer == 1 ? "X" : "O");
        }

        if (checkWin(values, currentPlayer)) {
            JOptionPane.showMessageDialog(this, "Player " + currentPlayer + " wins!", "Game Over", JOptionPane.INFORMATION_MESSAGE);
            
            this.dispose();
            gameSelectionFrame.setVisible(true);
        } else if (isFull(values)) {
            JOptionPane.showMessageDialog(this, "It's a draw!", "Game Over", JOptionPane.INFORMATION_MESSAGE);
            
            this.dispose();
            gameSelectionFrame.setVisible(true);
        }
        else {
            currentPlayer = currentPlayer == 1 ? 2 : 1;
        }
    }

    private int getRow(JButton button) {
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                if (buttons[i][j] == button) {
                    return i;
                }
            }
        }
        return -1;
    }

    private int getCol(JButton button) {
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                if (buttons[i][j] == button) {
                    return j;
                }
            }
        }
        return -1;
    }

    private boolean checkWin(int[][] values, int player) {
        for (int i = 0; i < ROWS; i++) {
            if (values[i][0] == player && values[i][1] == player && values[i][2] == player) {
                return true;
            }
        }

        for (int j = 0; j < COLS; j++) {
            if (values[0][j] == player && values[1][j] == player && values[2][j] == player) {
                return true;
            }
        }

        if (values[0][0] == player && values[1][1] == player && values[2][2] == player) {
            return true;
        }

        if (values[0][2] == player && values[1][1] == player && values[2][0] == player) {
            return true;
        }

        return false;
    }

    private boolean isFull(int[][] values) {
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                if (values[i][j] == 0) {
                    return false;
                }
            }
        }
        return true;
    }

    /*private void resetGame() {
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                values[i][j] = 0;
                buttons[i][j].setText("");
            }
        }
        currentPlayer = 1;
    }*/

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new TicTacToe(gameSelectionFrame).setVisible(true));
    }
}
Editor is loading...
Leave a Comment