private static List <MazeSquare> Move(DeadEndChecker target, ref MazeSquare sq, WallPosition direction, int expectedDeadSquaresCount) { sq = sq.NeighborSquare(direction); List <MazeSquare> deadSquares = target.Visit(sq); Assert.AreEqual(expectedDeadSquaresCount, deadSquares.Count, "Number of dead squares doesn't match."); return(deadSquares); }
/// <summary> /// Travel from one visited square to a neighbor square (through an open wall). /// Wrapper. Calls the implementing method StepI(). /// Subclasses may do additional bookkeeping. /// </summary> /// <param name="sq1">first (previously visited) square</param> /// <param name="sq2">next (neighbor) square</param> /// <param name="forward">true if the neighbor square was not visited previously</param> public virtual void Step(out MazeSquare sq1, out MazeSquare sq2, out bool forward) { StepI(out sq1, out sq2, out forward); #region Apply the dead end checker. if (deadEndChecker != null && mazeDrawer != null) { List <MazeSquare> deadSquares = deadEndChecker.Visit(sq2); foreach (MazeSquare deadSq in deadSquares) { mazeDrawer.DrawDeadSquare(deadSq); } } #endregion }