Esempio n. 1
0
        /// <summary>
        /// press space to start or pause, Escape to switch in game over mode
        /// </summary>
        /// <param name="key"></param>
        public void KeyPressed(PacmanKey key)
        {
            // Gestion des flèches pour le déplacement du pacman

            if (key == PacmanKey.Pause)
            {
                // touche Pause ou P
                Paused = !Paused;
            }

            if (_Pacman != null)
            {
                switch (key)
                {
                case PacmanKey.Left:
                    _Pacman.Left();
                    break;

                case PacmanKey.Right:
                    _Pacman.Right();
                    break;

                case PacmanKey.Down:
                    _Pacman.Down();
                    break;

                case PacmanKey.Up:
                    _Pacman.Up();
                    break;
                }
            }

            if (key == PacmanKey.Space && GameMode.GAME_OVER == Status)
            {
                // passe en mode de jeu READY
                numLaby = 0;
                Level   = 1;
                SetLabyrinth(numLaby);
                // initialisation du score, des vies, ...
                Lives     = 3;
                LifeScore = 5000;
                Score     = 0;
                SetMode(GameMode.READY);
                if (Audio != null)
                {
                    Audio.PlayIntro();
                }
            }
            else if (key == PacmanKey.Escape)
            {
                SetMode(GameMode.GAME_OVER);
            }
            else if (key == PacmanKey.NextLevel)
            {
                Labyrinth.getCurrent().RemainingPills = 0;
            }
        }
Esempio n. 2
0
        // Le jeu est dans l'état PLAY
        private void AnimatePlay()
        {
            GameRecord record;

            while (_cfg.play.Count > 0)
            {
                record = _cfg.play[0];
                if (record.tim > oturn)
                {
                    break;
                }
                _cfg.play.RemoveAt(0);
                _cfg.playerCfg.record.Add(record);
                if (record.tim == oturn)
                {
                    if (record.isKey)
                    {
                        switch (record.key)
                        {
                        case PacmanKey.Back:
                        {
                            TXYList xyList = _Pacman.xyList;
                            if (!xyList.empty)
                            {
                                xyList.deAdd();
                            }
                        }
                        break;

                        case PacmanKey.Left:
                            _Pacman.Left();
                            break;

                        case PacmanKey.Right:
                            _Pacman.Right();
                            break;

                        case PacmanKey.Down:
                            _Pacman.Down();
                            break;

                        case PacmanKey.Up:
                            _Pacman.Up();
                            break;
                        }
                    }
                    else
                    {
                        intProcessKey(record.tsk);
                    }
                }
            }

            if (Labyrinth.getCurrent().RemainingPills <= 0)
            {
                // toutes les pastilles ont été mangées, changement de niveau
                // accélère un peu le jeu
                Level++;
                SleepTime -= 1;
                numLaby    = (numLaby + 1) % 4;
                SetLabyrinth(numLaby);
                SetMode(GameMode.READY);
            }
            else
            {
                int        i;
                int        xp, yp;
                GhostState state;

                EraseSprites();
                ErasePoints();

                // testes de collisions
                xp = _Pacman.X;
                yp = _Pacman.Y;
                // collisions avec les fantomes
                foreach (Ghost ghost in _Ghosts)
                {
                    state = ghost.State;
                    // teste si le Pacman est en collision avec le Fantome i
                    if (_Pacman.HasCollision(ghost))
                    {
                        if (state.isHunt() || state.isRandom())
                        {
                            // Perdu une vie
                            SetMode(GameMode.DEATH);
                            return;
                        }
                        else if (state.isFlee())
                        {
                            // le fantome est mangé
                            ghost.setState(GhostState.EYE);
                            AddScore(_GhostScore);
                            FantScore *= 2;
                            AddPoints(_GhostScore);
                            if (Audio != null)
                            {
                                Audio.PlayEatGhost();
                            }
                        }
                    }
                }
                // collisions avec le bonus
                if (CurrentBonus != null)
                {
                    // le bonus existe
                    if (_Pacman.HasCollision(CurrentBonus))
                    {
                        int points = Math.Min(1600, Level * 100);
                        AddScore(points);
                        AddPoints(points);
                        CurrentBonus = null;
                        if (Audio != null)
                        {
                            Audio.PlayBonus();
                        }
                    }
                    if (CurrentBonus != null && CurrentBonus.animate() <= 0)
                    {
                        // le bonus est en fin de vie
                        CurrentBonus = null;
                    }
                }
                else
                {
                    // pas de bonus
                    if (Game.GetRandom(1000) < 5)
                    {
                        CurrentBonus = new Bonus(Level - 1);
                    }
                }

                // animate pacman
                if (speedCheck(Config.SpeedPacman))
                {
                    i = _Pacman.animate();
                    if (i == 1)
                    {
                        // une pastille est mangée
                        AddScore(10);
                        Audio.PlayPill();
                    }
                    else if (i == 2)
                    {
                        FantScore = 100;
                        // Les fantomes qui chasse deviennent fuyards
                        AddScore(50);
                        Audio.PlayBigPill();
                        setGhostsState(GhostState.FLEE);
                    }
                }
                // animate fantomes
                //      bool siren = false;

                foreach (Ghost ghost in _Ghosts)
                {
                    switch (ghost.State.ToEnum())
                    {
                    case GhostStateEnum.FLEE:
                        ghost.speedDevider = Config.GhostSpeedFlee;
                        break;

                    case GhostStateEnum.EYE:
                        ghost.speedDevider = Config.GhostSpeedEye;
                        break;

                    default:
                        if (Math.Sqrt((_Pacman.xLaby - ghost.xLaby) ^ 2 + (_Pacman.yLaby - ghost.yLaby) ^ 2) < Config.SafeRadius)
                        {
                            if (ghost.State.isHunt())
                            {
                                if (GetRandom(Config.GhostSpeedSwitchTime) == 2)
                                {
                                    if (GetRandom(1) == 1)
                                    {
                                        ghost.speedDevider = Config.GhostSpeedHunt;
                                    }
                                    else
                                    {
                                        ghost.speedDevider = Config.GhostSpeedHuntPulse;
                                    }
                                }
                            }
                            else
                            {
                                ghost.speedDevider = Config.GhostSpeed;
                            }
                        }
                        else
                        {
                            ghost.speedDevider = Config.GhostSpeedOutSafe;
                        }
                        break;
                    }

                    if (!speedCheck(ghost.speedDevider))
                    {
                        ghost.timers();
                        continue;
                    }
                    ghost.setPacmanCoor(xp, yp);
                    ghost.animate();
                    //        if (!siren && ghosts[i].getState().isHunt()) {
                    //          siren = true;
                    //          Audio.playSiren();
                    //        }
                }

                // animate points
                foreach (FlyingScore pt in _FlyingScores)
                {
                    pt.animate();
                }

                DrawSprites();
                DrawPoints();
                DrawScore();
                DrawLives();
                //if (DEBUG)
                //{
                //    foreach(Ghost ghost in _Ghosts)
                //    {
                //        //draw.drawDebugString(4, 12 + i * 12, 12, ghosts[i].toString());
                //    }
                //}
            }
        }