c#从文本文件加载数据

本文关键字:加载 数据 文件 文本 | 更新日期: 2023-09-27 18:11:15

所以当用户键入' load '时,我试图从文本文件加载一些数据。我已经让它工作了,但是似乎有一个bug。

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

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

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

我做错了什么吗?

c#从文本文件加载数据

你现在的方法有两个问题

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

第一次通过循环,行是"100",所以line[0]1。这是'1'char,而不是值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]);

r是字符串,而不是行数组。你试图将金币设置为第一行的第一个字符,将生命值设置为第二个字符,等等。