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
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 User MadProgrammer
actually helped in implementing most of this code.
In the
HangManPane
class, you could to provide aplayAgain
method, for example...In the
HangManListener
implementation, you would simply then call this method, for example...Then code it.
reset()
methods that can then be called if the user wants to run another game. You should be the one to create this code though.Not a good idea. Borrow ideas yes, but not code.