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

C#实现随机选择TTRPG角色属性并按等级增加值的方法

TTRPG随机角色生成器:随机属性加值解决方案

我正在为我的TTRPG制作随机角色生成代码,需要从6个属性(PHY、ADR、COG、SPE、CHA、TEC)中随机选一个,给它加上和角色等级相等的数值(每级加1)。但我不知道怎么让代码随机选择一个属性变量,目前的代码如下:

using System.ComponentModel;
using System.Net.NetworkInformation;
using System.Net.Sockets;

internal class Program
{
    private static void Main(string[] args)
    {
        Console.Title = "Kahs World";
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WindowHeight = 40;
        //Above is the settings for the window pop up
        MakeCharacter();
        
        //Below says that the window won't close unless there is a button press
        Console.WriteLine("End Program?\n (Y/N)");
        Console.ReadKey();
    }   

    static void MakeCharacter()
    {
        Random numberGen = new Random();
        System.Console.WriteLine("Name your character.");
        string name = Console.ReadLine();
        int age = numberGen.Next(20, 151);
        int Level = numberGen.Next(1, 21);
        int PHY = numberGen.Next(3, 21);
        int ADR = numberGen.Next(3, 21);
        int COG = numberGen.Next(3, 21);
        int SPE = numberGen.Next(3, 21);
        int CHA = numberGen.Next(3, 21);
        int TEC = numberGen.Next(3, 21);
        Console.WriteLine(name + "\n Level " + Level+ "\n  PHY: " + PHY + " ADR: " + ADR + " COG: " + COG + " SPE: " + SPE + " CHA: " + CHA + " TEC: " + TEC);
    }
}

解决思路

单独的int变量无法直接被随机选中修改,因为它们彼此独立,没有统一的集合供程序索引。你需要把属性值存入数组或字典这类集合中,通过随机索引/键来定位并修改目标属性。

方案一:数组存储属性(简洁高效)

把属性值按顺序存入数组,随机生成索引选择要加成的属性,修改后再对应回原变量(也可直接用数组输出):

static void MakeCharacter()
{
    Random numberGen = new Random();
    Console.WriteLine("Name your character.");
    string name = Console.ReadLine();
    int age = numberGen.Next(20, 151);
    int Level = numberGen.Next(1, 21);
    
    // 按顺序存入6个属性的初始值
    int[] stats = new int[]
    {
        numberGen.Next(3, 21), // PHY
        numberGen.Next(3, 21), // ADR
        numberGen.Next(3, 21), // COG
        numberGen.Next(3, 21), // SPE
        numberGen.Next(3, 21), // CHA
        numberGen.Next(3, 21)  // TEC
    };
    
    // 随机选一个属性,加上等级值
    int randomIndex = numberGen.Next(stats.Length);
    stats[randomIndex] += Level;
    
    // 把数组值转回单独变量(可选,方便后续使用)
    int PHY = stats[0];
    int ADR = stats[1];
    int COG = stats[2];
    int SPE = stats[3];
    int CHA = stats[4];
    int TEC = stats[5];
    
    // 用字符串插值输出更简洁
    Console.WriteLine($"{name}\n Level {Level}\n  PHY: {PHY} ADR: {ADR} COG: {COG} SPE: {SPE} CHA: {CHA} TEC: {TEC}");
}

方案二:字典存储属性(直观易读)

用字典关联属性名称和对应数值,随机选择键来修改值,适合需要明确属性名的场景:

using System.Collections.Generic; // 需要添加这个命名空间

// ... 其他代码保持不变

static void MakeCharacter()
{
    Random numberGen = new Random();
    Console.WriteLine("Name your character.");
    string name = Console.ReadLine();
    int age = numberGen.Next(20, 151);
    int Level = numberGen.Next(1, 21);
    
    // 初始化属性字典,键是属性名,值是初始随机数
    Dictionary<string, int> stats = new Dictionary<string, int>()
    {
        { "PHY", numberGen.Next(3, 21) },
        { "ADR", numberGen.Next(3, 21) },
        { "COG", numberGen.Next(3, 21) },
        { "SPE", numberGen.Next(3, 21) },
        { "CHA", numberGen.Next(3, 21) },
        { "TEC", numberGen.Next(3, 21) }
    };
    
    // 把字典的键转为列表,随机选一个属性名
    List<string> statNames = stats.Keys.ToList();
    string randomStatName = statNames[numberGen.Next(statNames.Count)];
    stats[randomStatName] += Level;
    
    // 输出角色信息
    Console.WriteLine($"{name}\n Level {Level}");
    Console.WriteLine($"  PHY: {stats["PHY"]} ADR: {stats["ADR"]} COG: {stats["COG"]} SPE: {stats["SPE"]} CHA: {stats["CHA"]} TEC: {stats["TEC"]}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:14:52