// This method moves the Pacman and checks for collision with Ghosts, Bullets, Dots, Walls and updates the coresponding properties to inform // the view of the latest collision. public void MovePacman() { if (Maps[0].CollidedWithPac) { Maps[0].CollidedWithPac = false; if (!isCheating) { PacDead = true; ((Pacman)Pacman).Lives -= 1; if (((Pacman)Pacman).Lives == 0) { PacDead = true; GameState = GameState.Lost; } else { GameState = GameState.Pause; Pacman.Position.col = Pacman.StartPosition.col; Pacman.Position.row = Pacman.StartPosition.row; Pacman.Direction = Direction.Left; } } } Tile tempTile = Maps[0].Collision(Pacman.Direction, Pacman); LastCollidedWith = tempTile; switch (tempTile.Type) { case TileType.Wall: Pacman.Animate(); Pacman.Position.row = Math.Round(Pacman.Position.row); Pacman.Position.col = Math.Round(Pacman.Position.col); break; case TileType.Dot: ((Pacman)Pacman).Score += tempTile.Value; Maps[0].RemoveFromMap(tempTile); if (Maps[0].Dots.Count == 0) { GameState = GameState.Won; ((Pacman)Pacman).Score += 100; } else { Pacman.Animate(); Pacman.Move(); } break; case TileType.MakeVulnerable: ((Pacman)Pacman).Score += tempTile.Value; Maps[0].RemoveFromMap(tempTile); Maps[0].MakeGhostVulnerable(); MakeGhostsNormalTask = Task.Run(() => MakeGhostNormal()); if (Maps[0].Dots.Count == 0) { GameState = GameState.Won; ((Pacman)Pacman).Score += 100; } else { Pacman.Animate(); Pacman.Move(); } break; default: Pacman.Animate(); Pacman.Move(); break; } if ((Pacman.Position.row) % 1 < 0.2 && (Pacman.Position.col % 1) < 0.2) { Pacman.Direction = Pacman.PreviousDirection; } Tile GhostTile = Maps[0].CollisionWithGhost(); if (GhostTile != null) { if (GhostTile.Vulnerable) { AteGhost = true; ((Pacman)Pacman).Score += GhostTile.Value; GhostTile.Position.col = GhostTile.StartPosition.col; GhostTile.Position.row = GhostTile.StartPosition.row; GhostTile.Direction = Direction.Up; } else { if (!isCheating) { PacDead = true; ((Pacman)Pacman).Lives -= 1; if (((Pacman)Pacman).Lives == 0) { PacDead = true; GameState = GameState.Lost; } else { GameState = GameState.Pause; Pacman.Position.col = Pacman.StartPosition.col; Pacman.Position.row = Pacman.StartPosition.row; Pacman.Direction = Direction.Left; } } } } }