using System.Collections.Generic; using Minesweeper.Core; namespace Minesweeper.Presentation.ReadModels { public sealed class GameReadModel : IGameReadModel { private readonly IBoardService boardService; private readonly IGameSettingsService settingsService; private readonly IGameStateService gameStateService; public GameReadModel(IBoardService boardService, IGameSettingsService settingsService, IGameStateService gameStateService) { this.boardService = boardService; this.settingsService = settingsService; this.gameStateService = gameStateService; } public GameState State => gameStateService.Current; public int Width => boardService.Width > 0 ? boardService.Width : settingsService.SizeX; public int Height => boardService.Height > 0 ? boardService.Height : settingsService.SizeY; public int MinesCount => boardService.MinesCount > 0 ? boardService.MinesCount : settingsService.MinesCount; public int FlaggedCellsCount => CountFlaggedCells(); public int RemainingMinesCount => MinesCount - FlaggedCellsCount; public bool TryGetCell(int x, int y, out BoardCellData cell) { return boardService.TryGetCell(x, y, out cell); } public IReadOnlyList GetCells() { return boardService.GetCells(); } private int CountFlaggedCells() { var cells = boardService.GetCells(); var count = 0; for (var i = 0; i < cells.Count; i++) { if (cells[i].IsFlagged) { count++; } } return count; } } }