/// <summary> /// Обновление объектов /// </summary> public void Update() { foreach (BaseObject obj in _objs) { obj.Update(); } foreach (Bullet b in _bullets) { b.Update(); } _heal?.Update(); for (var i = 0; i < _asteroids.Count; i++) { if (_asteroids[i] == null) { continue; } _asteroids[i].Update(); if (_ship.Collision(_asteroids[i])) { var rnd = new Random(); _ship.EnergyLow(rnd.Next(1, 10)); WorkData("Корабль столкнулся с астероидом и получил урон", journalRecords.JournalWrite); System.Media.SystemSounds.Asterisk.Play(); } if (_ship.Energy <= 0) { _ship.Die(); } for (int j = 0; j < _bullets.Count; j++) { if (_asteroids[i] != null && _bullets[j].Collision(_asteroids[i])) { WorkData("Уничтожен астероид", journalRecords.JournalWrite); System.Media.SystemSounds.Hand.Play(); _asteroids.RemoveAt(i); _asteroids[j].power--; _bullets.RemoveAt(j); score++; break; } } if (_heal != null && _ship.Collision(_heal)) { WorkData($"Корабль отлечился на {_heal.power} хитов", journalRecords.JournalWrite); _ship.EnergyLow(_heal.power); } if (_asteroids.Count == 0) { AsteroidLoad(++k); } } }
/// <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 (BaseObject obj in _objs) { obj.Update(); } _bullet?.Update(); // предшествующий вариант описания поведения астероидов //foreach (BaseObject obj in _asteroids) //{ // obj.Update(); // if (obj.Collision(_bullet)) //обнаружение столкновений // { // obj.Crash(); /*при столкновениях пули с астероидом пуля и астероид регенерировались*/ // //в разных концах экрана; // _bullet.Crash(); // System.Media.SystemSounds.Hand.Play(); // } //} for (var i = 0; i < _asteroids.Length; i++) { if (_asteroids[i] == null) { continue; // если объект не определен продолжить обход цикла далее } _asteroids[i].Update(); // иначе обновить положение астероида стандартно if (_bullet != null && _bullet.Collision(_asteroids[i])) //если снаряд не нулл и снаряд столкнулся с астероидом { System.Media.SystemSounds.Hand.Play(); //звуковой сигнал _asteroids[i] = null; // этот астероид уничтожается - нулл _bullet?.Destroyed(); _bullet = null; // снаряд уничтожается - нулл continue; // если продолжить обход цикла далее } if (!_ship.Collision(_asteroids[i])) { continue; //если корабль и этот астероид в цикле не столкнулись продолжить обход цикла } var rnd = new Random(); _ship?.EnergyLow(rnd.Next(1, 10)); // иначе корабль потерял энергию _ship.LooseEnerg(); // Loosing energy System.Media.SystemSounds.Asterisk.Play(); if (_ship.Energy <= 0) { _ship?.Die(); //если энергия корабля меньше или равна нулю корабль погибает } } }
public static void Update() { ConsoleMessage <string> strTarget = new ConsoleMessage <string>(StringTarget); //foreach (BaseObject obj in objs) obj.Update(); bullet?.Update(); heal?.Update(); if (heal != null && heal.Collision(ship)) { if (ship.Energy <= 90) { ship?.EnergyHeal(10); strTarget("Ship is healed"); } else { ship.EnergyClear(); } Random rnd = new Random(); heal = new Heal(new Point(Game.Width, rnd.Next(20, 1000)), new Point(rnd.Next(3, 10), rnd.Next(3, 10)), new Size(5, 5)); } for (var i = 0; i < asteroids.Length; i++) { if (asteroids[i] == null) { continue; } asteroids[i].Update(); if (bullet != null && bullet.Collision(asteroids[i])) { System.Media.SystemSounds.Hand.Play(); asteroids[i] = null; bullet = null; Count++; strTarget("Asteroid is hit"); continue; } if (!ship.Collision(asteroids[i])) { continue; } var rnd = new Random(); ship?.EnergyLow(rnd.Next(1, 10)); strTarget("Ship is hit"); System.Media.SystemSounds.Asterisk.Play(); if (ship.Energy <= 0) { ship?.Die(); } } }
public static void Update() { foreach (BaseObject obj in _objs) { obj.Update(); } //foreach (Asteroid a in _asteroids) //{ // a.Update(); // //if (a.Collision(_bullet)) // //{ // // System.Media.SystemSounds.Hand.Play(); // // // регенирируем объекты // // a.Ressurect(); // // _bullet.Ressurect(); // //} //} foreach (Heal a in _heals) { a.Update(); if (a.Collision(_ship)) { System.Media.SystemSounds.Question.Play(); // регенирируем объекты _ship.Heal(25); a.Ressurect(); } } //_bullet?.Update(); foreach (Bullet b in _bullets) { b.Update(); } if (_asteroids.Count == 0) { InitAster(++_aCount); // создание астероидов теперь только тут } bool aster_removed = false; for (var i = 0; i < _asteroids.Count; i++) { if (_asteroids[i] == null) { continue; } _asteroids[i].Update(); aster_removed = false; for (int j = 0; j < _bullets.Count; j++) { if (_asteroids[i] != null && _bullets[j].Collision(_asteroids[i])) { System.Media.SystemSounds.Hand.Play(); _asteroids.RemoveAt(i); _bullets.RemoveAt(j); i--; j--; Score++; aster_removed = true; break; } } if (aster_removed) { continue; } if (_asteroids[i] == null || !_ship.Collision(_asteroids[i])) { continue; } _ship?.EnergyLow(10); System.Media.SystemSounds.Asterisk.Play(); if (_ship.Energy <= 0) { _ship.Die(); } _asteroids.RemoveAt(i); //if (_bullet != null && _bullet.Collision(_asteroids[i])) //{ // System.Media.SystemSounds.Hand.Play(); // _asteroids[i] = null; // _bullet = null; // Score++; // continue; //} //if (!_ship.Collision(_asteroids[i])) continue; ////var rnd = new Random(); //_asteroids[i].Loggin("Ship hit!"); //System.Media.SystemSounds.Asterisk.Play(); //_asteroids[i] = null; //if (_ship.Energy <= 0) _ship?.Die(); } }
/// <summary> /// Изменяет состояние объектов /// </summary> public static void Update() { foreach (Bullet b in _bullets) { b?.Update(); } foreach (BaseObject obj in _star) { obj.Update(); } foreach (BaseObject obj in _grayPlanet) { obj.Update(); } foreach (BaseObject obj in _redPlanet) { obj.Update(); } for (var i = 0; i < _asteroids.Count; i++) { if (AsteroidsCount == 0) { GenerateAsteroid(_asteroids.Count + AsteroidsCountIncrement); AsteroidsCount = _asteroids.Count; } if (_asteroids[i] == null) { continue; } _asteroids[i].Update(); for (var j = 0; j < _bullets.Count; j++) { if (_asteroids[i] != null && _bullets[j].Collision(_asteroids[i])) { System.Media.SystemSounds.Hand.Play(); _asteroids[i] = null; _bullets.RemoveAt(j); _ship?.EnergyIncrease(); j--; AsteroidsCount--; } } if (_asteroids[i] == null || !_ship.Collision(_asteroids[i])) { continue; } { var rnd = new Random(); _ship?.EnergyLow(rnd.Next(10, 20)); System.Media.SystemSounds.Asterisk.Play(); _asteroids[i] = null; AsteroidsCount--; } if (_ship.Energy <= 0) { _ship?.Die(); } } for (var i = 0; i < _fik.Length; i++) { _fik[i].Update(); if (!_ship.Collision(_fik[i])) { continue; } if (_ship.Energy >= 100) { break; } else { _ship?.EnergyIncrease(); System.Media.SystemSounds.Exclamation.Play(); } } }
/// <summary> /// Обновление расположения нашего обьекта на экране /// </summary> public static void Update() { int points = 0; int r = rnd.Next(10, 50); foreach (BaseObject obj in _objs) { obj.Update(); } foreach (Bullet b in _bullets) { b.Update(); } foreach (Asteroid a in _asteroids) { a.Update(); } _heal?.Update(); _planets?.Update(); if (_ship.Energy <= 0) { _ship?.Die(); } if (_ship.Collision(_heal)) { BeHealed(); } if (_ship.flag == true) { _ship.EnergyLow(0.05f); } for (int i = 0; i < _asteroids.Count; i++) { if (_asteroids != null && _ship.Collision(_asteroids[i])) { str = "ship"; delLog.Dmg(str); _ship?.EnergyLow(rnd.Next(1, 10)); SystemSounds.Asterisk.Play(); _asteroids.RemoveAt(i); str = "0"; delLog.Del(str); continue; } for (int j = 0; j < _bullets.Count; j++) { if (_bullets[j].Collision(_heal) || _ship.Collision(_heal)) {//РЕДАКТИРОВАТЬ НА УНИЧТОЖЕНИЕ ОБЬЕКТА ПРИ СТРЕЛЬБЕ BeHealed(); _bullets.RemoveAt(j); j--; continue; } try { if (_bullets != null && _asteroids != null && _bullets[j].Collision(_asteroids[i])) { if (_asteroids == null) { continue; } if (_asteroids[i].Power == 0) { points = rnd.Next(1, 30); score += points; delLog.Del(points.ToString()); _bullets.RemoveAt(j); _asteroids.RemoveAt(i); continue; } _bullets.RemoveAt(j); j--; SystemSounds.Hand.Play(); _asteroids[i].Power--; continue; } } catch (Exception ex) { Console.WriteLine(ex); } } continue; } if (_asteroids.Count == 0) { AsteroidsCount++; for (int i = 0; i < AsteroidsCount; i++) { r = rnd.Next(10, 50); _asteroids.Add(new Asteroid(new Point(Width, rnd.Next(0, 800)), new Point(-r / 5, r), new Size(r, r))); str = "Asteroid"; delLog.Do(str); } } }
/// <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); } } }