Пример #1
0
        public void MovePacman(Grid gr, KeyEventArgs e, object _game)
        {
            Game game = (Game)_game;

            switch (e.Key)
            {
            case Key.Up:
                ImgPacman.RenderTransform = new RotateTransform(90);
                if (ImgPacman.Margin.Top - 10 >= 0)
                {
                    int x1 = (int)(ImgPacman.Margin.Left / 30);
                    int y  = (int)((ImgPacman.Margin.Top - 10) / 30);
                    int x2 = (int)((ImgPacman.Margin.Left + 25) / 30);

                    if ((game.map[y, x1] == '0' || game.map[y, x1] == '2' || game.map[y, x1] == '3') && (game.map[y, x2] == '0' || game.map[y, x2] == '2' || game.map[y, x2] == '3'))
                    {
                        if ((game.map[y + 1, x1] == '0' || game.map[y + 1, x1] == '3') && game.coins[y + 1, x1].Visibility == Visibility.Visible)
                        {
                            if (game.map[y + 1, x1] == '3' || game.map[y + 1, x2] == '3')
                            {
                                game.GhostsIsSleep = true;
                            }
                            game.coins[y + 1, x1].Visibility = Visibility.Hidden;
                            game.count_coins--;
                            game._Score.Content = String.Format("Score: {0}", (game.count_coins_all - game.count_coins) * 10);
                            game.IsWin();
                        }
                        ImgPacman.Margin = new Thickness(ImgPacman.Margin.Left, ImgPacman.Margin.Top - 10, ImgPacman.Margin.Right, ImgPacman.Margin.Bottom + 10);
                    }
                }
                break;

            case Key.Down:
                ImgPacman.RenderTransform = new RotateTransform(-90);
                if (ImgPacman.Margin.Bottom - 10 >= 0)
                {
                    int x1 = (int)(ImgPacman.Margin.Left / 30);
                    int y  = (int)((ImgPacman.Margin.Top + 30) / 30);
                    int x2 = (int)((ImgPacman.Margin.Left + 25) / 30);

                    if ((game.map[y, x1] == '0' || game.map[y, x1] == '2' || game.map[y, x1] == '3') && (game.map[y, x2] == '0' || game.map[y, x2] == '2' || game.map[y, x2] == '3'))
                    {
                        if ((game.map[y - 1, x1] == '0' || game.map[y - 1, x1] == '3') && game.coins[y - 1, x1].Visibility == Visibility.Visible)
                        {
                            if (game.map[y - 1, x1] == '3' || game.map[y - 1, x2] == '3')
                            {
                                game.GhostsIsSleep = true;
                            }
                            game.coins[y - 1, x1].Visibility = Visibility.Hidden;
                            game.count_coins--;
                            game._Score.Content = String.Format("Score: {0}", (game.count_coins_all - game.count_coins) * 10);
                            game.IsWin();
                        }
                        ImgPacman.Margin = new Thickness(ImgPacman.Margin.Left, ImgPacman.Margin.Top + 10, ImgPacman.Margin.Right, ImgPacman.Margin.Bottom - 10);
                    }
                }
                break;

            case Key.Right:
                ImgPacman.RenderTransform = new RotateTransform(180);
                if (ImgPacman.Margin.Right - 10 >= 0)
                {
                    int x  = (int)((ImgPacman.Margin.Left + 30) / 30);
                    int y1 = (int)(ImgPacman.Margin.Top / 30);
                    int y2 = (int)((ImgPacman.Margin.Top + 25) / 30);

                    if ((game.map[y1, x] == '0' || game.map[y1, x] == '2' || game.map[y1, x] == '3') && (game.map[y2, x] == '0' || game.map[y2, x] == '2' || game.map[y2, x] == '3'))
                    {
                        if ((game.map[y1, x - 1] == '0' || game.map[y1, x - 1] == '3') && game.coins[y1, x - 1].Visibility == Visibility.Visible)
                        {
                            if (game.map[y1, x - 1] == '3' || game.map[y2, x - 1] == '3')
                            {
                                game.GhostsIsSleep = true;
                            }
                            game.coins[y1, x - 1].Visibility = Visibility.Hidden;
                            game.count_coins--;
                            game._Score.Content = String.Format("Score: {0}", (game.count_coins_all - game.count_coins) * 10);
                            game.IsWin();
                        }
                        ImgPacman.Margin = new Thickness(ImgPacman.Margin.Left + 10, ImgPacman.Margin.Top, ImgPacman.Margin.Right - 10, ImgPacman.Margin.Bottom);
                    }
                }
                break;

            case Key.Left:
                ImgPacman.RenderTransform = new RotateTransform(0);
                if (ImgPacman.Margin.Left - 10 >= 0)
                {
                    int x  = (int)((ImgPacman.Margin.Left - 10) / 30);
                    int y1 = (int)(ImgPacman.Margin.Top / 30);
                    int y2 = (int)((ImgPacman.Margin.Top + 25) / 30);

                    if ((game.map[y1, x] == '0' || game.map[y1, x] == '2' || game.map[y1, x] == '3') && (game.map[y2, x] == '0' || game.map[y2, x] == '2' || game.map[y2, x] == '3'))
                    {
                        if ((game.map[y1, x + 1] == '0' || game.map[y1, x + 1] == '3') && game.coins[y1, x + 1].Visibility == Visibility.Visible)
                        {
                            if (game.map[y1, x + 1] == '3' || game.map[y2, x + 1] == '3')
                            {
                                game.GhostsIsSleep = true;
                            }
                            game.coins[y1, x + 1].Visibility = Visibility.Hidden;
                            game.count_coins--;
                            game._Score.Content = String.Format("Score: {0}", (game.count_coins_all - game.count_coins) * 10);
                            game.IsWin();
                        }
                        ImgPacman.Margin = new Thickness(ImgPacman.Margin.Left - 10, ImgPacman.Margin.Top, ImgPacman.Margin.Right + 10, ImgPacman.Margin.Bottom);
                    }
                }
                break;
            }
        }
Пример #2
0
        private void GhostMove(Image Ghost, object _game, object _pmc)
        {
            Game        game = (Game)_game;
            PacmanClass pmc  = (PacmanClass)_pmc;

            Thread.Sleep(8);
            Random rnd = new Random();

            switch (rnd.Next(1, 5))
            {
            case 1:
                Ghost.Dispatcher.BeginInvoke((Action)(() =>
                {
                    if (Ghost.Margin.Top - 10 >= 0)
                    {
                        int x1 = (int)(Ghost.Margin.Left / 30);
                        int y = (int)((Ghost.Margin.Top - 10) / 30);
                        int x2 = (int)((Ghost.Margin.Left + 29) / 30);

                        if ((game.map[y, x1] == '0' || game.map[y, x1] == '2' || game.map[y, x1] == '3') && (game.map[y, x2] == '0' || game.map[y, x2] == '2' || game.map[y, x2] == '3'))
                        {
                            if (Ghost.Margin.Top + 10 <= (630 - pmc.ImgPacman.Margin.Bottom) && Ghost.Margin.Top >= pmc.ImgPacman.Margin.Top && (x1 == (int)(pmc.ImgPacman.Margin.Left / 30) || x2 == (int)((pmc.ImgPacman.Margin.Left + 25) / 30)))
                            {
                                game.is_lose = true;
                                game.IsWin();
                                return;
                            }

                            Ghost.Margin = new Thickness(Ghost.Margin.Left, Ghost.Margin.Top - 10, Ghost.Margin.Right, Ghost.Margin.Bottom + 10);
                        }
                    }
                }));
                break;

            case 2:
                Ghost.Dispatcher.BeginInvoke((Action)(() =>
                {
                    if (Ghost.Margin.Bottom - 10 >= 0)
                    {
                        int x1 = (int)(Ghost.Margin.Left / 30);
                        int y = (int)((Ghost.Margin.Top + 30) / 30);
                        int x2 = (int)((Ghost.Margin.Left + 29) / 30);

                        if ((game.map[y, x1] == '0' || game.map[y, x1] == '2' || game.map[y, x1] == '3') && (game.map[y, x2] == '0' || game.map[y, x2] == '2' || game.map[y, x2] == '3'))
                        {
                            if (Ghost.Margin.Bottom + 10 <= (630 - pmc.ImgPacman.Margin.Top) && Ghost.Margin.Bottom >= pmc.ImgPacman.Margin.Bottom && (x1 == (int)(pmc.ImgPacman.Margin.Left / 30) || x2 == (int)((pmc.ImgPacman.Margin.Left + 29) / 30)))
                            {
                                game.is_lose = true;
                                game.IsWin();
                                return;
                            }

                            Ghost.Margin = new Thickness(Ghost.Margin.Left, Ghost.Margin.Top + 10, Ghost.Margin.Right, Ghost.Margin.Bottom - 10);
                        }
                    }
                }));
                break;

            case 3:
                Ghost.Dispatcher.BeginInvoke((Action)(() =>
                {
                    if (Ghost.Margin.Right - 10 >= 0)
                    {
                        int x = (int)((Ghost.Margin.Left + 30) / 30);
                        int y1 = (int)(Ghost.Margin.Top / 30);
                        int y2 = (int)((Ghost.Margin.Top + 29) / 30);

                        if ((game.map[y1, x] == '0' || game.map[y1, x] == '2' || game.map[y1, x] == '3') && (game.map[y2, x] == '0' || game.map[y2, x] == '2' || game.map[y2, x] == '3'))
                        {
                            if (Ghost.Margin.Right + 10 <= (630 - pmc.ImgPacman.Margin.Left) && Ghost.Margin.Right >= pmc.ImgPacman.Margin.Right && (y1 == (int)(pmc.ImgPacman.Margin.Top / 30) || y2 == (int)((pmc.ImgPacman.Margin.Top + 25) / 30)))
                            {
                                game.is_lose = true;
                                game.IsWin();
                                return;
                            }

                            Ghost.Margin = new Thickness(Ghost.Margin.Left + 10, Ghost.Margin.Top, Ghost.Margin.Right - 10, Ghost.Margin.Bottom);
                        }
                    }
                }));
                break;

            case 4:
                Ghost.Dispatcher.BeginInvoke((Action)(() =>
                {
                    if (Ghost.Margin.Left - 10 >= 0)
                    {
                        int x = (int)((Ghost.Margin.Left - 10) / 30);
                        int y1 = (int)(Ghost.Margin.Top / 30);
                        int y2 = (int)((Ghost.Margin.Top + 29) / 30);

                        if ((game.map[y1, x] == '0' || game.map[y1, x] == '2' || game.map[y1, x] == '3') && (game.map[y2, x] == '0' || game.map[y2, x] == '2' || game.map[y2, x] == '3'))
                        {
                            if (Ghost.Margin.Left + 10 <= (630 - pmc.ImgPacman.Margin.Right) && Ghost.Margin.Left >= pmc.ImgPacman.Margin.Left && (y1 == (int)(pmc.ImgPacman.Margin.Top / 30) || y2 == (int)((pmc.ImgPacman.Margin.Top + 25) / 30)))
                            {
                                game.is_lose = true;
                                game.IsWin();
                                return;
                            }

                            Ghost.Margin = new Thickness(Ghost.Margin.Left - 10, Ghost.Margin.Top, Ghost.Margin.Right + 10, Ghost.Margin.Bottom);
                        }
                    }
                }));
                break;
            }
        }