コード例 #1
0
 protected void WaterBallWave(GameTime gameTime) // hiệu ứng bắn water1 xoay vòng
 {
     if (water_ball_num != 0)
     {
         water_ball_delay_elapse += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
         if (water_ball_delay_elapse > water_ball_delay)
         {
             water_ball_delay_elapse = 0f;
             Water_Enemy1 w = new Water_Enemy1(water1_texture, 0f, (int)water_ball_source.X, (int)water_ball_source.Y, 0f, water_ball_fire_rotation, water_ball_wave_speed);
             list_water1.Add(w);
             water_ball_num++;
             water_ball_fire_rotation = water_ball_fire_rotation + water_ball_wave_rotation_speed;
             if (water_ball_num == n_water_ball + 1)
             {
                 water_ball_num   = 0;
                 hud.playerScore += 8;
             }
         }
     }
     else
     {
         water_ball_wave_elapsed += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
         if (water_ball_wave_elapsed > water_ball_wave)
         {
             if (warning_elapsed == 0)
             {
                 sm.LightningSound.Play(0.2f, 0f, 0f);
                 Random rnd = new Random();
                 water_ball_source   = new Vector2(rnd.Next(100, 900), rnd.Next(50, 550));
                 lightning.position  = water_ball_source;
                 lightning.frames    = 0;
                 lightning.isVisible = true;
             }
             warning_elapsed += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
             if (warning_elapsed > warning_waiting)
             {
                 warning_elapsed          = 0f;
                 water_ball_wave_elapsed  = 0f;
                 water_ball_fire_rotation = 0.00f;
                 water_ball_num           = 1;
                 //sm.ShootStart.Play();
                 sm.Play(sm.ShootStart);
             }
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }

            switch (gameState)
            {
            case State.Playing:
            {
                int i;
                if (!p.timestop)
                {
                    // tạo ra hiệu ứng các water_orb xoay vòng mỗi water_orb_spawn_time
                    water_orb_elapsed += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                    if (water_orb_elapsed > water_orb_spawn_time)
                    {
                        sm.Play(sm.OrbStart);
                        //sm.OrbStart.Play();
                        hud.playerScore  += 10;
                        water_orb_elapsed = 0f;
                        for (i = 0; i < n_orb; i++)
                        {
                            float   orb_rotation = i * ((float)Math.PI * 2 / n_orb);
                            Vector2 direction    = new Vector2((float)Math.Cos(orb_rotation), (float)Math.Sin(orb_rotation));
                            Vector2 spawn_point  = new Vector2(500, 300);
                            spawn_point += direction * max_range;
                            Water_Orb w_orb = new Water_Orb(water_orb_texture, spawn_point.X, spawn_point.Y, orb_rotation);
                            list_water_orb.Add(w_orb);
                        }
                    }

                    // tăng độ khó của game mỗi _game/1000 giây
                    game_elapsed_time += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                    if (game_elapsed_time > _game)
                    {
                        sm.Play(sm._game_increased);
                        //sm._game_increased.Play();
                        hud.playerScore  += 10;        //
                        game_elapsed_time = 0;
                        water1_speed     += 0.02f;     //

                        water_ball_wave_rotation_speed = 2 * (float)Math.PI / (40 - n_orb);
                        water1_spawn_time     -= 100f;     //
                        water_ball_delay      -= 3f;
                        water_ball_wave        = -500f;
                        water_ball_wave_speed += 0.2f;
                        warning_waiting       -= 500f;
                        //water orb
                        Water_Orb.speed         += 0.2f;
                        Water_Orb.rotationSpeed += 0.002f;
                        water_orb_spawn_time    -= 1000f;
                        n_orb++;         //
                                         //hiệu ứng làm chậm
                        water_slow_spawn_time -= 500f;
                        water_slow_speed      += 0.1f;
                    }
                    Random rnd = new Random();



                    // tạo ra các water1
                    water1_elapsed += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                    if (water1_elapsed >= water1_spawn_time)
                    {
                        hud.playerScore += 2;
                        int x;
                        if (rnd.Next(2) == 0)
                        {
                            x = -50;
                        }
                        else
                        {
                            x = 650;
                        }
                        Water_Enemy1 w = new Water_Enemy1(water1_texture, water1_timeSpan, 1000 / rnd.Next(1, 10), x, water1_speed);

                        list_water1.Add(w);
                        water1_elapsed = 0;
                    }


                    waterloop_elapsed += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                    for (i = 0; i < list_water_orb.Count(); i++)
                    {
                        list_water_orb[i].Update(gameTime);
                    }

                    for (i = 0; i < list_water1.Count(); i++)
                    {
                        if (list_water1[i].timeSpan > 0)         // kiểm tra thời gian tồn tại của các water1
                        {
                            list_water1[i].Update(gameTime);
                        }
                        else
                        {
                            list_water1[i].Update(gameTime);
                            if (list_water1[i].position.X < -50 || list_water1[i].position.Y < -50)
                            {
                                list_water1.Remove(list_water1[i--]);
                            }
                        }
                    }

                    if (waterloop_elapsed > waterloop_dur)
                    {
                        sm.waterloop.Play(0.1f, 0f, 0f);
                        waterloop_elapsed = 0;
                    }
                    WaterBallWave(gameTime);
                    lightning.Update(gameTime);
                    WaterSlow(gameTime);
                }
                sm.Update(gameTime);
                for (i = 0; i < list_water1.Count(); i++)
                {
                    if (p.boundingBox.Intersects(list_water1[i].boundingBox))             // kiểm tra va chạm của water1 so với player
                    {
                        gameState = State.Gameover;
                    }
                }
                // kiểm tra va chạm của các water_orb
                for (i = 0; i < list_water_orb.Count(); i++)
                {
                    if (p.boundingBox.Intersects(list_water_orb[i].boundingBox))
                    {
                        if (p.isShielded)                 // kiểm tra nếu player có khiên hay không
                        {
                            list_water_orb.RemoveAt(i--); // làm mất water orb
                            p.isShielded = false;         // phá vỡ khiên
                        }
                        else
                        {
                            gameState = State.Gameover;         // nếu không thì game over
                        }
                    }
                    else
                    if (list_water_orb[i].phase == Water_Orb.endPhase)         // xoá water_orb khi vào phase cuối
                    {
                        list_water_orb.Remove(list_water_orb[i]);
                        i--;
                    }
                }
                p.Update(gameTime);

                //hud.Update(gameTime);

                break;
            }

            case State.Menu:
            {
                if (f_menu)
                {
                    sm.MenuSound.Play();

                    f_menu = false;
                }
                frame_time = gameTime.ElapsedGameTime.Milliseconds / 1000.0;

                // update mouse variables
                MouseState mouse_state = Mouse.GetState();
                mx            = mouse_state.X;
                my            = mouse_state.Y;
                prev_mpressed = mpressed;
                mpressed      = mouse_state.LeftButton == ButtonState.Pressed;

                update_buttons();

                KeyboardState keyState = Keyboard.GetState();
                if (keyState.IsKeyDown(Keys.Enter))
                {
                    sm.Play(sm.gameStart);
                    //sm.gameStart.Play();
                    gameState = State.Playing;
                    f_menu    = true;
                }
                break;
            }

            case State.Gameover:
            {
                KeyboardState keyState = Keyboard.GetState();
                if (f_gameover)
                {
                    sm.Done.Play();
                }
                f_gameover = false;
                if (keyState.IsKeyDown(Keys.Escape))
                {
                    reset();
                    f_gameover = true;
                    gameState  = State.Menu;
                }
                if (keyState.IsKeyDown(Keys.Enter))
                {
                    reset();
                    f_gameover = true;
                    sm.gameStart.Play();
                    gameState = State.Playing;
                }

                break;
            }

            case State.Guide:
            {
                frame_time = gameTime.ElapsedGameTime.Milliseconds / 1000.0;

                // update mouse variables
                MouseState mouse_state = Mouse.GetState();
                mx            = mouse_state.X;
                my            = mouse_state.Y;
                prev_mpressed = mpressed;
                mpressed      = mouse_state.LeftButton == ButtonState.Pressed;

                update_buttons();
                break;
            }
            }


            base.Update(gameTime);
        }