当我点击JButton我希望该游戏应该开始

时间:2013-09-23 10:27:08

标签: java swing jbutton actionlistener

我正在研究一个蛇游戏项目。我有三个名为的文件:

  • Engine.java
  • GameBoard.java
  • Snake.java

我在这个项目中添加了两个JFrames。在第一帧中有三个按钮:

  • play
  • rules
  • exit

当我们点击rules按钮时,它会打开rules jframe(它正常工作)。当我们点击play按钮时,它应该运行蛇游戏。当我点击play按钮实际开始游戏时,请建议我该怎么做。

这是我在play按钮actionPerformed方法中复制的代码:

        JFrame frame = new JFrame("SnakeGame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        Canvas canvas = new Canvas();
        canvas.setBackground(Color.black);
        canvas.setPreferredSize(new Dimension(GameBoard.MAP_SIZE * GameBoard.TILE_SIZE, GameBoard.MAP_SIZE * GameBoard.TILE_SIZE));
        frame.add(canvas);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        new Engine(canvas).startGame();

3 个答案:

答案 0 :(得分:1)

在“播放”按钮中添加ActionListener,调用相应的启动方法。

答案 1 :(得分:0)

我不知道,如果我理解你的问题:你的Snake.java是一个GUI吗? 如果是这样,那么当您点击播放按钮时,将GUI的对象设为“Snake”:

JButton play = new JButton("play");

play.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e)
        {
            Snake play = new Snake();
        }
});

希望有所帮助。

答案 2 :(得分:0)

你很顽固,你可能不会显示更多代码所以我猜你有线程问题。如果startGame中的Engine持有主游戏循环,则需要将其作为线程运行,因为用户界面和逻辑需要分开。

看起来像这样:

    JFrame frame = new JFrame("SnakeGame");
    Canvas gui = new Canvas();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.getContentPane().add(gui);
    frame.setSize(GameBoard.MAP_SIZE * GameBoard.TILE_SIZE, GameBoard.MAP_SIZE * GameBoard.TILE_SIZE);
    frame.setVisible(true);
    Thread gameThread = new Thread(new Engine(gui));
    gameThread.setPriority(Thread.MIN_PRIORITY);
    gameThread.start();

在该示例中,Engine实现了Runnable。您可以在Java 2D: Hardware Accelerating - Part 2 - Buffer Strategies找到更多信息。