我在c#console中使用基于文本的RPG有一个小问题。
我已经制作了一个保存方法,但是当我想加载它时会给我一个错误..
这是我的加载代码:
(字符串不会出错,但问题从Level到Agility开始)
代码:
public static void LoadData ()
{
// create reader & open file
TextReader tr = new StreamReader("SavedGame.txt");
// read lines of text
string xCoordString = tr.ReadLine();
string yCoordInt= tr.ReadLine();
//Convert the strings to int
Name = Convert.ToString(xCoordString);
PlayerType = Convert.ToString (xCoordString);
Level = Convert.ToString(xCoordString);
HP = Convert.ToInt32(yCoordInt);
Strenght = Convert.ToInt32(yCoordInt);
Intelligence = Convert.ToInt32(yCoordInt);
Agility = Convert.ToInt32(yCoordInt);
// close the stream
tr.Close();
}
答案 0 :(得分:0)
无论您的变量被读入什么内容都无法转换为int。您可能必须删除换行符/回车符,或者只是简单的数据不是数字。在尝试转换之前,您应该对其进行测试和/或消毒。
答案 1 :(得分:0)
我不知道你在做什么
string xCoordString = tr.ReadLine();
//Convert the strings to int
Name = Convert.ToString(xCoordString);
为什么你将字符串转换为字符串???
所以你读了字符串,那么你应该拆分它
string[] s = xCoordString .Split(' ');
然后
var firstVariable=s[0];
var secondVariable=s[1];
等等。这应该对你有帮助 C# Splitting Strings?
还有一个:使用
int.Parse(string value)
希望我的回答能帮到你。祝你好运!
答案 2 :(得分:0)
您可能希望使用TryParse(String, Int32)
检查解析是否成功,并执行某些操作(如设置默认值或通知用户)是否成功。
您可以清理输入字符串,然后解析它:
private static int ParseNumber(string input)
{
string cleanedInput = input.Where(c => char.IsDigit(c)).ToString();
int result;
if (!Int32.TryParse(cleanedInput, out result))
{
Console.WriteLine("An error occured..");
}
return result;
}
并使用Agility = ParseNumber(input)
。
答案 3 :(得分:0)
您没有正确解析保存文件。如果这是您的保存文件的格式:
Stefano
Knight
1
100
3
3
3
然后你需要迭代地读取每一行并将读入的值解析为变量,如下:
string line = string.Empty;
//Convert the strings to int
line = tr.ReadLine();
Name = line;
line = tr.ReadLine();
PlayerType = line;
line = tr.ReadLine();
Level = Convert.ToInt32(line);
line = tr.ReadLine();
HP = Convert.ToInt32(line);
line = tr.ReadLine();
Strenght = Convert.ToInt32(line);
line = tr.ReadLine();
Intelligence = Convert.ToInt32(line);
line = tr.ReadLine();
Agility = Convert.ToInt32(line);
当然,有更好的方法来管理您的保存文件数据,但这应该会告诉您解析不起作用的原因。
答案 4 :(得分:0)
你可以循环遍历这样的行,但是你需要确定它是哪个属性并相应地对待它。
TextReader tr = new StreamReader("SavedGame.txt");
string charInfo;
while ((charInfo = tr.ReadLine()) != null)
{
//parse the line and put into appropriate variable.
}