Опция «Нет» не работает должным образом в цикле - PullRequest
0 голосов
/ 13 мая 2018

Так что я в настоящее время дурачусь с RPG-подобной игрой, использующей текст, после того, как один раз прошел через атаки и контратаки, появляется диалоговое окно с вопросом, хотите ли вы уйти, но проблема в том, «Да» и «Нет» приводит к тому, что он выходит из цикла, нажимая «Нет», он должен оставаться в цикле, если ваш HP и HP противника выше 0. Я думал, что он работал нормально, пока позже не добавил код в программу, но я может быть не так:

DialogResult dialogResult;

do
{
    count++;
    if (enemyHP > 0)
    {
        Random rand = new Random();
        int chance = rand.Next(1, 101);

        MessageBox.Show("You see another enemy...);
        MessageBox.Show("Its HP is 10...2/5");
        MessageBox.Show("His current HP is " + enemyHP + ");
        if (chance <= 5)
        {
            MessageBox.Show("Miss");
        }
        else
        {
            MessageBox.Show("You dealt 5 damage to it.);
            enemyHP -= 5;
        }

        if (enemyHP > 0)
            MessageBox.Show("He also dealt 5 damage to you.);
        playerHP -= 5;
    }

    if (enemyHP <= 0)
    {
        MessageBox.Show("Enemy has been defeated!");
        dialogResult = (0);
    }
    else
     if (playerHP > 0)
    {
        dialogResult = MessageBox.Show("Do you want to leave?", "Message box", MessageBoxButtons.YesNo);
    }
} while (DialogResult == DialogResult.No && enemyHP > 0); 

1 Ответ

0 голосов
/ 13 мая 2018

Проблема в следующих строках:

  1. DialogResult dialogResult;
    
  2. if (playerHP > 0)
    {
        dialogResult = MessageBox.Show("Do you want to leave?", "Message box", MessageBoxButtons.YesNo);
    }
    
  3. } while (DialogResult == DialogResult.No && enemyHP > 0); 
    

Как упоминал @JayV, в 3-й строке есть опечатка, она должна быть:

} while (dialogResult == DialogResult.No && enemyHP > 0); 

Однако может случиться, что dialogResult не будет инициализирован к тому времени, когда будет выполнено это условие, поскольку присваивание происходит внутри ветви if.
Итак, измените первую строку, указав значение по умолчанию, которое будет иметь смысл DialogResult.No:

DialogResult dialogResult = DialogResult.No;

У вас также есть небольшая проблема:

if (enemyHP > 0)
    MessageBox.Show("He also dealt 5 damage to you.);
playerHP -= 5;

Строка MessageBox.Show проходит внутри ветви if, но, поскольку вы не добавляли скобки, вы, вероятно, не понимали, что следующая строка всегда выполняется.
Вот почему:

Всегда используйте скобки!

if (enemyHP > 0)
{
    MessageBox.Show("He also dealt 5 damage to you.);
    playerHP -= 5;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...