缩小守则

时间:2011-12-01 17:45:28

标签: java arrays oop

我有一些用于我的游戏NPC移动arround的java代码。

这些显然属于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();
}

方法route2,route3,...,route5看起来几乎相同,唯一改变的是数组的值与不同的猎人对应。

此代码可能会“缩小”吗?我很确定我的讲师会很乐意为这样一个混乱且非常反OO的代码减去我的印记。

此外,我的所有碰撞/得分代码看起来都是这样的,它适用于个人猎人:

if(hunters[i].x==0 && hunters[i].y == 0){
    hunters[i].x = 11;
    hunters[i].y = 11;
    Player.score = Player.score + 1;
}

1 个答案:

答案 0 :(得分:3)

您的问题与OOP设计无关。这只是学习使用可用工具来编写冗余度更低,管理更简单的代码。如果你在更新中使用for循环并传递每个猎人,那么这就变得更加浓缩了。

我会注意到有一些不相关的OOP问题,你可以很好地纠正。

  • Hunter的成员如X和Y不应公开曝光,利用getter / setters
  • 对于玩家的得分成员/字段

    也是如此
    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++; 
         }
      }