【问题标题】:saving player name & score to text file and delete the lowest score将玩家姓名和分数保存到文本文件并删除最低分数
【发布时间】:2011-11-25 07:12:49
【问题描述】:

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

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

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

...我仍然想不出逻辑(和代码)如何检查最低分数,删除它,然后保存新数据...

【问题讨论】:

  • 该代码无法编译(我重新格式化帖子以便更明显)

标签: csv xna streamwriter


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 2015-03-25
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多