Esempio n. 1
0
 /// <summary>
 /// Создание аптечки по таймеру
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private static void createRepairKit(object sender, EventArgs e)
 {
     if (_repairKit == null)
     {
         WriteLog?.Invoke("Создана аптечка");
         _repairKit = new RepairKit(new Point(Game.Width, Rnd.Next(1, Game.Height - 35)), new Point(20, 0), new Size(30, 30), "repair_kit.jpg");
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Создание игровых объетков при загрузке игры
        /// </summary>
        public static void Load()
        {
            _backObjects = new BaseObject[50];

            int randSize;
            int randSpeed;
            int randPos;

            for (int i = 0; i < 20; i++)
            {
                randPos   = Rnd.Next(1, Game.Width);
                randSpeed = Rnd.Next(1, 5);

                _backObjects[i] = new FarStar(new Point(randPos, i * Game.Height / 20 + 10), new Point(randSpeed, 0), new Size(2, 2));
            }

            for (int i = 20; i < 30; i++)
            {
                randPos   = Rnd.Next(1, Game.Width);
                randSpeed = Rnd.Next(15, 30);
                randSize  = Rnd.Next(3, 10);

                _backObjects[i] = new FarAsteroid(new Point(randPos, (i - 20) * Game.Height / 10 + 20), new Point(randSize, 0), new Size(randSize, randSize));
            }

            for (int i = 30; i < 50; i++)
            {
                randPos   = Rnd.Next(1, Game.Width);
                randSpeed = Rnd.Next(2, 5);
                randSize  = Rnd.Next(3, 10);

                _backObjects[i] = new Star(new Point(randPos, (i - 30) * Game.Height / 20 + 20), new Point(randSpeed, 0), new Size(randSize, randSize));
            }

            _asteroids = new Asteroid[5];
            for (int i = 0; i < _asteroids.Length; i++)
            {
                randPos   = Rnd.Next(1, Game.Width);
                randSpeed = Rnd.Next(15, 25);

                _asteroids[i] = new Asteroid(new Point(Game.Width, Rnd.Next(1, Game.Height - 45)), new Point(randSpeed, 0), new Size(35, 35), "asteroid.png");
            }

            _repairKit = new RepairKit(new Point(Game.Width, Rnd.Next(1, Game.Height - 35)), new Point(10, 0), new Size(30, 30), "repair_kit.jpg");
            _ship      = new Ship(new Point(50, 300), new Point(0, 10), new Size(70, 30), "ship.jpg");
        }
Esempio n. 3
0
        /// <summary>
        /// Обновление позиции игровых объектов и их взаимодействие
        /// </summary>
        public static void Update()
        {
            foreach (BaseObject obj in _backObjects)
            {
                obj.Update();
            }
            foreach (Bullet b in _bullets)
            {
                b.Update();
            }
            _repairKit?.Update();

            //достижение аптечки левой части экрана
            if (_repairKit?.GetPosition().X < 0)
            {
                _repairKit = null;
            }
            for (int i = 0; i < _bullets.Count; i++)
            {
                if (_bullets[i].GetPosition().X > Game.Width)
                {
                    _bullets.RemoveAt(i);
                    i--;
                }
            }

            //сбор аптечки кораблем
            if (_repairKit != null && _ship.Collision(_repairKit))
            {
                WriteLog?.Invoke("Собрана аптечка");
                _repairKitTimer.Interval = Rnd.Next(15000, 30000);
                _sndCollision.Play();
                _ship.HPHigh(Rnd.Next(1, 10));
                _repairKit = null;
            }

            //попадание пули в аптечку
            if (_repairKit != null)
            {
                for (int i = 0; i < _bullets.Count; i++)
                {
                    if (_bullets[i].Collision(_repairKit))
                    {
                        WriteLog?.Invoke("Попадание снаряда в аптечку");
                        _repairKitTimer.Interval = Rnd.Next(15000, 30000);
                        _sndExplosion.Play();
                        _repairKit = null;
                        _bullets.RemoveAt(i);
                        break;
                    }
                }
            }

            for (int i = 0; i < _asteroids.Count; i++)
            {
                _asteroids[i].Update();

                //попадание пули в астероид
                for (int j = 0; j < _bullets.Count; j++)
                {
                    if (_asteroids[i] != null && _bullets[j].Collision(_asteroids[i]))
                    {
                        WriteLog?.Invoke($"Попадание снаряда в астероид");
                        _score++;
                        _sndCollision.Play();
                        _bullets.RemoveAt(j);
                        _asteroids[i].HP = _asteroids[i].HP - 1;
                        if (_asteroids[i].HP <= 0)
                        {
                            WriteLog?.Invoke($"Уничтожен астероид {_asteroids[i].Power} ур");
                            _asteroids[i] = null;
                            _sndExplosion.Play();
                        }
                        j--;
                    }
                }

                //столкновение корабля с астероидом
                if (_asteroids[i] != null && _ship.Collision(_asteroids[i]))
                {
                    WriteLog?.Invoke("Столкновение астероида с кораблем");
                    _sndExplosion.Play();
                    _ship?.HPLow(Rnd.Next(1, 10));
                    if (_ship.HP <= 0)
                    {
                        _ship?.Die();
                    }
                    _asteroids[i].NewPosition();
                }

                if (_asteroids[i] == null)
                {
                    _asteroids.RemoveAt(i);
                    i--;
                }
            }

            //появление новой группы астероидов при уничтожении предыдущей
            if (_asteroids.Count == 0)
            {
                WriteLog?.Invoke("Увеличение количества астероидов");
                _amountAsterois++;
                int randSize;
                for (int i = 0; i < _amountAsterois; i++)
                {
                    randSize = Rnd.Next(25, 40);
                    _asteroids.Add(new Asteroid(new Point(Game.Width, Rnd.Next(1, Game.Height - 45)), new Point(Rnd.Next(10, 15), 0), new Size(randSize, randSize)));
                }
            }
        }