2011-03-23 69 views
1

我是一名自学成才的程序员,所以我不知道正确的做事方式。我制作了诸如小行星和蛇之类的简单游戏,但在这些游戏中,您可以轻松修改键事件功能中的变量。这里是我在我的简单的小行星游戏做到了:我应该如何编程高级java游戏中的鼠标/键输入?

/* 
* key listener events 
*/ 
public void keyReleased(KeyEvent k){ 
    int keyCode = k.getKeyCode(); 

    switch(keyCode){ 

     case KeyEvent.VK_LEFT: 
      turnLeft = false; 
      break; 

     case KeyEvent.VK_RIGHT: 
      turnRight = false; 
      break; 

     case KeyEvent.VK_UP: 
      accel = false; 
      break; 

     case KeyEvent.VK_1: 
      cls = true; 
      break; 
     case KeyEvent.VK_ENTER: 
      break; 
     case KeyEvent.VK_SPACE: 
      fire = false; 
    } 
} 
public void keyTyped(KeyEvent K){} 
public void keyPressed(KeyEvent k){ 
    int keyCode = k.getKeyCode(); 

    switch(keyCode){ 

     case KeyEvent.VK_LEFT: 
      turnLeft = true; 
      break; 

     case KeyEvent.VK_RIGHT: 
      turnRight = true; 
      break; 

     case KeyEvent.VK_UP: 
      accel = true; 
      break; 

     case KeyEvent.VK_1: 
      cls = false; 
      break; 
     case KeyEvent.VK_ENTER: 
      clearAllBullets(); 
      break; 
     case KeyEvent.VK_SPACE: 
      fire = true; 
    } 
} 

如果我做了更先进的游戏(与主菜单,选项,主游戏等),我应该怎么办按键/鼠标输入?另外,如果我要进入单人游戏,我应该把所有的游戏代码放到一个类中吗?有没有办法将单人游戏的代码放入一个单独的类,并以某种方式让键输入仍然修改变量等?

谢谢你的时间!

P.S.任何链接或来源是非常赞赏。 :D

回答

0

“有没有办法将单人游戏代码放入一个单独的类,并以某种方式让键输入仍然修改变量等?”

是的,有办法封装所有基于事件的行为-http://en.wikipedia.org/wiki/Mediator_pattern但它可以使你的代码非常复杂,因此首先尝试以更“正常”的方式实现你的游戏。

反正 - 你需要其它类,出示您的游戏(播放器,游戏键盘,UserInterfaces等)的域模型

+0

我会怎么做菜单,主游戏,等。用'正常'的方式? 我现在知道如何做的唯一方法是直接在'keyPressed()'和'keyReleased()'函数内部?我不能在两个菜单上都发生同样的情况。 这样做的最好方法是什么? – 2011-03-24 01:00:45

+0

http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html – dantuch 2011-03-24 01:10:55

+0

@Steven我会开始在'ViewGameScreen'( - UI之一)内部创建'Game game',然后在'game.run ()'我会创建'Player'(以及所有其他的东西),并在'move()'方法中使用关键聆听器。接下来,我会添加**观察者**(design-appter-usefull)到'player'或'game',让te UI知道游戏中的变化,让UI展示这些变化。 – dantuch 2011-03-24 01:18:20