2011-12-01 62 views
-1

我有一些java代碼用於我的遊戲NPC移動到周圍。縮小代碼

這些顯然是在1D陣列。

public void route11() { 
    Scanner in = new Scanner(System.in); 
    Random number = new Random(); 
    int random = number.nextInt(2); 

    if(random ==1) 
     hunters[1].x = hunters[1].x -1; 
    else 
     hunters[1].y = hunters[1].y -1; 
} 

public void Update() { 
    route11(); 
    route2(); 
    route3(); 
    route4(); 
    route5(); 
} 

方法路徑2,路徑3,...,route5看起來幾乎一樣,唯一改變的就是數組的用不同的獵人相對應的值。

該代碼是否可以「縮小」?我很確定我的講師很樂意爲這樣一個混亂而且非常反OO的代碼減去我的標記。

而且,我所有的碰撞/分的代碼看起來是這樣的,它適用於個人獵人:

+0

請共享代碼對於幾種方法 – aishwarya

+0

route2/3/4/5會發生什麼?如果每個單獨的塊做了完全不同的事情,代碼就不能被合併。 –

+0

@Marc B'唯一改變的是數組的價值,以對應不同的獵人。「我認爲這很清楚他是複製粘貼代碼,只是改變它影響的獵人。 –

回答

3

您的問題無關,與面向對象的設計。這只是爲了學習如何使用可用的工具來編寫更少冗餘且更易於管理的代碼。如果你在更新中使用for循環並傳遞每個單獨的獵人,那麼這會變得更加緊湊。

我會注意到,有一些不相關的OOP問題,你會很好地糾正。

  • 獵人的成員,如X和Y不應該公開曝光,利用getter/setter方法
  • 同樣爲玩家的得分成員/場

    public void update() 
    { 
        for(var i = 0; i < 5; i++) 
        { 
         route(hunters[i]); 
         collisionAndScoring(hunters[i]); 
        } 
    } 
    
    public void route(Hunter hunter) 
    { 
        Scanner in = new Scanner(System.in); 
        Random number = new Random(); 
        int random = number.nextInt(2); 
        if(random == 1) 
        { 
         hunters.x--; 
        } 
        else 
        { 
         hunter.y--; 
        } 
    } 
    
    public void collisionAndScoring(Hunter hunter) 
    { 
        if (hunter.x == 0 && hunter.y == 0) //You should define constants for these to give them more meaning 
        { 
         hunter.x = 11; //another opportunity for a constant 
         hunter.y = 11; //another opportunity for a constant 
         Player.score++; 
        } 
        } 
    
+0

不錯的重構!可以給他添加一些解釋嗎? – jsalonen

+1

@jsalonen剛剛做了= P我想確保我打敗任何人第一哈哈。 –

+1

@MatthewCox這就是所謂的「西方最快的槍」http://meta.stackexchange.com/a/19533/147335並被定義爲:一個問題被確定爲按照降序排列投票的副作用,其中第一次發佈答案很快就會被提高,爲坐下來的人們提供了極佳的投票機會,並以一種漫長而徹底的方式回答問題。 – corsiKa