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