예제 #1
0
        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);
        }
예제 #2
0
        /// <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
        }