private void SpawnEnemies() { if (EnemyAppearingSW.Elapsed.TotalSeconds >= 1 / EnemiesPerSecond) { var enemy = new Enemy(RenderWidth - 1, Rand.Next(0, RenderHeight - 1)) { Health = 25 }; Creatures.Add(enemy); Enemies.Add(enemy); EnemyAppearingSW = Stopwatch.StartNew(); EnemyAppearingSW.Start(); } }
private void UpdateEnemies() { foreach (var enemy in Enemies) { enemy.PreciseX += enemy.Speed * FrameTime.TotalSeconds; var eBullet = ((Enemy)enemy).Fire(); if (eBullet != null) { EnemyBullets.Add(eBullet); Creatures.Add(eBullet); } } UpdateEnemyBullets(); }
public void Run() { Running = true; Thread t = new Thread(() => { Console.CursorVisible = false; Stopwatch sw = new Stopwatch(); EnemyAppearingSW.Start(); State = GameState.Playing; InitMenus(); Creatures.Add(Character); while (Running) { sw = Stopwatch.StartNew(); sw.Start(); ProcessInput(); Update(); Render(); sw.Stop(); FrameTime = sw.Elapsed; //if (FrameTime.TotalMilliseconds < 33) //{ // sw.Start(); // Thread.Sleep(TimeSpan.FromMilliseconds(33) - FrameTime); // sw.Stop(); // FrameTime = sw.Elapsed; //} } }); t.SetApartmentState(ApartmentState.STA); t.Start(); }
private void UpdateCharacter() { if (Character.Health <= 0) { State = GameState.ShowingDeathMessage; Creatures.Clear(); Enemies.Clear(); return; } for (int i = 0; i < Character.Bullets.Count; i++) { var bullet = Character.Bullets[i]; if (bullet.X >= RenderWidth) { Character.Bullets.Remove(bullet); } else { bullet.PreciseX += bullet.Speed * FrameTime.TotalSeconds; } for (int j = 0; j < Enemies.Count; j++) { var enemy = Enemies[j]; if (enemy.IsEntityInBounds(bullet.X, bullet.Y)) { enemy.Health -= bullet.Damage; Character.Bullets.Remove(bullet); Creatures.Remove(bullet); if (enemy.Health <= 0) { KillEnemy((Enemy)enemy); } } } } }
private void UpdateEnemyBullets() { for (int bulletIndex = 0; bulletIndex < EnemyBullets.Count; bulletIndex++) { var enemyBullet = EnemyBullets[bulletIndex]; if (enemyBullet.X <= 0) { Creatures.Remove(enemyBullet); EnemyBullets.Remove(enemyBullet); continue; } enemyBullet.PreciseX += enemyBullet.Speed * FrameTime.TotalSeconds; if (Character.IsEntityInBounds(enemyBullet.X, enemyBullet.Y)) { Character.Health -= enemyBullet.Damage; EnemyBullets.Remove(enemyBullet); Creatures.Remove(enemyBullet); } } }
private void KillEnemy(Enemy enemy) { Kills++; Creatures.Remove(enemy); Enemies.Remove(enemy); }
private void ProcessInput() { if (State == GameState.Typing) { ProcessTypingInput(); return; } if (Keyboard.IsKeyDown(Key.Escape) && State == GameState.Playing) { State = GameState.OpenedPauseMenu; } if (Keyboard.IsKeyDown(Key.Escape) && State != GameState.Playing && State != GameState.OpenedPauseMenu) { State = GameState.OpenedMainMenu; } if (State == GameState.OpenedMainMenu || State == GameState.OpenedPauseMenu) { ProcessMenuInput(); return; } if (State == GameState.ShowingDeathMessage) { return; } if (Keyboard.IsKeyDown(Key.Right)) { if (Character.PreciseX < RenderWidth) { Character.PreciseX += Character.Speed * FrameTime.TotalSeconds; } } if (Keyboard.IsKeyDown(Key.Left)) { if (Character.PreciseX > 0) { Character.PreciseX -= Character.Speed * FrameTime.TotalSeconds; } } if (Keyboard.IsKeyDown(Key.Up)) { if (Character.PreciseY > 0) { Character.PreciseY -= Character.Speed * FrameTime.TotalSeconds; } } if (Keyboard.IsKeyDown(Key.Down)) { if (Character.PreciseY < RenderHeight - Character.Height) { Character.PreciseY += Character.Speed * FrameTime.TotalSeconds; } } if (Keyboard.IsKeyDown(Key.Space)) { var bullet = Character.Fire(); if (bullet != null) { Creatures.Add(bullet); } } }