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
相关产品推荐
相关产品推荐

