public void TestCascadeFlaggedCells() { int rows = 5; int cols = 5; var mines = new List<Point> { new Point(cols - 1, rows - 1) }; IPointGenerator generator = new DeterminatePointGenerator(mines); IGameSettings settings = new GameSettings(rows, cols, mines.Count, generator); IMineSearchGame game = new MineSearchGame(settings); var flaggedPoint = new Point(1, 0); game.FlagCell(flaggedPoint); var revealedPoint = new Point(0, 0); game.RevealCell(revealedPoint); game.CascadeCell(revealedPoint); var revealedCells = game.Cells.Where(cell => cell.Revealed).Select(cell => cell.Coordinates).ToList(); Assert.IsFalse(revealedCells.Contains(flaggedPoint)); }
public void TestSimple() { int rows = 5; int cols = 5; var mines = new List<Point> { new Point(0, 0) }; IPointGenerator generator = new DeterminatePointGenerator(mines); IGameSettings settings = new GameSettings(rows, cols, mines.Count, generator); IMineSearchGame game = new MineSearchGame(settings); var point = new Point(cols - 1, rows - 1); game.RevealCell(point); game.CascadeCell(point); var revealedCells = game.Cells.Count(c => c.Revealed); Assert.AreEqual(game.Cells.Size - 1, revealedCells); }
public void TestCascade() { var mine = new List<Point> { new Point(0, 2), new Point(3, 2), new Point(4, 2), new Point(0, 3), new Point(4, 4) }; var pointGenerator = new DeterminatePointGenerator(mine); IGameSettings gameSettings = new GameSettings(5, 5, 5, pointGenerator); IMineSearchGame game = new MineSearchGame(gameSettings); var point = new Point(0, 0); game.RevealCell(point); game.CascadeCell(point); var revealedSafeCells = game.Cells.Where(cell => cell is SafeCell && cell.Revealed); Assert.AreEqual(10, revealedSafeCells.Count()); }
/// <summary> /// Initializes a new instance of the <see cref="MineCell"/> class. /// </summary> /// <param name="coordinates">Cell coordinates.</param> public MineCell(Point coordinates) : base(coordinates) { }
/// <summary> /// Initializes a new instance of the <see cref="SafeCell"/> class. /// </summary> /// <param name="coordinates">Cell coordinates.</param> public SafeCell(Point coordinates) : base(coordinates) { }
/// <summary> /// Performs a cascading reveal. /// </summary> /// <param name="point">Coordinates of cell to reveal.</param> public void CascadeCell(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null) { var adjacentMineCount = Cells.GetAdjacentCells(cell).Count(c => c is MineCell); if (adjacentMineCount == 0) { var adjacent = Cells.GetAdjacentCells(cell).Where(c => !c.Revealed && !c.Flagged).Select( c => c.Coordinates); foreach (var adjacentPoint in adjacent) { RevealCell(adjacentPoint); CascadeCell(adjacentPoint); } } } }
/// <summary> /// Flags a cell. /// </summary> /// <param name="point">Coordinates of cell to flag.</param> /// <returns>True if the cell has been flagged, false otherwise.</returns> public bool FlagCell(Point point) { var cell = Cells[point.X, point.Y]; if (GameOver || cell == null) { return false; } if (!cell.Revealed && !cell.Flagged) { cell.Flagged = true; RemainingMineCount--; return true; } return false; }
/// <summary> /// Removes the questionable state from a cell. /// </summary> /// <param name="point">Coordinates of cell to remove questionable state from.</param> public void RemoveQuestionable(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null) { cell.Questionable = false; } }
/// <summary> /// Reveals a cell. /// </summary> /// <param name="point">Coordinates of cell to reveal.</param> public void RevealCell(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null && !cell.Revealed && !cell.Flagged) { cell.Revealed = true; // Is it a Mine cell? if (cell is MineCell) { if (!GameOver) { var mineCell = cell as MineCell; mineCell.ExplosionSource = true; GameOver = true; } } // Otherwise must be a Safe cell else { _remainingCellsToReveal--; if (GameWon) { GameOver = true; } } } }
/// <summary> /// Removes a flag from a cell. /// </summary> /// <param name="point">Coordinates of cell to remove flag from.</param> public void RemoveFlag(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null && cell.Flagged) { RemainingMineCount++; cell.Flagged = false; } }
/// <summary> /// Marks a cell as questionable. /// </summary> /// <param name="point">Coordinates of cell to mark as questionable.</param> public void MarkCellQuestionable(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null) { cell.Questionable = true; } }
/// <summary> /// Removes the questionable state from a cell. /// </summary> /// <param name="point">Coordinates of cell to remove questionable state from.</param> /// <returns>True if the cell has been unmarked questionable, false otherwise.</returns> public bool RemoveQuestionable(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null && cell.Questionable) { cell.Questionable = false; return true; } return false; }
/// <summary> /// Marks a cell as questionable. /// </summary> /// <param name="point">Coordinates of cell to mark as questionable.</param> /// <returns>True if the cell has been marked questionable, false otherwise.</returns> public bool MarkCellQuestionable(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null && !cell.Revealed && !cell.Questionable) { cell.Questionable = true; return true; } return false; }
/// <summary> /// Removes a flag from a cell. /// </summary> /// <param name="point">Coordinates of cell to remove flag from.</param> /// <returns>True if the cell has been unflagged, false otherwise.</returns> public bool RemoveFlag(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null && cell.Flagged) { RemainingMineCount++; cell.Flagged = false; return true; } return false; }
/// <summary> /// Flags a cell. /// </summary> /// <param name="point">Coordinates of cell to flag.</param> /// <returns>True if the cell has been flagged, false otherwise.</returns> public bool FlagCell(Point point) { var cell = Cells[point.X, point.Y]; if (cell != null && !cell.Revealed && !cell.Flagged) { // Be sure to unmark it as questionable. // This cell may have been in that state and then // automatically flagged at the end of the game. cell.Questionable = false; cell.Flagged = true; RemainingMineCount--; return true; } return false; }
protected BaseCell(Point coordinates) { _coordinates = coordinates; }