Java TictoE GUI应用程序重置按钮
我的TictaToe游戏即将结束,但我不知道如何让我的重置按钮重新开始游戏。我也希望当有人赢了或者打成平局时,游戏会重新设置。任何帮助都将不胜感激 这是我的代码(很抱歉,代码太多了):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(字符串
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
界面,但复位按钮还没有action listener李>ActionListener
- 对于重置:例如,您可以将
和whoseTurn
字段设置为其初始值,在gameOver
标签中设置文本,然后jlbstatus
- 选项1:从
并添加新单元格(就像您在构造函数中已经做的那样-这可能是面板中删除所有单元格
方法)或初始化单元格
- 选项2(如果您喜欢回收):将一个
方法添加到清除重置
字段的标记
类中,对所有单元格调用此重置方法,并告诉单元格
重新绘制)面板
- 选项1:从
- 如果要在构造函数之外使用
和面板
组件,请将它们更改为字段(而不是局部变量)李>按钮
- 执行
操作中的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);