2013-09-23 2 views
-3

Я работаю над проектом игры с змеей. У меня есть три Java-файлы с именами:когда я нажимаю JButton, я хочу, чтобы эта игра начиналась

  • 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(); 
+1

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

+0

Показать код. – rebeliagamer

+1

@ ankush-pruthi, пожалуйста, используйте кнопку редактирования, добавьте код 'Engine' и напишите подробнее о вашей проблеме - что вы ожидаете? что вы пытаетесь? и т. д. – rebeliagamer

ответ

1

Добавить ActionListener к кнопке «Play», который вызывает соответствующий метод запуска.

+0

Я уже добавил ActionListener, чтобы играть в кнопку. Проблема в том, что когда я нажимаю кнопку воспроизведения, игровая панель появляется, но змея не двигается, т. Е. Змея неподвижна. –

0

Я не знаю, если я правильно понял ваш вопрос: ваш Snake.java - это графический интерфейс? Если это так, то сделать объект вашего GUI «Змеи», когда вы нажмёте на кнопку воспроизведения:

JButton play = new JButton("play"); 

play.addActionListener(new ActionListener() { 

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

Надежда, что помогает.

+0

@ Андрю Томпсон нет на java –

+0

@ Андрю Томпсон: конечно Ты прав. Это был исходный код Android. Я редактировал код. – tharos

+0

@tharos ohh, и теперь я добавляю некоторые вещи в него –

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.

Смежные вопросы