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