/// <summary> /// Создание аптечки по таймеру /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void createRepairKit(object sender, EventArgs e) { if (_repairKit == null) { WriteLog?.Invoke("Создана аптечка"); _repairKit = new RepairKit(new Point(Game.Width, Rnd.Next(1, Game.Height - 35)), new Point(20, 0), new Size(30, 30), "repair_kit.jpg"); } }
/// <summary> /// Создание игровых объетков при загрузке игры /// </summary> public static void Load() { _backObjects = new BaseObject[50]; int randSize; int randSpeed; int randPos; for (int i = 0; i < 20; i++) { randPos = Rnd.Next(1, Game.Width); randSpeed = Rnd.Next(1, 5); _backObjects[i] = new FarStar(new Point(randPos, i * Game.Height / 20 + 10), new Point(randSpeed, 0), new Size(2, 2)); } for (int i = 20; i < 30; i++) { randPos = Rnd.Next(1, Game.Width); randSpeed = Rnd.Next(15, 30); randSize = Rnd.Next(3, 10); _backObjects[i] = new FarAsteroid(new Point(randPos, (i - 20) * Game.Height / 10 + 20), new Point(randSize, 0), new Size(randSize, randSize)); } for (int i = 30; i < 50; i++) { randPos = Rnd.Next(1, Game.Width); randSpeed = Rnd.Next(2, 5); randSize = Rnd.Next(3, 10); _backObjects[i] = new Star(new Point(randPos, (i - 30) * Game.Height / 20 + 20), new Point(randSpeed, 0), new Size(randSize, randSize)); } _asteroids = new Asteroid[5]; for (int i = 0; i < _asteroids.Length; i++) { randPos = Rnd.Next(1, Game.Width); randSpeed = Rnd.Next(15, 25); _asteroids[i] = new Asteroid(new Point(Game.Width, Rnd.Next(1, Game.Height - 45)), new Point(randSpeed, 0), new Size(35, 35), "asteroid.png"); } _repairKit = new RepairKit(new Point(Game.Width, Rnd.Next(1, Game.Height - 35)), new Point(10, 0), new Size(30, 30), "repair_kit.jpg"); _ship = new Ship(new Point(50, 300), new Point(0, 10), new Size(70, 30), "ship.jpg"); }
/// <summary> /// Обновление позиции игровых объектов и их взаимодействие /// </summary> public static void Update() { foreach (BaseObject obj in _backObjects) { obj.Update(); } foreach (Bullet b in _bullets) { b.Update(); } _repairKit?.Update(); //достижение аптечки левой части экрана if (_repairKit?.GetPosition().X < 0) { _repairKit = null; } for (int i = 0; i < _bullets.Count; i++) { if (_bullets[i].GetPosition().X > Game.Width) { _bullets.RemoveAt(i); i--; } } //сбор аптечки кораблем if (_repairKit != null && _ship.Collision(_repairKit)) { WriteLog?.Invoke("Собрана аптечка"); _repairKitTimer.Interval = Rnd.Next(15000, 30000); _sndCollision.Play(); _ship.HPHigh(Rnd.Next(1, 10)); _repairKit = null; } //попадание пули в аптечку if (_repairKit != null) { for (int i = 0; i < _bullets.Count; i++) { if (_bullets[i].Collision(_repairKit)) { WriteLog?.Invoke("Попадание снаряда в аптечку"); _repairKitTimer.Interval = Rnd.Next(15000, 30000); _sndExplosion.Play(); _repairKit = null; _bullets.RemoveAt(i); break; } } } for (int i = 0; i < _asteroids.Count; i++) { _asteroids[i].Update(); //попадание пули в астероид for (int j = 0; j < _bullets.Count; j++) { if (_asteroids[i] != null && _bullets[j].Collision(_asteroids[i])) { WriteLog?.Invoke($"Попадание снаряда в астероид"); _score++; _sndCollision.Play(); _bullets.RemoveAt(j); _asteroids[i].HP = _asteroids[i].HP - 1; if (_asteroids[i].HP <= 0) { WriteLog?.Invoke($"Уничтожен астероид {_asteroids[i].Power} ур"); _asteroids[i] = null; _sndExplosion.Play(); } j--; } } //столкновение корабля с астероидом if (_asteroids[i] != null && _ship.Collision(_asteroids[i])) { WriteLog?.Invoke("Столкновение астероида с кораблем"); _sndExplosion.Play(); _ship?.HPLow(Rnd.Next(1, 10)); if (_ship.HP <= 0) { _ship?.Die(); } _asteroids[i].NewPosition(); } if (_asteroids[i] == null) { _asteroids.RemoveAt(i); i--; } } //появление новой группы астероидов при уничтожении предыдущей if (_asteroids.Count == 0) { WriteLog?.Invoke("Увеличение количества астероидов"); _amountAsterois++; int randSize; for (int i = 0; i < _amountAsterois; i++) { randSize = Rnd.Next(25, 40); _asteroids.Add(new Asteroid(new Point(Game.Width, Rnd.Next(1, Game.Height - 45)), new Point(Rnd.Next(10, 15), 0), new Size(randSize, randSize))); } } }