Esempio n. 1
0
 public void SetState(string a_name, GameState a_state)
 {
     _avaliableStates[a_name] = a_state;
 }
        //**********************************************************************
        //****************************** UPDATE ********************************
        //**********************************************************************
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // Check: Is the game not running?
            if (currentState != GameState.RunningGame)
                UpdateSplashScreen();
            else
            {
                // THINGS TO DO WHILE GAME IS RUNNING
                k = Keyboard.GetState();
                dt = (float)gameTime.ElapsedGameTime.TotalSeconds;

                // Check: Exit game?
                if (k.IsKeyDown(Keys.Escape)) currentState = GameState.EndScreen;

                // Check: Is player alive?
                if (!thePlayer.IsAlive)
                {
                    finalScore = currentScore;
                    ResetGame();
                }

                // PROJECTILE CONTROLS

                // Firing missiles: delay time between fires
                if (missileCountdown > 0)
                {
                    missileCountdown -= 0.0075f * dt;
                }
                else if (k.IsKeyDown(missileButton) && missileCountdown <= 0)
                {
                    FireMissile();
                    missileCountdown = 50;
                }

                // Dropping bombs: delay time between drops
                if (bombCountdown > 0)
                {
                    bombCountdown -= 0.005f * dt;
                }
                else if (k.IsKeyDown(bombButton) && bombCountdown <= 0)
                {
                    DropBomb();
                    bombCountdown = 50;
                }
                // ----------------------------------------------------------------

                // COLLISION HANDLING
                // ----------------------------------------------------------------
                // Missile-> Enemy collision handling
                foreach (PlayerMissile m in PlayerMissiles)
                {
                    // Check if off-screen
                    if (m.posX > borderRightX) m.Die();

                    foreach (Enemy e in Enemies)
                    {
                        // Logic
                        if (m.HitsEnemy(e))
                        {
                            e.Die();
                            m.Die();
                            currentScore += e.pointValue;
                        }
                    }
                    return;
                }

                // BombExplosion-> Enemy collision handling
                foreach (BombExplosion be in BombExplosions)
                {
                    foreach (Enemy e in Enemies)
                    {
                        // Logic
                        if (be.CollideWithEnemy(e))
                        {
                            e.Die();
                            currentScore += e.pointValue * 2 / 3;
                        }
                    }
                    return;
                }

                // Enemy-> Player collision handling
                foreach (Enemy e in Enemies)
                {
                    // Check if off-screen
                    if (e.posX < borderLeftX) e.Die();

                    // Collision with player?
                    if (e.CollideWithPlayer())
                    {
                        e.Die();
                        thePlayer.Damage(20);
                        currentScore += e.pointValue / 5;
                    }
                    return;

                    // Attack logic?
                }

                // EnemyBullet-> Player collision handling
                foreach (EnemyBullet eb in EnemyBullets)
                {
                    // Check if off-screen
                    if (eb.posX < borderLeftX) eb.Die();
                    else if (eb.posX > borderRightX) eb.Die();

                    // Collision with player?
                    if (eb.HitsPlayer(thePlayer))
                    {
                        eb.Die();
                        thePlayer.Damage(10);
                    }
                    return;
                }
                // ----------------------------------------------------------------

                // Enemy generation
                // ----------------------------------------------------------------
                // ----------------------------------------------------------------
            }

            base.Update(gameTime);
        }
        private void UpdateSplashScreen()
        {
            KeyboardState keyState = Keyboard.GetState();
            if (keyState.IsKeyDown(Keys.Enter))
            {
                currentState = GameState.RunningGame;

            }
        }
        // Reset the game
        public void ResetGame()
        {
            Enemies.Clear();
            EnemyBullets.Clear();
            PlayerMissiles.Clear();
            PlayerBombs.Clear();
            BombExplosions.Clear();

            currentScore = 0;
            thePlayer.Health = 100;
            thePlayer.IsAlive = true;
            thePlayer.Position = playerstart;

            currentState = GameState.EndScreen;
        }