/// <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(); //если энергия корабля меньше или равна нулю корабль погибает } } }