C#项目中Random生成重复数字,移出循环后问题仍未解决
解决C#中Random重复生成相同数字的问题
你的问题核心不是Random实例的位置,而是你只在程序启动时生成了一次随机伤害值,后续所有战斗、所有攻击都在重复使用这两个固定值。
看你的代码:playerDamage和enemyDamage是在最外层定义的,只调用了一次random.Next(),之后不管循环多少次,这两个变量的值都不会变。哪怕Random实例在循环外面,你没重新调用Next()方法,自然不会生成新的随机数。
修正方案
如果需要每次攻击都生成随机伤害,把随机数生成的代码移到内层战斗循环里,每次攻击前重新计算:
Random random = new Random(); int playerHealth = 100; // 补充分号 int playerArmor = 60; int enemyArmor = 30; int i = 1; while (i == 1) { Console.WriteLine("Нажмите любую кнопку чтобы начать"); Console.ReadKey(); // 每次战斗重置血量 int currentPlayerHealth = playerHealth; int currentEnemyHealth = 100; // 初始化敌人血量,原代码未定义enemyHealth while (currentPlayerHealth > 0 && currentEnemyHealth > 0) { // 每次攻击都生成新的随机伤害 int playerDamage = random.Next(30, 40); int enemyDamage = random.Next(20, 60); // 计算实际伤害,补全变量声明 int playerAttackDamage = playerDamage - playerDamage * enemyArmor / 100; int enemyAttackDamage = enemyDamage - enemyDamage * playerArmor / 100; currentPlayerHealth -= enemyAttackDamage; currentEnemyHealth -= playerAttackDamage; // 输出战斗过程,方便调试 Console.WriteLine($"玩家攻击造成 {playerAttackDamage} 伤害,敌人剩余血量 {currentEnemyHealth}"); Console.WriteLine($"敌人攻击造成 {enemyAttackDamage} 伤害,玩家剩余血量 {currentPlayerHealth}"); } // 战斗结束提示结果 if (currentPlayerHealth <= 0) Console.WriteLine("你输了!"); else Console.WriteLine("你赢了!"); }
额外注意点
- 原代码里
int playerHealth = 100缺了分号,enemyHealth未初始化,playerAttackDamage和enemyAttackDamage也没声明类型,这些语法错误必须修正。 - 每次战斗开始时要重置双方血量,不然第一次战斗结束后血量已低于0,后续循环会直接跳过战斗逻辑。
内容的提问来源于stack exchange,提问作者Nikita Kalugin
相关产品推荐
相关产品推荐

