需要使用Java中的swing实现猜词游戏的协助吗? [英] need assitance for implementing word guessing game using swing in Java?

查看:72
本文介绍了需要使用Java中的swing实现猜词游戏的协助吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆