2013-05-17 176 views
2

首先爲問題標題道歉我不確定這是什麼名稱。爲正確的對象創建對象

無論如何,我正在一個遊戲,在那裏可以有多個玩家誰可以每個都有一些寵物。我已經開發了遊戲的主要結構,例如玩家類,寵物類和主類。從那裏我一直在研究圖形用戶界面,在那裏我問了多少玩家,以及每個玩家會喜歡多少寵物。我陷入困境的是如何創建寵物爲每個球員。

我創建了詢問玩家選擇的寵物類型一個非常基本的形式,給它一個名稱,然後創建寵物..

public void createPets(final Player player){ 

//various buttons,comboBox and labels go here 
//layout managers 
//add it all to a frame 

JButton jbCreatePet = new JButton("Create Pet"); 

jbCreatePet.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     String name = jtfName.toString(); 

     if (cbSpecies.getSelectedIndex() == 0){ 
      Alien alien = new Alien(); 
      alien.setName(name); 
      player.getAllPets.add(alien); 


     } 
     else if(cbSpecies.getSelectedIndex() == 1){ 
      create other pet2 
     } 
     else{ 
      create other pet3 
     } 
    } 
}); 

player is a Player object passed into the method using a for loop.. 

for (Player player: allPlayers){ 
    createPets(player); 
} 

現在我知道它的不正確使用for循環例如形式將簡單地跳到最後的球員,沒有其他球員將獲得創造的寵物..

所以,我有幾個問題:

  1. 當我分配創建寵物的所有寵物的玩家名單,日食告訴我,我不得不最終創建它。我有點理解爲什麼,但我想知道的是通過使玩家參數最終這意味着我不會爲其他遊戲創造寵物,只有第一個玩家..

  2. 如何顯示我的表單給每個玩家例如玩家2選擇一隻寵物並給它一個名字然後創建它,然後他會被告知他需要創建另一隻寵物(再次顯示錶單),因此他創建了另一隻寵物,然後它的玩家2s轉而選擇,創建2個寵物......我想我試圖找出如何正確的播放器參數傳遞到createPet方法在正確的時間...

請讓我知道如果你會像我一樣澄清其他任何東西...

非常感謝誰能幫助我這個!

回答

4

當我將創建的寵物分配給所有寵物的玩家列表時,eclipse告訴我必須創建它。我有點明白爲什麼,但我想知道是通過使玩家最終的參數,這意味着我將無法創建等劇,只有第一個玩家的寵物..

Eclipse是不需要這一點 - Java是因爲你在匿名內部類中使用Player參數,所以它必須是最終的。這並不妨礙你使用同樣的方法爲其他玩家。

我該如何向每位玩家展示我的表格玩家2選擇一隻寵物並給它一個名字然後創建它,然後他會被告知他需要創建另一隻寵物(再次顯示錶單),因此他創建了另一隻寵物,然後它的玩家2s轉到選擇和創建2寵物...我想我想弄清楚如何在正確的時間將正確的播放器參數傳遞到createPet方法...

主Game對象將控制所有以上,對嗎?我想你可以使用for循環,在循環內部顯示一個模式對話框,例如JOptionPane。

另一種選擇是創建允許所有玩家進入寵物的JPanel視圖。這完全取決於你,我建議你嘗試不同的方法。

您需要確保儘早完成的一件主要事情是強烈地將您的程序邏輯從GUI中分離出來。例如,你的Player和Pet類應該沒有關於GUI的知識,應該沒有任何Swing代碼,以便在邏輯上添加Pets的代碼是非GUI(但可以並且將被GUI使用)。


編輯
考慮給你的遊戲類registerPlayer(Player player)editPlayer(Player player)方法是任何玩家都可以打電話登記他們的名字,他們的寵物,並且可能需要玩遊戲的其他財產。然後在按下JButton時調用這個方法一次。除非所有玩家都已正確註冊,否則不要讓遊戲進行。

+0

好的謝謝你清除第一部分。是的,原來我使用JOptionPane,但認爲它會更友好的使用框架,這可能是如此,但它可能不那麼容易.. – whiteElephant

+0

@whiteElephant:更多添加。如需更多幫助,請告訴/顯示更多。 –

+0

@whiteElephant編輯添加。 –