Java TictoE GUI应用程序重置按钮

Java TictoE GUI应用程序重置按钮,java,arrays,swing,jframe,Java,Arrays,Swing,Jframe,我的TictaToe游戏即将结束,但我不知道如何让我的重置按钮重新开始游戏。我也希望当有人赢了或者打成平局时,游戏会重新设置。任何帮助都将不胜感激 这是我的代码(很抱歉,代码太多了): package-tictactoe; 导入javax.swing.JFrame; 导入java.awt.*; 导入java.awt.event.*; 导入javax.swing.*; 导入javax.swing.border.LineBorder; 公共类Tictatcoe { 公共静态void main(字符串

我的TictaToe游戏即将结束,但我不知道如何让我的重置按钮重新开始游戏。我也希望当有人赢了或者打成平局时,游戏会重新设置。任何帮助都将不胜感激

这是我的代码(很抱歉,代码太多了):

package-tictactoe;
导入javax.swing.JFrame;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.border.LineBorder;
公共类Tictatcoe
{
公共静态void main(字符串[]args)
{
JFrame ticTacToe=新的TicTacToeFrame();
提克塔托。设定标题(“幻影提克塔托游戏!”);
Tictatcoe.设置尺寸(600600);
ticTacToe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ticTacToe.setLocationRelativeTo(空);
ticTacToe.setVisible(真);
}
}
类TicTacToeFrame扩展JFrame实现ActionListener
{
私有字符whoseTurn='X';
私有布尔gameOver=false;
专用小区[][]小区=新小区[3][3];
JLabel jlblStatus=新JLabel(“轮到X玩”);
公共TicTacToeFrame()
{
JButton btn=新JButton(“重置”);
JPanel面板=新JPanel(新网格布局(3,3,0,0));
对于(int i=0;i<3;i++)
对于(int j=0;j<3;j++)
panel.add(单元格[i][j]=新单元格());
添加(btn,BorderLayout.SOUTH);
添加(面板、边框布局、中心);
添加(jlblStatus,BorderLayout.NORTH);
jlbstatus.setOpaque(true);
jlblStatus.setBackground(颜色:黄色);
}
公共布尔值isFull()
{
对于(int i=0;i<3;i++)
对于(int j=0;j<3;j++)
if(单元格[i][j].getToken()='')
返回false;
返回true;
}
公共布尔isWon(字符标记)
{
对于(int i=0;i<3;i++)
if((单元格[i][0].getToken()==标记)
&&(单元格[i][1]。getToken()==标记)
&&(单元格[i][2].getToken()==令牌)
{
返回true;
}
对于(int j=0;j<3;j++)
if((单元格[0][j].getToken()==标记)
&&(单元格[1][j].getToken()==标记)
&&(单元格[2][j].getToken()==标记)
{
返回true;
}
if((单元格[0][0].getToken()==标记)
&&(单元格[1][1]。getToken()==标记)
&&(单元格[2][2]。getToken()==标记))
{
返回true;
}
if((单元格[0][2].getToken()==标记)
&&(单元格[1][1]。getToken()==标记)
&&(单元格[2][0]。getToken()==标记))
{
返回true;
}
返回false;
}
@凌驾
已执行的公共无效操作(操作事件e)
{
JButton bttn=(JButton)e.getSource();
如果(bttn==btn)
{
}
}
公共类单元扩展了JPanel
{
私有字符令牌=“”;
公共单元格()
{
设置顺序(新的线边框(颜色为黑色,1));
addMouseListener(新的MyMouseListener());
}
公共字符getToken()
{
返回令牌;
}
公共void setToken(字符c)
{
令牌=c;
重新油漆();
}
@凌驾
受保护组件(图形g)
{
超级组件(g);
如果(标记='X')
{
g、 抽绳(10,10,getWidth()-10,getHeight()-10);
g、 抽绳(getWidth()-10,10,10,getHeight()-10);
}
else if(标记='O')
{
g、 drawOval(10,10,getWidth()-20,getHeight()-20);
}
}
私有类MyMouseListener扩展了MouseAdapter
{
@凌驾
公共无效mouseClicked(MouseEvent e)
{
如果(游戏结束)
返回;
如果(令牌=''&&whoseTurn!='')
设置令牌(whoseTurn);
如果(isWon(whoseTurn))
{
jlbstatus.setText(whoseTurn+“赢了!游戏结束!”);
whoseTurn='';
gameOver=true;
}
else if(isFull())
{
setText(“平局!游戏结束!”);
whoseTurn='';
gameOver=true;
}
其他的
{
whoseTurn=(whoseTurn='X')?'O':'X';
jlbstatus.setText(whoseTurn+“轮到你了”);
}
}
} 
} 
} 

您需要重置程序的状态,包括重新创建或重置部分用户界面(需要更改带有九个单元格的标签和面板)

需要关注的问题:

  • TicTacToeFrame
    有一个
    actionPerformed
    方法,实现了
    ActionListener
    界面,但复位按钮还没有action listener
  • 对于重置:例如,您可以将
    whoseTurn
    gameOver
    字段设置为其初始值,在
    jlbstatus
    标签中设置文本,然后
    • 选项1:从
      面板中删除所有单元格
      并添加新单元格(就像您在构造函数中已经做的那样-这可能是
      初始化单元格
      方法)或
    • 选项2(如果您喜欢回收):将一个
      重置
      方法添加到清除
      标记
      字段的
      单元格
      类中,对所有单元格调用此重置方法,并告诉
      面板
      重新绘制)
要记住的小事情:

  • 如果要在构造函数之外使用
    面板
    按钮
    组件,请将它们更改为字段(而不是局部变量)
  • 执行
    操作中的if语句
    
    package tictactoe;
    import javax.swing.JFrame;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.LineBorder;
     public class TicTacToe 
     {
    
    
        public static void main(String[] args) 
        {
           JFrame ticTacToe = new TicTacToeFrame();
            ticTacToe.setTitle("Phantom TicTacToe Game!");
            ticTacToe.setSize(600, 600);
            ticTacToe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            ticTacToe.setLocationRelativeTo(null);
            ticTacToe.setVisible(true);  
        }
    
    }
     class TicTacToeFrame extends JFrame implements ActionListener 
    {
    
       private char whoseTurn = 'X';
       private boolean gameOver = false;
    
    
       private Cell[][] cells = new Cell[3][3];
    
    
       JLabel jlblStatus = new JLabel("X's turn to play");
    
    
       public TicTacToeFrame()
       {
           JButton btn = new JButton("Reset");
           JPanel panel = new JPanel(new GridLayout(3, 3, 0, 0));
           for (int i = 0; i < 3; i++)
               for (int j = 0; j < 3; j++)
                   panel.add(cells[i][j] = new Cell());
    
    
           add(btn, BorderLayout.SOUTH);
           add(panel, BorderLayout.CENTER);
           add(jlblStatus, BorderLayout.NORTH);
           jlblStatus.setOpaque(true);
           jlblStatus.setBackground(Color.YELLOW);
       }
    
    
        public boolean isFull()
        {
           for (int i = 0; i < 3; i++)
               for (int j = 0; j < 3; j++)
                   if (cells[i][j].getToken() == ' ')
                       return false;
           return true;
        }
    
    
       public boolean isWon(char token)
       {
    
           for (int i = 0; i < 3; i++)
               if ((cells[i][0].getToken() == token)
                       && (cells[i][1].getToken() == token)
                       && (cells[i][2].getToken() == token)) 
               {
                   return true;
               }
    
    
           for (int j = 0; j < 3; j++)
               if ((cells[0][j].getToken() == token)
                   && (cells[1][j].getToken() == token)
                   && (cells[2][j].getToken() == token))
               {
                   return true;
               }
    
           if ((cells[0][0].getToken() == token)
                   && (cells[1][1].getToken() == token)
                   && (cells[2][2].getToken() == token))
               {
                   return true;
               }
    
           if ((cells[0][2].getToken() == token)
                   && (cells[1][1].getToken() == token)
                   && (cells[2][0].getToken() == token))
               {
                   return true;
               }
    
           return false;
       }
    
        @Override
        public void actionPerformed(ActionEvent e) 
        {
            JButton bttn = (JButton) e.getSource();
            if(bttn == btn)
            {
    
            }
        }
    
    
        public class Cell extends JPanel
        {
    
           private char token = ' ';
    
    
           public Cell()
           {
               setBorder(new LineBorder(Color.black, 1));
               addMouseListener(new MyMouseListener());
           }
    
    
           public char getToken()
           {
               return token;
           }
    
    
           public void setToken(char c)
           {
               token = c;
               repaint();
           }
    
           @Override
           protected void paintComponent(Graphics g)
           {
               super.paintComponent(g);
    
               if (token == 'X')
               {
                   g.drawLine(10, 10, getWidth() - 10, getHeight() - 10);
                   g.drawLine(getWidth() - 10, 10, 10, getHeight() - 10);
               }
    
               else if (token == 'O')
               {
                   g.drawOval(10, 10, getWidth() - 20, getHeight() - 20);
               }
           }
    
           private class MyMouseListener extends MouseAdapter
           {
               @Override
               public void mouseClicked(MouseEvent e)
               {
                   if (gameOver)
                       return;
    
    
                   if (token == ' ' && whoseTurn != ' ')
                       setToken(whoseTurn);
    
    
                   if (isWon(whoseTurn))
                   {
                       jlblStatus.setText(whoseTurn + " won! Game over!");
                       whoseTurn = ' ';
                       gameOver = true;
                   }
                   else if (isFull())
                   {
                       jlblStatus.setText("Tie game! Game over!");
                       whoseTurn = ' ';
                       gameOver = true;
                   }
                   else
                   {
                       whoseTurn = (whoseTurn == 'X') ? 'O' : 'X';
                       jlblStatus.setText(whoseTurn + "'s turn.");
                   }
               }
    
           } 
        } 
    } 
    
        JFrame ticTacToe = new TicTacToeFrame();
        ticTacToe.setTitle("Phantom TicTacToe Game!");
        ticTacToe.setSize(600, 600);
        ticTacToe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ticTacToe.setLocationRelativeTo(null);
        ticTacToe.setVisible(true);