public void AllCellsVisitedByPacManAreNotFilledWithDots()
        {
            var grid = new Grid(4, 8);
            var originPosition = new Position(0, 0);
            var positionNextToActual = new Position(1, 0);

            grid.PlacePacManAt(originPosition);
            grid.MovePacManTo(positionNextToActual);
            Assert.NotEqual(Grid.FilledCell, grid.At(originPosition));
        }
 public bool Equals(Position other)
 {
     return X == other.X && Y == other.Y;
 }
 public static Position GetUp(Position position)
 {
     return new Position(position.X, position.Y - 1);
 }
 public static Position GetRight(Position position)
 {
     return new Position(position.X + 1, position.Y);
 }
 public static Position GetLeft(Position position)
 {
     return new Position(position.X - 1, position.Y);
 }
 private bool IsValidMove(Position position)
 {
     if (!_isPacManAtGrid) return false;
     if (_wallsPositions.Contains(position)) return false;
     return position.X >= 0
         && position.X < _width
         && position.Y >= 0
         && position.Y < _height;
 }
 public void PlaceWall(Position wallPosition)
 {
     _wallsPositions.Add(wallPosition);
 }
        public void PacManCantMoveIfItDoesNotExist()
        {
            var grid = new Grid(4, 8);
            var somePosition = new Position(2, 1);

            Assert.Throws<InvalidMoveException>(() => grid.MovePacManTo(somePosition));
        }
 public void MovePacManTo(Position position)
 {
     if (!IsValidMove(position))
     {
         throw new InvalidMoveException();
     }
     _pacManPosition = position;
     _visitedCells.Add(position);
 }
 public string At(Position position)
 {
     if (position.Equals(_pacManPosition)) return PacMan;
     if (_visitedCells.Contains(position))
         return EmptyCell;
     return FilledCell;
 }
 public static Position GetDown(Position position)
 {
     return new Position(position.X, position.Y + 1);
 }
 private static void AssertFilledWithDots(Grid grid, int width, int height)
 {
     for (var x = 0; x < width; x++)
     {
         for (var y = 0; y < height; y++)
         {
             var position = new Position(x, y);
             Assert.Equal(Grid.FilledCell, grid.At(position));
         }
     }
 }
        public void WithPacmansHeadYouDontBreakThrough()
        {
            var grid = new Grid(4, 8);
            var originPosition = new Position(0, 0);
            var positionNextToActual = new Position(-1, 0);

            grid.PlacePacManAt(originPosition);
            Assert.Throws<InvalidMoveException>(() => grid.MovePacManTo(positionNextToActual));
        }
        public void PacmanMovesAfterTick(Game.Direction direction, int nextX, int nextY)
        {
            var grid = new Grid(4, 8);
            var originPosition = new Position(0, 0);
            var positionNextToActual = new Position(nextX, nextY);

            grid.PlacePacManAt(originPosition);
            var game = new Game(grid);
            game.PacmanDirection = direction;
            game.Tick();
            Assert.Equal(Grid.PacMan, grid.At(positionNextToActual));
        }
        public void PacManCantMoveToWall()
        {
            var grid = new Grid(4, 8);
            var positionWall = new Position(2, 0);
            grid.PlaceWall(positionWall);
            var originPosition = new Position(0, 0);
            var positionNextToActual = new Position(2, 0);

            grid.PlacePacManAt(originPosition);
            Assert.Throws<InvalidMoveException>(() => grid.MovePacManTo(positionNextToActual));
        }
 public void PlacePacManAt(Position position)
 {
     _isPacManAtGrid = true;
     MovePacManTo(position);
 }
        public void CellNearPacmanIsFilledWithDot()
        {
            var grid = new Grid(4, 8);
            var originPosition = new Position(0, 0);
            var positionNextToActual = new Position(1, 0);

            grid.PlacePacManAt(originPosition);
            Assert.Equal(Grid.FilledCell, grid.At(positionNextToActual));
        }
 public void CellWithPacmanIsNotFilledWithDot()
 {
     var grid = new Grid(4, 8);
     var originPosition = new Position(0, 0);
     grid.PlacePacManAt(originPosition);
     Assert.NotEqual(Grid.FilledCell, grid.At(originPosition));
 }