#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. кстати, как насчет сравнения результатов? таким образом, он отображает самый высокий в верхней части …?