Пример #1
0
        /// <summary>
        /// Обработчик таймера
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void Timer_Tick(object sender, EventArgs e)
        {
            i++;

            int x = rnd.Next(30, 120);

            if (i >= x)
            {
                pharmacy = new Pharmacy(new Point(10, rnd.Next(10, Game.Height)), new Point(0, 0), new Size(15, 12));
                i        = 0;
            }

            Draw();
            Update();

            #region !!!
            ////будем очищать принудительно память с помощью GC.Collect,но это не самый выгодный вариант, тк требуется много ресерсов для сбора и очистки.
            //if (i == 100)
            //{ GC.Collect(); i = 0; }
            #endregion
        }
Пример #2
0
        /// <summary>
        /// метод вывода обновленного положения объектов в форму
        /// </summary>
        public static void Update()
        {
            foreach (BaseObject obj in _objs)
            {
                obj.Update();
            }

            foreach (Bullet b in _bullets)
            {
                b?.Draw();
            }

            if (pharmacy != null)
            {
                if (_ship.Collision(pharmacy))
                {
                    System.Media.SystemSounds.Exclamation.Play();
                    _ship.EnergeUp(rnd.Next(1, 10));
                    pharmacy = null;
                    i        = 0;
                }
            }

            for (int i = 0; i < _asteroids.Count; i++)
            {
                if (_asteroids[i] == null)
                {
                    continue;
                }
                _asteroids[i].Update();
                for (int 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);
                        j--;
                        count++;
                        LogEvent($"{DateTime.Now.ToString()} уничтожен {_asteroids} !!!");
                    }
                }

                if (_asteroids[i] == null || !_ship.Collision(_asteroids[i]))
                {
                    continue;
                }
                else if (_asteroids[i] != null && _ship.Collision(_asteroids[i]))
                {
                    _ship?.EnergeLow(rnd.Next(1, 10));
                    System.Media.SystemSounds.Asterisk.Play();
                    _asteroids.RemoveAt(i);
                }

                if (_ship.Energy <= 0)
                {
                    _ship.Die();
                    LogEvent($"{DateTime.Now.ToString()} уничтожен {_ship} !!!");
                }
            }

            if (_asteroids == null)
            {
                List_length++;
                for (int i = 0; i < List_length; i++)
                {
                    int r = rnd.Next(0, 50);
                    _asteroids.Add(new Asteroid(new Point(1000, rnd.Next(0, maxValue: Height)), new Point(-r / 5, r), new Size(r, r)));
                }
            }


            #region HW3
            //    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++;
            //        LogEvent($"{DateTime.Now.ToString()} уничтожен {_asteroids} !!!");
            //        continue;
            //    }

            //    if (_ship.Collision(_asteroids[i]))
            //    {
            //        _ship?.EnergeLow(rnd.Next(1, 10));
            //        System.Media.SystemSounds.Asterisk.Play();

            //    }

            //    if (_ship.Energy <= 0)
            //    {
            //        _ship.Die();
            //        LogEvent($"{DateTime.Now.ToString()} уничтожен {_ship} !!!");
            //    }
            //}
            #endregion

            #region HW2
            //foreach  (Asteroid a in _asteroids)
            //{
            //    a.Update();

            //    if (a.Collision(_bullet))
            //    { SystemSounds.Hand.Play();
            //        a.Regeneretion();
            //        _bullet.Regeneretion();
            //    }
            //    _bullet.Update();
            //}
            #endregion
        }