需要使用Java中的swing实现猜词游戏的协助吗? [英] need assitance for implementing word guessing game using swing in Java?
问题描述
我有一些使用Swing的猜词游戏的工作代码.当前,在游戏结束后,我需要重新运行main
应用程序,才能开始其他游戏.我想为
I have some working code for word guessing game using Swing. Currently, after the game finishes, I need to rerun the main
app, for starting another game. I would like to give an option for
New Game
YES NO
我已经使用模型/控制器模式实现了. 我在这里粘贴我的mainapp和hangmanPane.但是它有其他我不包括的类文件.
I have implemented using model/controller pattern. I am pasting here my mainapp and hangmanPane. but it has other class files which I am not including.
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
实际上帮助实现了大部分代码.
P.S: StackOverflow User MadProgrammer
actually helped in implementing most of this code.
推荐答案
在HangManPane
类中,您可以提供playAgain
方法,例如...
In the HangManPane
class, you could to provide a playAgain
method, for example...
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
实现中,您只需调用此方法即可,例如...
In the HangManListener
implementation, you would simply then call this method, for example...
@Override
public void wonGame(HangManModelEvent evt) {
playAgain("You won");
}
@Override
public void lostGame(HangManModelEvent evt) {
playAgain("You lost");
}
这篇关于需要使用Java中的swing实现猜词游戏的协助吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!