C#从文本文件加载数据

时间:2013-04-26 19:44:52

标签: c#

所以我在用户输入'Load'时尝试从文本文件中加载一些数据。我有点工作,但它似乎有一个错误。

假设你买了一把斧头,这是70个硬币。你从100个硬币开始,所以剩下30个硬币。您决定保存并退出游戏。你回来加载你保存的游戏,你有49个硬币和48个健康点。

当您使用所有默认值直接保存时,它也会完全相同。我不知道从哪里得到49和48的值。

const string f = "savedgame.txt";

        using (StreamReader r = new StreamReader(f))
        {

            string line;
            while ((line = r.ReadLine()) != null)
            {
                player.gold = line[0];
                player.health = line[1];
                Console.WriteLine("Your game has been loaded.");
                menu.start(menu, shop, player, fishing, woodcut, mine, monster, quests, save, load);
            }
        }

这是我刚刚保存的文本文件。

100
20
1
0
0
5

我在Google上尝试了一些例子,但他们做了同样的事情。所以我做了一些研究,自己做了一个......做了同样的事情。

我不知道我能告诉你们多少,但如果需要,我可以展示更多。

我做错了吗?

2 个答案:

答案 0 :(得分:7)

您当前的方法存在两个问题 -

首先,您的逻辑目前正在处理第一行的字符 -

第一次通过循环时,行为"100",因此line[0]1。这是char '1',而不是值1,因此player.gold = line[0]转换为将player.gold设置为字符'1'的数字等效,即49。< / p>

其次,你开始循环并逐行阅读,然后做你的工作,而不是一次读取所有的行。

您可以通过一次读取所有行并逐行工作来解决这些问题。然后你还需要将整行转换为数字,而不是读取一个字符:

const string f = "savedgame.txt";

var lines = File.ReadAllLines(f);
player.gold = Convert.ToInt32(lines[0]);
player.health = Convert.ToInt32(lines[1]);

答案 1 :(得分:0)

r是一个字符串,而不是一个行数组。你试图将黄金设置为第一行的第一个字符,将健康设置为第二个字符等等。