gpt4 book ai didi

java - TicTacToe GUI 应用程序重置按钮

转载 作者:太空宇宙 更新时间:2023-11-04 13:10:39 25 4
gpt4 key购买 nike

我的井字棋游戏即将完成,但我不知道如何让我的重置按钮重新开始游戏。我还希望当有人获胜或平局时游戏会重置。任何帮助将不胜感激。

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

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.");
}
}

}
}
}

最佳答案

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

需要注意的问题:

  • TicTacToeFrame 有一个 actionPerformed 方法并实现 ActionListener 接口(interface),但重置按钮还没有 Action 监听器;
  • 对于重置:例如,您可以将 whoseTurngameOver 字段设置为其初始值,在 jlblStatus 标签中设置文本,然后
    • 选项 1:从面板中删除所有单元格并添加新单元格(就像您在构造函数中所做的那样 - 这可能是 initializeCells 方法)或
    • 选项 2(如果您更喜欢回收):向 Cell 类添加一个 reset 方法,用于清除 token 字段,为所有单元格调用此重置方法,并告诉 panel 重新绘制)。

需要记住的小事情:

  • 如果您想在构造函数之外使用panelbutton组件,请将它们更改为字段(而不是局部变量);
  • actionPerformed 方法中的 if 语句使用 == 运算符而不是 equals 方法 - 您确定吗? (提示:参见What is the difference between == vs equals() in Java?)。

关于java - TicTacToe GUI 应用程序重置按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33990277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com