/// <summary> /// Manages movement of PacMan. /// </summary> private static void PacManMovementManager() { int nextCoordX = pacMan.PosX; int nextCoordY = pacMan.PosY; if (Console.KeyAvailable) { ConsoleKeyInfo keyPressed = Console.ReadKey(true); while (Console.KeyAvailable) { Console.ReadKey(true); } if (keyPressed.Key == ConsoleKey.UpArrow) { nextCoordY = pacMan.PosY - 1; if (maze.IsThereTunnel(nextCoordX, nextCoordY)) { PacManVsObjectsManager(nextCoordX, nextCoordY); pacMan.Move("Up"); } } if (keyPressed.Key == ConsoleKey.LeftArrow) { nextCoordX = pacMan.PosX - 1; if (maze.IsThereTunnel(nextCoordX, nextCoordY)) { PacManVsObjectsManager(nextCoordX, nextCoordY); pacMan.Move("Left"); } } if (keyPressed.Key == ConsoleKey.DownArrow) { nextCoordY = pacMan.PosY + 1; if (maze.IsThereTunnel(nextCoordX, nextCoordY)) { PacManVsObjectsManager(nextCoordX, nextCoordY); pacMan.Move("Down"); } } if (keyPressed.Key == ConsoleKey.RightArrow) { nextCoordX = pacMan.PosX + 1; if (maze.IsThereTunnel(nextCoordX, nextCoordY)) { PacManVsObjectsManager(nextCoordX, nextCoordY); pacMan.Move("Right"); } } } }
private static void MovePacMan() { /* Метода за движение на ПакМен-а. Първо вземаме текущото му положение * След това в зависимост от натисната стрелка проверяваме в тази * посока дали има стена. Ако има - не правим нищо. Но ако няма се прави * проверка дали има А)Злато Б)Дух. Ако има злато се вдига резултата с 1 * Ако има Дух - GameOver :) * */ int pacManCoordX = pacMan.PosX; int pacManCoordY = pacMan.PosY; System.Media.SoundPlayer eat = new System.Media.SoundPlayer(musicEating); System.Media.SoundPlayer death = new System.Media.SoundPlayer(musicDeath); if (Console.KeyAvailable) { ConsoleKeyInfo keyPressed = Console.ReadKey(true); while (Console.KeyAvailable) { Console.ReadKey(true); } if (keyPressed.Key == ConsoleKey.UpArrow) { if (maze.IsThereTunnel(pacManCoordX, pacManCoordY - 1)) { for (int index = 0; index < goldTokens.Count; index++) { if (goldTokens[index].IsThereGold(pacManCoordX, pacManCoordY - 1)) { eat.Play(); score++; goldTokens[index].RemoveFromPosition(); goldTokens.RemoveAt(index); } } for (int index = 0; index < cherryTokens.Length; index++) { if (cherryTokens[index].IsThereCherry(pacManCoordX, pacManCoordY - 1)) { withCherry = true; } } foreach (var enemy in ghosts) { if (enemy.IsThereGhost(pacManCoordX, pacManCoordY - 1)) { if (lives > 0) { if (withCherry) { } else { death.Play(); lives--; Restart(); } } else { GameOverByGhost(); } } } pacMan.Move("Up"); } } if (keyPressed.Key == ConsoleKey.LeftArrow) { if (maze.IsThereTunnel(pacManCoordX - 1, pacManCoordY)) { for (int index = 0; index < goldTokens.Count; index++) { if (goldTokens[index].IsThereGold(pacManCoordX - 1, pacManCoordY)) { eat.Play(); score++; goldTokens[index].RemoveFromPosition(); goldTokens.RemoveAt(index); } } for (int index = 0; index < cherryTokens.Length; index++) { if (cherryTokens[index].IsThereCherry(pacManCoordX - 1, pacManCoordY)) { withCherry = true; } } foreach (var enemy in ghosts) { if (enemy.IsThereGhost(pacManCoordX - 1, pacManCoordY)) { if (lives > 0) { if (withCherry) { } else { death.Play(); lives--; Restart(); } } else { GameOverByGhost(); } } } pacMan.Move("Left"); } } if (keyPressed.Key == ConsoleKey.DownArrow) { if (maze.IsThereTunnel(pacManCoordX, pacManCoordY + 1)) { for (int index = 0; index < goldTokens.Count; index++) { if (goldTokens[index].IsThereGold(pacManCoordX, pacManCoordY + 1)) { eat.Play(); score++; goldTokens[index].RemoveFromPosition(); goldTokens.RemoveAt(index); } } for (int index = 0; index < cherryTokens.Length; index++) { if (cherryTokens[index].IsThereCherry(pacManCoordX, pacManCoordY + 1)) { withCherry = true; } } foreach (var enemy in ghosts) { if (enemy.IsThereGhost(pacManCoordX, pacManCoordY + 1)) { if (lives > 0) { if (withCherry) { } else { death.Play(); lives--; Restart(); } } else { GameOverByGhost(); } } } pacMan.Move("Down"); } } if (keyPressed.Key == ConsoleKey.RightArrow) { if (maze.IsThereTunnel(pacManCoordX + 1, pacManCoordY)) { for (int index = 0; index < goldTokens.Count; index++) { if (goldTokens[index].IsThereGold(pacManCoordX + 1, pacManCoordY)) { eat.Play(); score++; goldTokens[index].RemoveFromPosition(); goldTokens.RemoveAt(index); } } for (int index = 0; index < cherryTokens.Length; index++) { if (cherryTokens[index].IsThereCherry(pacManCoordX + 1, pacManCoordY)) { withCherry = true; } } foreach (var enemy in ghosts) { if (enemy.IsThereGhost(pacManCoordX + 1, pacManCoordY)) { if (lives > 0) { if (withCherry) { } else { death.Play(); lives--; Restart(); } } else { GameOverByGhost(); } } } pacMan.Move("Right"); } } } }