private void Reduce() { var gridSize = Grids.GetSize(); var points = EnumerableUtil.Rectangle(gridSize); var flagPoints = points.Where(t => Grids[t.X, t.Y] == Grid.Flag).ToArray(); foreach (var flagPoint in flagPoints) { var surroundingPoints = flagPoint.Surrounding().Where(t => gridSize.Contains(t)); foreach (var surroundingPoint in surroundingPoints) { var surroundingValue = Grids[surroundingPoint.X, surroundingPoint.Y]; if (surroundingValue.IsNumber()) { var reducedValue = surroundingValue - 1; Grids[surroundingPoint.X, surroundingPoint.Y] = reducedValue; } } Grids[flagPoint.X, flagPoint.Y] = Grid.None; } var questionPoints = points.Where(t => Grids[t.X, t.Y] == Grid.Question).ToArray(); foreach (var questionPoint in questionPoints) { Grids[questionPoint.X, questionPoint.Y] = Grid.Raw; } }
public StrategyBoard(Grid[,] grids, int bombCount) { Grids = (Grid[, ])grids.Clone(); Size = Grids.GetSize(); BombCount = bombCount; Reduce(); RawCount = Count(Grid.Raw); }
private int Count(Grid grid) { var points = EnumerableUtil.Rectangle(Grids.GetSize()); return(points.Count(point => Grids[point.X, point.Y] == grid)); }