0

我正在开发一个随机生成角色的游戏,包括他们的名字。我打算将名称分成 2-4 部分(前缀、中间、后缀);每个部分都是一个简短的(1-4 个字符)字符串,将从文件中随机选择并组合以创建全名。例如,如果从文件中选择的部分是“bor”、“o”和“mir”,则角色的名称应为“Boromir”。

填充此文件的理想方法是什么(就像我说的那样,它需要包含大量 1-4 个字符串),对其进行序列化,然后根据需要随机读取这些字符串?

我真的没有很多想法可以解决。我以前从来没有做过这样的事情,但是任何提示或建议肯定会受到赞赏。谢谢。

4

2 回答 2

1

假设您将名称存储在一个文本文件中,每行一个名称子部分,您可以使用 System.IO.File 类中的方法 ReadAllLines() 将所有名称读入字符串 []

http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx

同样,您可以使用 WriteAllLines() 将 string[] 写回文件

http://msdn.microsoft.com/en-us/library/92e05ft3.aspx

将文件读入 string[] 后,可以使用 System.Random 类的 Next() 方法从数组中选择一个随机字符串

http://msdn.microsoft.com/en-us/library/9b3ta19y.aspx

使用模运算符将结果限制为 string[] 的有效索引

于 2013-06-03T15:55:05.697 回答
0

因此,我编写了一个快速示例来说明我在评论中暗示的内容。我使用了一个 Windows 窗体应用程序作为我的示例运行时。当表单加载时,它会从单个文件中读取名称部分,然后获取随机值以形成名称。

名称部分将存储在纯文本文件中,每行一个部分,如下所示:

前缀.txt

far
bar
dun
brat

您将对每个文件使用相同的格式(每行一个字)。

现在,有趣的部分:

public partial class Form1 : Form
    {
        private readonly Random _random = new Random();
        private string[] _prefixParts;
        private string[] _middleParts;
        private string[] _suffixParts;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Only read the data from each file once as this could be expensive
            _prefixParts = PopulateFromFile("prefix.txt"); // alter your path as necessary
            _middleParts = PopulateFromFile("middle.txt");
            _suffixParts = PopulateFromFile("suffix.txt");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Generate a random name
            randomNameLabel.Text = GetRandomName();
        }

        private string[] PopulateFromFile(string path)
        {
            return File.ReadAllLines(path);
        }

        private string GetRandomName()
        {
            // this will get a random name part from each of the arrays, concatenate and return the complete name
            return GetRandomNamePart(_prefixParts) + GetRandomNamePart(_middleParts) + GetRandomNamePart(_suffixParts);
        }

        private string GetRandomNamePart(string[] array)
        {
            // this will return a random value from the array
            return array[_random.Next(array.Length)];
        }
    }
于 2013-06-03T16:25:04.637 回答