gpt4 book ai didi

java - 在 Java 中使用 swing 实现猜词游戏需要帮助吗?

转载 作者:行者123 更新时间:2023-12-01 18:40:30 25 4
gpt4 key购买 nike

我有一些使用 Swing 进行猜词游戏的工作代码。目前,游戏结束后,我需要重新运行 main应用程序,用于开始另一个游戏。我想提供一个选项

New Game
YES NO

我已经使用模型/ Controller 模式实现了。我在这里粘贴我的 mainapp 和hangmanPane。但它还有其他我没有包含的类文件。

public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Main();
}

public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

HangManModel model = new DefaultHangManModel("HangManGame");
HangManPane hangManPane = new HangManPane(model);

JFrame frame = new JFrame("Hang Man");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(hangManPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

});
}

}

public class HangManPane extends JPanel {

private KeyPadPane keyPadPane;
private GuessPane guessPane;
private HangManModel model;
private HangManModelHandler hangManModelHandler;

public HangManPane(HangManModel model) {

setLayout(new BorderLayout());

add(getGuessPane(), BorderLayout.CENTER);
add(getKeyPadPane(), BorderLayout.SOUTH);

setModel(model);

}

public HangManPane() {

this(null);

}

public void setModel(HangManModel value) {

getKeyPadPane().setModel(value);
getGuessPane().setModel(value);

if (model != null) {

model.removeHangManModelListener(getHangManModelListener());

}

HangManModel old = model;
model = value;
firePropertyChange("model", old, model);

if (model != null) {

model.addHangManModelListener(getHangManModelListener());

}

}

protected HangManModelListener getHangManModelListener() {

if (hangManModelHandler == null) {

hangManModelHandler = new HangManModelHandler();

}

return hangManModelHandler;

}

protected KeyPadPane getKeyPadPane() {

if (keyPadPane == null) {

keyPadPane = new KeyPadPane();

}

return keyPadPane;

}

protected GuessPane getGuessPane() {

if (guessPane == null) {

guessPane = new GuessPane();

}

return guessPane;

}

protected class HangManModelHandler implements HangManModelListener {

@Override
public void newGame(HangManModelEvent evt) {
}

@Override
public void wonGame(HangManModelEvent evt) {

JOptionPane.showMessageDialog(HangManPane.this, "You Won!", "Winner", JOptionPane.INFORMATION_MESSAGE);

}

@Override
public void lostGame(HangManModelEvent evt) {

JOptionPane.showMessageDialog(HangManPane.this, "You Lose!", "Winner", JOptionPane.INFORMATION_MESSAGE);

}

@Override
public void stateChanged(HangManModelEvent evt) {
}

}

}

P.S:StackOverflow 用户 MadProgrammer实际上帮助实现了大部分代码。

最佳答案

HangManPane 类中,您可以提供 playAgain 方法,例如...

protected void playAgain(String msg) {

int result = JOptionPane.showConfirmDialog(this,
"<html>" + msg + "<br>Do you want to play again?",
"Play Agaion",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);

switch (result) {
case JOptionPane.YES_OPTION:
setModel(new DefaultHangManModel("Your new secret word"));
break;
default:
SwingUtilities.getWindowAncestor(this).dispose();
break;
}

}

HangManListener 实现中,您只需调用此方法,例如...

    @Override
public void wonGame(HangManModelEvent evt) {

playAgain("You won");

}

@Override
public void lostGame(HangManModelEvent evt) {

playAgain("You lost");

}

关于java - 在 Java 中使用 swing 实现猜词游戏需要帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20086180/

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