保存球员姓名&得分为文本文件并删除最低分

时间:2011-11-25 07:12:50

标签: csv xna streamwriter

我想在我的游戏中添加一个保存功能,程序将得分和玩家名称保存到外部来源,如文本文件。

我已经有这样的文本文件了,它已经包含了一些虚拟数据:

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'。

...我仍然无法弄清楚逻辑(及其代码)如何检查最低分,删除它,然后保存新数据......

1 个答案:

答案 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