3

因此,当用户键入“加载”时,我试图从文本文件中加载一些数据。我有它的工作,但它似乎有一个错误。

假设你买了一把斧头,也就是 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

我试过谷歌的例子,但他们做了同样的事情。所以我做了一些研究,自己做了一个……做了同样的事情。

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

难道我做错了什么?

4

2 回答 2

7

您当前的方法有两个问题-

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

第一次通过你的循环, line is "100", so line[0]is 1。这是一个charof '1',而不是值 1,因此player.gold = line[0]转换为设置player.gold为字符“1”的等值数字,即 49。

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

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

const string f = "savedgame.txt";

var lines = File.ReadAllLines(f);
player.gold = Convert.ToInt32(lines[0]);
player.health = Convert.ToInt32(lines[1]);
于 2013-04-26T19:47:29.250 回答
0

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

于 2013-04-26T19:50:59.570 回答