XNA отображение данных из текстового файла в массив

#arrays #xna #streamreader #text-files

#массивы #xna #streamreader #текстовые файлы

Вопрос:

прямо сейчас я собираюсь сделать табло для своей игры. программа отобразит данные из текстового файла.

в программе у меня есть массивы строк для имени игрока и оценки.

это мой код streamreader, который выглядит следующим образом :

  public void ReadHighScores()
    {
        try
        {
            using (StreamReader sr = new StreamReader("highscore.txt"))
            {

                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    string[] parts = line.Split(',');
                    for (int i = 0; i < 5; i  )
                    {
                        highScores.PlayerName[i] = parts[0];
                        highScores.Score[i] = parts[1];
                    }
                }
            }


        }
        catch (FileNotFoundException ex)
        {
            //IntializeHighScores();
            //WriteHighScores();
        }
        catch (Exception ex)
        {
            // Handle unexpected exception
        }
        finally
        {
            // Close the file
        }
    }
  

и вот как я рисую это табло :

         for (int i = 0; i < 5; i  )
        {
            spriteBatch.DrawString(spriteFont, i   1   ". "   highScores.PlayerName[i].ToString()
             "......"   highScores.Score[i].ToString(), new Vector2(350, 150   50 * (i)), Color.Red);
         }
  

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

мой текстовый файл содержит :

  Alpha, 3500
 Beta, 3600
 Gamma, 2200
 Delta, 3400
 Epsilon, 3600
  

и программа отображает только последние данные в цикле, например :

 Epsilon 3600
Epsilon 3600
Epsilon 3600
Epsilon 3600
Epsilon 3600
  

что я должен сделать, чтобы отобразить все данные из текстового файла, а не только последний???

Ответ №1:

Вы почти правы, но для каждой строки, которую вы считываете из файла, вы присваиваете каждому элементу массива high scores одни и те же данные (в for цикле). Вам нужно выяснить, на какой строке вы находитесь (просто установите счетчик, который увеличивается при каждом цикле цикла чтения файла) и обновляйте только соответствующие PlayerName и Score .

Комментарии:

1. Нет, в while ((line = sr.ReadLine()) != null) цикле отключите цикл for и используйте переменную, чтобы отслеживать, сколько раз выполнялся цикл while. Используйте это для индексации массива вместо этого.

2. итак, мне нужно добавить цикл for над while ((строка = sr.ReadLine()) != null) …?

3. хм, я все еще не понимаю. можете ли вы привести пример кода для этого …?

4. Создайте переменную i в верхней части ReadHighScores . Уберите цикл for в ReadHighScores . В конце while ((line = sr.ReadLine()) != null) тела цикла поместите i ; .

5. о, да. это работает!!! спасибо slugonamission. кстати, как насчет сравнения результатов? таким образом, он отображает самый высокий в верхней части …?