所以我目前正在玩一个类似 RPG 的游戏,使用文本,经过一次攻击和反击后,会出现一个对话框,问你是否要离开,但问题是,"is"和No”两者都会导致它离开循环,通过点击“No”,如果你的 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);
问题出在这几行:
-
DialogResult dialogResult;
-
if (playerHP > 0)
{
dialogResult = MessageBox.Show("Do you want to leave?", "Message box", MessageBoxButtons.YesNo);
}
-
} while (DialogResult == DialogResult.No && enemyHP > 0);
正如@JayV 提到的,第三行有一个错字,应该是:
} 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;
}
我是一名优秀的程序员,十分优秀!