Я делаю простую игру в стиле 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