/
anya155
/
Bingo
Обзор
Документация
Войти
/
anya155
/
Bingo
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Data/GameRepository.cs
157 строк
5 KB
Ksenia Rozhkina
добавление комментариев
20 дек 2025, 12:10
20 дек 2025, 12:10
21fd118
Код
Авторство
О чём код?
using System.Text.Json; using LotoGame.GameLogic; using LotoGame.Models; namespace LotoGame.Data { /// <summary> /// Репозиторий для управления сохраненными играми. /// </summary> public class GameRepository { private const string SaveDirectory = "Saves"; private const string SaveExtension = ".loto"; /// <summary> /// Инициализирует новый экземпляр класса <see cref="GameRepository"/>. /// </summary> public GameRepository() { if (!Directory.Exists(SaveDirectory)) { Directory.CreateDirectory(SaveDirectory); } } /// <summary> /// Сохраняет текущую игру. /// </summary> /// <param name="game">Экземпляр игры для сохранения.</param> /// <param name="fileName">Имя файла сохранения.</param> /// <returns>True, если сохранение успешно, иначе False.</returns> public bool SaveGame(Game game, string fileName) { try { var state = game.GetGameState(); state.SaveDate = DateTime.Now; var options = new JsonSerializerOptions { WriteIndented = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; string gameText = JsonSerializer.Serialize(state, options); string filePath = Path.Combine(SaveDirectory, fileName + SaveExtension); File.WriteAllText(filePath, gameText); return true; } catch (Exception ex) { Console.WriteLine($"Ошибка при записи в файл: {ex.Message}"); return false; } } /// <summary> /// Загружает игру из файла. /// </summary> /// <param name="fileName">Имя файла сохранения.</param> /// <returns>Загруженная игра или null.</returns> public Game? LoadGame(string fileName) { try { string filePath = Path.Combine(SaveDirectory, fileName + SaveExtension); if (!File.Exists(filePath)) { Console.WriteLine($"Файл не найден: {filePath}"); return null; } string gameText = File.ReadAllText(filePath); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var state = JsonSerializer.Deserialize<GameState>(gameText, options); if (state == null || state.Players.Count == 0) { Console.WriteLine("Некорректный формат файла сохранения"); return null; } var game = new Game(state.Players, state.Settings); game.RestoreFromState(state); return game; } catch (Exception ex) { Console.WriteLine($"Ошибка при чтении из файла: {ex.Message}"); return null; } } /// <summary> /// Получает список всех сохраненных игр. /// </summary> /// <returns>Список имен сохранений.</returns> public List<string> GetSavedGames() { var saves = new List<string>(); try { if (Directory.Exists(SaveDirectory)) { var files = Directory.GetFiles(SaveDirectory, $"*{SaveExtension}"); foreach (var file in files) { var fileInfo = new FileInfo(file); var fileName = Path.GetFileNameWithoutExtension(file); var date = fileInfo.LastWriteTime; saves.Add($"{fileName} (от {date:dd.MM.yyyy HH:mm})"); } } } catch (Exception ex) { Console.WriteLine($"Ошибка при получении списка сохранений: {ex.Message}"); } return saves; } /// <summary> /// Удаляет сохраненную игру. /// </summary> /// <param name="fileName">Имя файла сохранения.</param> /// <returns>True, если удаление успешно, иначе False.</returns> public bool DeleteSave(string fileName) { try { var cleanFileName = fileName.Split('(')[0].Trim(); string filePath = Path.Combine(SaveDirectory, cleanFileName + SaveExtension); if (File.Exists(filePath)) { File.Delete(filePath); return true; } return false; } catch { return false; } } } }