«Игнорирование» объекта без его полного удаления - PullRequest
0 голосов
/ 23 мая 2018

Я делаю простую игру в стиле Space Invaders, в которой игрок может перемещать корабль и стрелять по врагам.У врагов нет оружия, но у игрока есть одно оружие с каждой стороны корабля.Если корабль уничтожен, оружие, которое уничтожило его, получает (1 + (7-N)) очков, если предыдущий корабль был уничтожен на N ходов назад тем же оружием.Для справки, это код, который я использовал для реализации этой системы очков:

public void destroy()
   {
       if (moveNum != 0)
       {
           if (moveNum <= 8)
           {
               points += 1 + (8 - moveNum);
               moveNum = 0;
           }
           else
           {
               ++points;
               moveNum = 0;
           }
       }
       else
       {
           ++points;
       }
       moveNum++;
   }

Когда игрок стреляет, у меня есть операторы if, которые проверяют, были ли поражены враги и были ли они или нет.уничтожены.Операторы if вложены так, что программа проверяет, поражает ли пистолет 1 или 2 кого-либо из трех врагов.Опять же, для справки, это основной формат оператора if:

if (playerPos + 1 == enemy2.position())
    {
        power = player.power(2);
        enemy2.gotHit(power);

        if (enemy2.health() <= 0)
        {
            player.destroy(2);
        }
    }

. В этом случае программа проверяет, находится ли gun2 в том же положении, что и враг2, и в этом случае поражен противник.и урон принимается равным мощности оружия.Если враг уничтожен (жизнь == 0), очки начисляются этому оружию, как описано выше.

Теперь операторы if вложены так, что (например) он проверяет, попал ли пистолет 1 в противника 1,затем в этом операторе if он проверяет, попал ли пистолет 2 враг 2 или враг 3.

Проверки повторяются в разных сериях: (gun1-враг1, gun2-враг2 / 3), (gun2-враг1, пистолет1-враг2 / 3) и т. д.

Проблема в том, что даже если враг был уничтожен, следующее выражение if проверяет его снова, и поскольку жизнь все еще равна нулю, он добавляет больше очков.

Итак, мой вопрос: если враг уничтожен, как мне игнорировать врага для следующего набора операторов if?Я прочитал, что могу присвоить значение null, но я не могу этого сделать, не зная, какой враг будет уничтожен (чего, конечно, я не знаю).

PS Извините, если это слишком долго,Я попытался сделать это как можно короче: P

...