如何重新启动或重置JPanel以获取GridLayout的新大小(TicTacToe游戏)

时间:2019-03-29 15:38:36

标签: java jframe jpanel

我正在为一个项目制作这个井字游戏应用程序。我整理了一些网上常见的井字游戏机制代码,但我修改/添加了一些代码,以便您可以在3x3网格,4x4网格或5x5网格之间进行选择。整个过程都在GridLayout中,它会根据用户在第一个JOptionPane中的选择来更改大小。

当出现带有“ YES”和“ NO”的JOptionPane时,我当前的问题是它的结尾。如果单击“是”,我希望代码返回到第一个JOPtionPane,在此您再次选择网格大小。

我不确定如何解决此问题。请帮忙。

还有一个代码可以检查棋盘是否已满并且没有人获胜,但这类似于playerWins if语句,因此我认为这没什么大不了。

public TicTacToe(){
      startGame();
    }

    `````````\\other methods

    public void startGame(){
      setGridSize(); \\JOptionPane where you choose between 3x3, 4x4, 5x5
      setNames(); \\set player names
      setTotalButtons();
      setLayout(new GridLayout(gridSize,gridSize));
      initializeButtons(); 
    }
    `````````
    private class buttonListener implements ActionListener{

             `````````
            if(turnCounter%2 == 0){
                buttonClicked.setText("X");
                buttonClicked.setEnabled(false);
                buttonClicked.setBackground(colorX);
            } else {
                buttonClicked.setText("O");
                buttonClicked.setEnabled(false);
                buttonClicked.setBackground(colorO);
            }

            `````````\\call methods to check for win

            if (playerWins == true){
                String winner;
                if (turnCounter%2 == 0)
                    winner = playerX;
                else
                    winner = playerO;

                int reply = JOptionPane.showConfirmDialog(null, winner + " wins! New game?", "Game Over", JOptionPane.YES_NO_OPTION);
                if (reply == JOptionPane.NO_OPTION)
                    System.exit(0);
                else
                    resetButtons();\\currently just clears board, but it still remains as a 3x3 grid (or whichever you chose)              
            }

这是主要方法。

public static void main(String[] args) {
        JFrame window = new JFrame("Tic-Tac-Toe");

        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(new TicTacToe(), BorderLayout.CENTER);

        JLabel gameInfo = new JLabel("TIC-TAC-TOE");
        gameInfo.setHorizontalAlignment(SwingConstants.CENTER);

        window.add(gameInfo, BorderLayout.NORTH);

        window.setBounds(300,200,300,300);
        window.setVisible(true);
    }
}

编辑:这是resetButtons()代码部分。

public void resetButtons(){
        for(int i = 0; i <= totalButtons; i++)
        {
            buttons[i].setText("");
            buttons[i].setEnabled(true);
            buttons[i].setBackground(backgroundColor);
            buttons[i].setOpaque(false);
            buttons[i].setContentAreaFilled(true);
        }
    }

0 个答案:

没有答案