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); } } } }
/// <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); }