Сокращение кода - PullRequest
       1

Сокращение кода

0 голосов
/ 01 декабря 2011

У меня есть некоторый 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 Ответ

3 голосов
/ 01 декабря 2011

Ваша проблема не имеет ничего общего с дизайном ООП.Это всего лишь обучение использованию доступных инструментов для написания менее избыточного и более управляемого кода.Если вы используете цикл for в своем обновлении и пропускаете каждого отдельного охотника, тогда это становится гораздо более сжатым.

Я отмечу, что есть некоторые не связанные с ООП проблемы, которые вы бы исправили, чтобы их исправить.

  • Члены Охотника, такие как X и Y, не должны быть публично обнародованы, используются добытчики / сеттеры
  • То же самое относится к элементу / полю для счета Игрока

    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++; 
         }
      }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...