Код патронов в игре сводит меня с ума - PullRequest
0 голосов
/ 19 февраля 2019

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

if (bulletsLeft <= 1) 
{
    if (extraBullets > 0)
    {
        if (extraBullets <= 12)
            bulletsLeft += extraBullets;

        extraBullets -= extraBullets;
    }

    if (extraBullets >= 12)
    {
        bulletsLeft += 12;
        extraBullets -= 12;
    }
}

1 Ответ

0 голосов
/ 19 февраля 2019

Так как вы забыли скобки, ваш код ...

if (extraBullets <= 12)
    bulletsLeft += extraBullets;
    extraBullets -= extraBullets;

... эквивалентен

if (extraBullets <= 12) {
    bulletsLeft += extraBullets;
}
extraBullets -= extraBullets; // No more bullets after this!

Следующее утверждение ...

if (extraBullets >= 12)

... никогда не будет выполнено.


Я предлагаю упростить логику и сначала определить, сколько пуль нужно перенести из колоды запаса.Затем выполните передачу.

if (bulletsLeft <= 1) {
    int transferBullets = extraBullets < 12 ? extraBullets : 12;
    bulletsLeft += transferBullets;
    extraBullets -= transferBullets;
}

Назначение с троичным выражением ...

int transferBullets = extraBullets < 12 ? extraBullets : 12;

... эквивалентно

int transferBullets;
if (extraBullets < 12) {
    transferBullets = extraBullets;
} else {
    transferBullets = 12;
}

Согласно @Кайл и @UnholySheep, вы также можете написать это вместо:

int transferBullets = Math.Min(12, extraBullets);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...