예제 #1
0
파일: Game.cs 프로젝트: Sodiv/CSharpLevel2
 /// <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);
         }
     }
 }
예제 #2
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();
                }
            }
        }
예제 #3
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);
            }
        }
예제 #4
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();   //если энергия корабля меньше или равна нулю корабль погибает
                }
            }
        }
예제 #5
0
        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();
                }
            }
        }
예제 #6
0
파일: Game.cs 프로젝트: dcd120/Game
        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();
            }
        }
예제 #7
0
        /// <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();
                }
            }
        }
예제 #8
0
파일: Game.cs 프로젝트: Cheefs/Asteroids
        /// <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);
                }
            }
        }
예제 #9
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);
                }
            }
        }