сохранение имени игрока и счета в текстовом файле и удаление самого низкого счета - PullRequest
0 голосов
/ 25 ноября 2011

Я хочу добавить функцию сохранения в мою игру, где программа сохраняет счет и имя игрока во внешний источник, такой как текстовый файл.

У меня уже есть такой текстовый файл, и он ужесодержат некоторые фиктивные данные:

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();
   }

на самом деле я просто отменил свою функцию чтения данных высокой оценки из-за ранее, потому чтоЯ думаю, что это будет работать так.но это не так.

получит ошибку:

не может неявно преобразовать тип 'void' в 'string' "в WriteLine ().

...и я до сих пор не могу понять логику (и ее код), как проверить наименьшую оценку, удалить ее, а затем сохранить новые данные ...

1 Ответ

1 голос
/ 25 ноября 2011

Я думаю, я вижу, что вы делаете, вы пытаетесь написать файл так же, как вы читали бы, это то, что вам нужно?

public void saveHighScores(string hiScoreName, int score)
{
    string line;
    StreamWriter sw = new StreamWriter("highscore.txt");
    line = hiScoreName + ", " + score.ToString();
    sw.WriteLine(line);

    sw.Close();
}

Вы также можете использовать массивы или списки, если вам нужно записать несколько рекордов

Edit:

Я думаю, вам нужно понять логику записи и чтения из файла.

Когда вы читаете файл, эта строка:

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
...