2011-12-01 60 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