示例#1
0
文件: Game.cs 项目: xmishon/cs2
        /// <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();
                }
            }
        }
示例#2
0
        // 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);
            }
        }
示例#3
0
        /// <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);
                }
            }
        }