Хранение лучших результатов
Хранение лучших результатов
Теперь игроку может указывать свое имя при достижении хорошего результата. Но нужно как-то сохранять это имя и достигнутый результат. Эту информацию будем хранить в той же папке, где и саму программу. Значит, наша программа должна автоматически определять свое местонахождение в файловой системе, чтобы знать, где хранить эту информацию. За это отвечает код, приведенный в листинге 11.62.
Листинг 11.62
/// <summary>
/// Папка, в которой находится программа.
/// Используется как место для хранения настроек игры.
/// </summary>
private string applicationDirectory;
// Получим имя файла программы из текущей сборки
string appFilePath =
execAssem.GetModules()[0].FullyQualifiedName;
// Выделяем из полного пути имени файла только путь к файлу
applicationDirectory =
System.IO.Path.GetDirectoryName(appFilePath);
// Обязательно должен быть разделитель в конце пути
if (!applicationDirectory.EndsWith(@"")) {
applicationDirectory += @"";
}
С помощью данного кода можно получить ссылку на первый модуль в программной сборке. Затем с помощью свойства FullyQualifiedName можно получить полный путь к файлу программы. Текущий каталог можно получить с помощью свойства GetDirectoryName. Также нам нужно быть уверенным, что путь к файлу заканчивается обратным слэшем. Небольшой код с проверкой решит эту проблему. Метод сохранения информации очень прост. Он приведен в листинге 11.63.
Листинг 11.63
/// <summary>
/// Имя файла для хранения лучших результатов.
/// </summary>
private string highScoreFile = "highscore.bin";
/// <summary>
/// Сохраняем лучший результат в файле.
/// </summary>
public void SaveHighScore() {
System.IO.TextWriter writer = null;
try {
writer = new System.IO.StreamWriter(
applicationDirectory + highScoreFile);
writer.WriteLine(highScorePlayer);
writer.WriteLine(highScoreValue);
} catch {}
finally {
if (writer != null) {
writer.Close();
}
}
}
Метод сохранения результата в файле вызывается при выходе из программы. Загрузка лучших результатов выполняется при старте программы с помощью метода LoadHighScore, код которого приведен в листинге 11.64.
Листинг 11.64
/// <summary>
/// Загружаем лучший результат из файла.
/// </summary>
public void LoadHighScore() {
System.IO.TextReader reader = null;
try {
reader = new System.IO.StreamReader(applicationDirectory + highScoreFile);
highScorePlayer = reader.ReadLine();
string highScoreString = reader.ReadLine();
highScoreValue = int.Parse(highScoreString);
} catch {}
finally {
if (reader != null) {
reader.Close();
}
}
}