You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Do While循环中“No”选项无法正常工作的技术问询

问题分析与修复方案

首先,你的文本RPG游戏里循环退出的问题核心是循环条件判断错误,还有几处代码细节漏洞,我来逐一拆解并修复:

1. 循环条件的致命错误

你写的循环条件是:

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

这里犯了一个基础错误:DialogResult是枚举的类型名,不是你定义的变量dialogResult!用类型名和枚举值做比较永远不会成立,这就导致不管玩家选Yes还是No,循环都会直接退出。

2. 其他代码细节问题

除了循环条件,还有几处会影响逻辑或导致编译失败的问题:

  • 多处字符串未闭合:比如MessageBox.Show("You see another enemy...);少了结尾的双引号,MessageBox.Show("His current HP is " + enemyHP + ");和MessageBox.Show("You dealt 5 damage to it.);也存在同样问题。
  • 敌人攻击逻辑无花括号:if (enemyHP > 0) MessageBox.Show("He also dealt 5 damage to you.); playerHP -= 5; 这里playerHP -=5会无条件执行,哪怕敌人已经被打死,必须用花括号把这两行包起来,确保逻辑正确。
  • 敌人被击败时的赋值不合理:你给dialogResult赋值为(0),等价于DialogResult.None,这里直接赋值为DialogResult.Yes更合理,因为敌人死了之后循环应该直接结束。

修复后的完整代码

DialogResult dialogResult;
// 把Random实例移到循环外,避免重复创建导致随机数重复
Random rand = new Random();
do
{
    count++;
    if (enemyHP > 0)
    {
        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 = DialogResult.Yes;
    }
    else if (playerHP > 0)
    {
        dialogResult = MessageBox.Show("Do you want to leave?", "Message box", MessageBoxButtons.YesNo);
    }
    else
    {
        // 补充玩家战败的逻辑,避免分支遗漏
        MessageBox.Show("You have been defeated!");
        dialogResult = DialogResult.Yes;
    }
// 修复:使用变量dialogResult判断,同时增加玩家HP的判断,确保只有双方都存活且玩家选No时才继续循环
} while (dialogResult == DialogResult.No && enemyHP > 0 && playerHP > 0);

额外优化小建议

  • 可以在每次攻击后添加玩家当前HP的提示,让玩家更清楚自身状态;
  • 把敌人HP、玩家HP这类数值定义为常量或可配置的变量,后续调整数值会更方便。

内容的提问来源于stack exchange,提问作者Kris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:27:28