コード例 #1
0
        protected override void Update(GameTime gameTime)
        {
            cursorPos = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);

            // Updating the game while in Start Menu
            // When game is at start menu it adds music and checks if we press
            // the buttons. If we do press the buttons it changes the game state
            // and changes other variables.
            if (gameState == GameState.StartMenu)
            {
                // Music Properties
                if (MediaPlayer.State != MediaState.Playing)
                {
                    MediaPlayer.Play(menuSong);
                    MediaPlayer.IsRepeating = true;
                    MediaPlayer.Volume      = 0.1f;
                }

                // When pressing the Play Button
                if (playButton.clicked)
                {
                    clickSound.Play();
                    levelMenu1         = true;
                    gameState          = GameState.LevelMenu;
                    playButton.clicked = false;
                }

                // When pressing the Quit Button
                if (quitButton.clicked)
                {
                    this.Exit();
                }

                // When pressing name check button
                if (checkButton.clicked)
                {
                    clickSound.Play();
                    checkedPlayerName   = playerName;
                    checkButton.clicked = false;
                }

                playButton.Update();
                quitButton.Update();
                checkButton.Update();

                // Player name input
                foreach (Keys k in Keyboard.GetState().GetPressedKeys())
                {
                    if ((k >= Keys.A && k <= Keys.Z) && Input.IsKeyReleased(k))
                    {
                        playerName += k.ToString();
                    }
                    if ((k == Keys.Enter) && Input.IsKeyReleased(k))
                    {
                        checkedPlayerName = playerName;
                    }

                    if ((k == Keys.Back) && Input.IsKeyReleased(k))
                    {
                        if (playerName.Length < 0)
                        {
                            playerName += "";
                        }
                        else
                        {
                            playerName = playerName.Remove(playerName.Length - 1);
                        }
                    }
                }
            }

            // Updating the game while in LEVEL MENU and so it means that it is testing
            // if the buttons are clicked and if so it changes the game state and the level.
            if (gameState == GameState.LevelMenu)
            {
                if (levelMenu1 == true)
                {
                    if (nivel1Button.clicked)
                    {
                        InitializeLevel(0);
                        nivel1Button.clicked = false;
                    }

                    if (nivel2Button.clicked)
                    {
                        InitializeLevel(1);
                        nivel2Button.clicked = false;
                    }

                    if (nivel3Button.clicked)
                    {
                        InitializeLevel(2);
                        nivel3Button.clicked = false;
                    }

                    if (nivel4Button.clicked)
                    {
                        InitializeLevel(3);
                        nivel4Button.clicked = false;
                    }

                    if (nivel5Button.clicked)
                    {
                        InitializeLevel(4);
                        nivel5Button.clicked = false;
                    }

                    if (nivel6Button.clicked)
                    {
                        InitializeLevel(5);
                        nivel6Button.clicked = false;
                    }

                    if (previousMenuButton.clicked)
                    {
                        clickSound.Play();
                        levelMenu1 = false;
                        levelMenu2 = false;
                        gameState  = GameState.StartMenu;
                        previousMenuButton.clicked = false;
                    }

                    if (nextMenuButton.clicked)
                    {
                        clickSound.Play();
                        levelMenu1             = false;
                        levelMenu2             = true;
                        nextMenuButton.clicked = false;
                    }
                    nivel1Button.Update();
                    nivel2Button.Update();
                    nivel3Button.Update();
                    nivel4Button.Update();
                    nivel5Button.Update();
                    nivel6Button.Update();
                    previousMenuButton.Update();
                    nextMenuButton.Update();
                }
                if (levelMenu2 == true)
                {
                    if (nivel7Button.clicked)
                    {
                        InitializeLevel(6);
                        nivel7Button.clicked = false;
                    }
                    if (nivel8Button.clicked)
                    {
                        InitializeLevel(7);
                        nivel8Button.clicked = false;
                    }
                    if (nivel9Button.clicked)
                    {
                        InitializeLevel(8);
                        nivel9Button.clicked = false;
                    }
                    if (nivel10Button.clicked)
                    {
                        InitializeLevel(9);
                        nivel10Button.clicked = false;
                    }
                    if (nivel11Button.clicked)
                    {
                        InitializeLevel(10);
                        nivel11Button.clicked = false;
                    }
                    if (nivel12Button.clicked)
                    {
                        InitializeLevel(11);
                        nivel12Button.clicked = false;
                    }
                    if (previousMenuButton.clicked)
                    {
                        clickSound.Play();
                        levelMenu1 = true;
                        levelMenu2 = false;
                        previousMenuButton.clicked = false;
                    }
                    nivel7Button.Update();
                    nivel8Button.Update();
                    nivel9Button.Update();
                    nivel10Button.Update();
                    nivel11Button.Update();
                    nivel12Button.Update();
                    previousMenuButton.Update();
                }
            }

            // Updating the game while in Playing, Pause and GameOver
            if (gameState == GameState.Playing)
            {
                // In Playing Mode.
                if (isPlaying == true)
                {
                    // It checks if the pause is clicked to go to the pause menu.
                    if (pauseButton.clicked)
                    {
                        isPaused            = true;
                        pauseButton.clicked = false;
                    }

                    // Shooting
                    // Pressing mouse left click and verifing if some variables are true
                    // shoots the flask by calculating direction vector between mouse position and
                    // flask position and gives him a velocity by multiplying the position w/ the speed.
                    if (Input.IsMousePressed())
                    {
                        if ((gun.canShoot) && (Mouse.GetState().X > 200))
                        {
                            flaskSound.Play(0.3f, 0.6f, 0);
                            flask          = currentLevel.flaskList[currentFlask];
                            flask.position = new Vector2(70, 375);
                            Vector2 direction = new Vector2(Mouse.GetState().X - flask.position.X, Mouse.GetState().Y - flask.position.Y);
                            direction.Normalize();
                            flask.velocity = direction * flask.speed;
                            currentFlask++;
                            gun.canShoot               = false;
                            flask.visible              = true;
                            flask.idleRotation         = 2;
                            currentLevel.attemptScore -= 10000;
                        }
                    }

                    // Collisions and Gravity Fields
                    if ((gun.canShoot == false) && (flask != null))
                    {
                        //Shoot enabled when flask reaches screen bounds
                        if (GraphicsDevice.Viewport.Bounds.Contains(flask.myspace) == false)
                        {
                            flaskLostSound.Play(0.8f, 0.3f, 0);
                            currentLevel.orbitingScore = 0;
                            gun.canShoot  = true;
                            flask.visible = false;
                            if (currentFlask >= 4)
                            {
                                if (currentLevel.IsFinished == false)
                                {
                                    gameState = GameState.GameOver;
                                }
                                currentFlask = 0;
                            }
                        }

                        // For each flask in the list it calculates its update
                        foreach (Flask f in currentLevel.flaskList)
                        {
                            f.Update(gameTime.ElapsedGameTime);
                        }
                        // For each planet in the list
                        foreach (Planet p in currentLevel.planetList)
                        {
                            // Calculates flask gravity when entering planet atmosphere
                            if (flask.calculateGravity(p))
                            {
                                currentLevel.orbitingScore += 105;
                            }

                            // When flask colide with any planet
                            if (Vector2.Distance(new Vector2(flask.myspace.Center.X, flask.myspace.Center.Y),
                                                 new Vector2(p.myspace.Center.X, p.myspace.Center.Y)) < p.radius + 15)
                            {
                                if (p.isTarget == true)
                                {
                                    currentLevel.IsFinished = true;
                                }
                                else
                                {
                                    currentLevel.orbitingScore = 0;
                                    flask.visible = false;
                                    gun.canShoot  = true;
                                    crashingSound.Play();
                                }
                                // If the fourth flask colides with any planet, despite the target, its GameOver
                                if (currentFlask >= 4)
                                {
                                    if (currentLevel.IsFinished == false)
                                    {
                                        gameState = GameState.GameOver;
                                    }
                                    currentFlask = 0;
                                }
                            }
                        }
                    }

                    foreach (Planet p in currentLevel.planetList)
                    {
                        p.Update(gameTime.ElapsedGameTime);
                    }
                    gun.Update(gameTime.ElapsedGameTime);
                    pauseButton.Update();
                }
                // In Pause Menu
                if (isPaused == true)
                {
                    isPlaying = false;
                    // Click Resume Button to go back to the playing state
                    if (pauseResumeButton.clicked)
                    {
                        isPaused  = false;
                        isPlaying = true;
                        pauseResumeButton.clicked = false;
                    }

                    // Click Menu Button to go back to level menu
                    if ((pauseMenuButton.clicked))
                    {
                        isPaused  = false;
                        isPlaying = false;
                        gameState = GameState.LevelMenu;
                        pauseMenuButton.clicked = false;
                    }

                    // It checks if the retry button is clicked to reset the level.
                    if (pauseRestartButton.clicked)
                    {
                        isPaused = false;
                        pauseRestartButton.clicked = false;
                        InitializeLevel(Level.n_level);
                    }
                    pauseResumeButton.Update();
                    pauseMenuButton.Update();
                    pauseRestartButton.Update();
                }
                // In Finish Mode
                if (currentLevel.IsFinished == true)
                {
                    isPlaying = false;
                    finalRetryButton.Update();
                    currentLevel.UpdateFinish();
                    if ((Level.n_level < 0) || (Level.n_level > levelList.Count - 1))
                    {
                        gameState = GameState.LevelMenu;
                        MediaPlayer.Play(menuSong);
                    }
                    else if (currentLevel.IsFinished == false)
                    {
                        InitializeLevel(Level.n_level);
                    }

                    // It checks if the retry button is clicked to reset the level.
                    if (finalRetryButton.clicked)
                    {
                        isPaused = false;
                        finalRetryButton.clicked = false;
                        InitializeLevel(Level.n_level);
                    }
                }
            }

            if (gameState == GameState.GameOver)
            {
                if (gameoverMenuButton.clicked)
                {
                    gameState = GameState.LevelMenu;
                    gameoverMenuButton.clicked = false;
                }
                if (gameoverRetryButton.clicked)
                {
                    gameState = GameState.Playing;
                    InitializeLevel(Level.n_level);
                    gameoverRetryButton.clicked = false;
                }
                gameoverMenuButton.Update();
                gameoverRetryButton.Update();
            }
            base.Update(gameTime);
        }