/// <summary> /// Обновляет положения объектов на сцене запуская метод Update() каждого из объектов. /// Проверяет пересечения объектов. /// Выполняется каждый кадр (по событию таймера, раз в 40 миллисекунд) /// </summary> public static void Update() { if (_asteroids.Count < 1) { _asteroidsCount++; createAsteroids(_asteroidsCount); } foreach (BaseObject obj in _objs) { obj.Update(); } foreach (BaseObject bullet in _bullets) { bullet.Update(); } _aid?.Update(); if (_aid.Collision(_ship)) // проверяем, столкнулась ли аптечка с кораблём { _aid.Recreate(); _ship.EnergyHigh(10); } for (var i = 0; i < _asteroids.Count; i++) { _asteroids[i].Update(); for (int j = 0; j < _bullets.Count; j++) { if (i > -1 && _bullets[j].Collision(_asteroids[i])) { LogMessage("Уничтожен астероид c мощностью: " + _asteroids[i].Power); System.Media.SystemSounds.Hand.Play(); _asteroids.RemoveAt(i); i--; _points++; _bullets.RemoveAt(j); j--; } if (i < 0) { break; // если уничтожили последний астероид, прерываем обход пуль } } if (i < 0) { continue; // если уничтожили последний астероид, прерываем обход астероидов } if (!_ship.Collision(_asteroids[i])) { continue; } _ship?.EnergyLow(Rnd.Next(5, 15)); _asteroids[i].Recreate(); LogMessage("Астероид попал в корабль."); System.Media.SystemSounds.Asterisk.Play(); if (_ship.Energy <= 0) { _ship?.Die(); } } }
// Method updates all objects on the gamefield and handle collisions, if it happens, each tick of the timer public static void Update() { foreach (Star star in _stars) { star.Update(); } foreach (Bullet bul in _bullets) { bul.Update(); } if (_asteroids.Count == 0) { CreateAsteroids(); } for (var i = 0; i < _asteroids.Count; i++) { _asteroids[i].Update(); if (_ship.Collision(_asteroids[i])) { _ship.EnergyLow(Rnd.Next(1, 10)); System.Media.SystemSounds.Asterisk.Play(); if (_ship.Energy <= 0) { _ship.Die(); } } for (int j = 0; j < _bullets.Count; j++) { if (_bullets[j].Collision(_asteroids[i])) { System.Media.SystemSounds.Hand.Play(); _asteroids.RemoveAt(i); _bullets.RemoveAt(j); j--; _score++; break; } } } _firstAidKit.Update(); if (_firstAidKit != null && _firstAidKit.Collision(_ship)) { _ship.EnergyHigh(1); } }
/// <summary> /// Обновляем объекты на экране /// </summary> public static void Update() { foreach (Bullet b in _bullets) { b.Update(); } for (var i = 0; i < _lasteroids.Count; i++) { if (_lasteroids[i] == null) { continue; } _lasteroids[i].Update(); if (_lasteroids[i].Collision(_ship)) { System.Media.SystemSounds.Asterisk.Play(); var rnd = new Random(); _ship?.EnergyLow(rnd.Next(10, 50)); _lasteroids[i].Pos.X = Width; _lasteroids[i].Pos.Y = Height; _log += ShipHit; if (_ship.Energy <= 0) { _ship?.Die(); } } for (int j = 0; j < _bullets.Count; j++) { if (_lasteroids[i] != null && _bullets[j].Collision(_lasteroids[i])) { System.Media.SystemSounds.Hand.Play(); _bullets.RemoveAt(j); _lasteroids.RemoveAt(i); score++; if (score > CurRec) { CurRec = score; } _log += Hit; j--; if (_lasteroids.Count == 0) { AsterCount++; mspeed++; CreateAsteroid(AsterCount, mspeed); } break; } } if (_medkit.Collision(_ship)) { System.Media.SystemSounds.Exclamation.Play(); _ship?.EnergyHigh(25); _medkit.Pos.X = Game.Width; _medkit.Pos.Y = rnd.Next(0, Game.Height); } } }