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

如何在文字战斗模拟器中正确使用Random生成指定范围随机数?

解决随机数生成异常及指定范围的问题

你的RandomIntegerGenerator类存在实现问题,导致生成了异常的大数值(甚至负数)。更可靠的方式是使用.NET内置的Random类来生成指定范围的随机数,以下是具体解决步骤:

核心修正点

  • 弃用有问题的RandomIntegerGenerator,改用.NET原生Random类
  • 全局创建一个Random实例,避免短时间重复创建导致的随机数重复
  • 使用Random.Next(min, max)方法指定范围:该方法生成大于等于min、小于max的整数,要得到1-25的随机数,需传入(1, 26)

修正后的完整代码

internal class Program
{
    // 全局Random实例,避免重复创建导致随机数重复
    private static readonly Random _random = new Random();

    static void Main(string[] args)
    {
        System.Console.WriteLine("Starting Simulator");
        Actor FoxTail = new Actor();
        FoxTail.HealthPoints = 15;
        FoxTail.Strength = 2;
        FoxTail.Defense = 12;
        FoxTail.Spirit = 12;
        FoxTail.Dexterity = 2;
        FoxTail.Agility = 3;
        FoxTail.Intelligence = 2;
        FoxTail.Level = 0;
        FoxTail.ExperiencePoints = 0;
        
        Actor GreyWolf = new Actor();
        GreyWolf.HealthPoints = 25;
        GreyWolf.Strength = 2;
        GreyWolf.Defense = 10;
        GreyWolf.Spirit = 8;
        GreyWolf.Dexterity = 5;
        GreyWolf.Agility = 7;
        GreyWolf.Intelligence = 2;
        GreyWolf.Level = 1;
        GreyWolf.ExperiencePoints = 5;

        // 生成1-25之间的攻击判定值
        int FoxTailAttack = _random.Next(1, 26);
        if(FoxTailAttack >= GreyWolf.Defense)
        {
            // 生成1-25之间的伤害值,加上力量属性
            int damage = _random.Next(1, 26) + FoxTail.Strength;
            GreyWolf.HealthPoints -= damage;
            Console.WriteLine($"Grey Wolf is at {GreyWolf.HealthPoints} health!");
        }
        else
        {
            Console.WriteLine("Foxtail missed!");
        }
        Console.WriteLine("Press any key to continue...");
        System.Console.ReadLine();
    }
}

// 补充Actor类定义(若未实现)
public class Actor
{
    public int HealthPoints { get; set; }
    public int Strength { get; set; }
    public int Defense { get; set; }
    public int Spirit { get; set; }
    public int Dexterity { get; set; }
    public int Agility { get; set; }
    public int Intelligence { get; set; }
    public int Level { get; set; }
    public int ExperiencePoints { get; set; }
}

关键说明

  • 全局Random实例:Random的默认构造依赖系统时钟,短时间多次创建会生成重复随机数,全局实例可避免此问题
  • 范围指定逻辑:Next(1,26)的第二个参数是排他上限,因此要包含25,上限需设为26
  • 替换自定义生成器:你的RandomIntegerGenerator生成异常值,说明内部逻辑存在错误,改用.NET原生类更稳定可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:25:18