我想在我的游戏中添加一个保存功能,程序将得分和玩家名称保存到外部来源,如文本文件。
我已经有这样的文本文件了,它已经包含了一些虚拟数据:
AOLAS, 3500
SITI, 3600
JAMILAH, 2200
SURATNA, 3400
TATANG, 2000
我想要做的是,保存播放器名称的程序&得分到文本文件。但在写入新数据之前,它会检查文本文件,每行一行以获取其中得分最低的数据行并将其删除。之后,新数据将保存到文本文件中。
我试过这样的事情:
public void saveHighScores()
{
string line;
StreamWriter sw = new StreamWriter("highscore.txt");
while ((line = sw.WriteLine()) != null)
{
string[] parts = line.Split(',');
hiScoreName = parts[0].Trim();
QuizScreen.score = Int32.Parse(parts[1].Trim());
}
sw.Close();
}
实际上我刚刚从之前撤消了我的阅读高分数据功能,因为我觉得它会像那样工作。但事实并非如此。
它收到错误:
无法在WriteLine()中隐式地将类型'void'转换为'string'。
...我仍然无法弄清楚逻辑(及其代码)如何检查最低分,删除它,然后保存新数据......
答案 0 :(得分:1)
我想我知道你在做什么,你是否正在尝试以同样的方式编写文件,这是你需要的吗?
public void saveHighScores(string hiScoreName, int score)
{
string line;
StreamWriter sw = new StreamWriter("highscore.txt");
line = hiScoreName + ", " + score.ToString();
sw.WriteLine(line);
sw.Close();
}
如果您需要记录多个高分,您还可以使用数组或列表
编辑:
我认为你需要理解从文件写入和阅读背后的逻辑。
当您阅读文件时,此行:
while((line = sr.ReadLine()) != null) {
检查下一行是否为空,或者我们是否已到达文件末尾。 当您写入文件时,您可以跳过此部分,因为大多数情况下,当您到达文件末尾时,您不想停止。另外,sw.WriteLine()写入文件但没有返回值,这会导致错误。
在上面的代码中,行:
line = hiScoreName + ", " + score.ToString();
sw.WriteLine(line);
意思是:
line = hiScoreName followed by a comma followed by the score = "name, score"
write that line to the file