2011-03-23 67 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