首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一系列字符串序列化到文件中,并将随机选择读回

将一系列字符串序列化到文件中,并将随机选择读回
EN

Stack Overflow用户
提问于 2013-06-03 23:39:30
回答 2查看 166关注 0票数 0

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

填充这个文件的理想方式是什么(就像我说的,它需要包含大量的1-4个字符串),序列化它,然后根据需要随机选择这些字符串?

我真的没有太多的想法可以放弃;我以前从来没有做过这样的事情,但任何提示或建议都肯定会受到感谢。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-06-03 23:55:06

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

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

类似地,您可以使用WriteAllLines()将string[]写回文件

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

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-06-04 00:25:05

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

名称parts将存储在纯文本文件中,每行包含一个part,如下所示:

prefix.txt

代码语言:javascript
复制
far
bar
dun
brat

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

现在,有趣的部分:

代码语言:javascript
复制
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)];
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16900574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档