Beispiel #1
0
        /// <summary>
        /// Метод инициализации игровых объектов
        /// </summary>
        public static void Load()
        {
            //Создаем массив движущихся объектов
            objs = new BaseObject[30];
            for (int i = 0; i < objs.Length; i++)
            {
                if (i < objs.Length - 4)
                {
                    //добавление объектов класса Star
                    objs[i] = new Star(new Point(rnd.Next(0, Width), rnd.Next(0, Height)), new Point(-rnd.Next(1, i + 1), 0), new Size(5, 5));
                }
                else
                {
                    //добавление объектов класса Planet
                    if (Math.Abs(i - objs.Length) == 4)
                    {
                        objs[i] = new Earth(new Point(rnd.Next(0, Width), rnd.Next(100, Height - 100)),
                                            new Point(-rnd.Next(1, 10), rnd.Next(1, 10)),
                                            Planet.PlanetsEnum.Earth);
                    }
                    if (Math.Abs(i - objs.Length) == 3)
                    {
                        objs[i] = new Anoa(new Point(rnd.Next(0, Width), rnd.Next(100, Height - 100)),
                                           new Point(-rnd.Next(1, 10), rnd.Next(1, 10)),
                                           Planet.PlanetsEnum.Anoa);
                    }
                    if (Math.Abs(i - objs.Length) == 2)
                    {
                        objs[i] = new Saturn(new Point(rnd.Next(0, Width), rnd.Next(100, Height - 100)),
                                             new Point(-rnd.Next(1, 10), rnd.Next(1, 10)),
                                             Planet.PlanetsEnum.Saturn);
                    }
                    if (Math.Abs(i - objs.Length) == 1)
                    {
                        objs[i] = new Venus(new Point(rnd.Next(0, Width), rnd.Next(100, Height - 100)),
                                            new Point(-rnd.Next(1, 10), rnd.Next(1, 10)),
                                            Planet.PlanetsEnum.Venus);
                    }
                }
            }

            //добавление объектов класса Asteroid

            AsteroidsGenerate(asteroidsCounter);

            //добавляем корабль
            ship = new SpaceShip(new Point(0, Height / 2), new Point(5, 5), new Size(30, 30));

            //добавляем аптечку
            medicalKit    = new MedicalKit(new Point(Width, rnd.Next(10, Height - 10)), new Point(10, 0), new Size(20, 20));
            ActionMessage = GameStart;
        }
Beispiel #2
0
 /// <summary>
 /// Обработка игрового таймера
 /// </summary>
 /// <param name="sender">Источник события</param>
 /// <param name="e">Уведомление</param>
 private static void Timer_Tick(object sender, EventArgs e)
 {
     Draw();
     Update();
     ActionMessage = null;
 }
Beispiel #3
0
        /// <summary>
        /// Метод обновления состояния игровых объектов с проверкой игровых событий
        /// </summary>
        public static void Update()
        {
            //обновление состояния фона
            foreach (BaseObject obj in objs)
            {
                obj.Update();
            }


            //обновление состояния снарядов
            foreach (var bullet in bullets)
            {
                bullet?.Update();
            }

            //обновление состояния аптечки
            if (medicalFlag)
            {
                medicalKit.Update();
            }

            //проверка состояния аптечки
            if (ship.Collision(medicalKit) || medicalKit.Position.X < 0)
            {
                if (ship.Collision(medicalKit))
                {
                    ship.IncreaseEnergy(10);
                }
                medicalFlag = false;
                medicalKit.Regenerate();
                medicalTimer.Stop();
                medicalTimer.Start();
                ActionMessage = TakenMedicalKid;
            }

            //проверка состояния астероидов
            for (var i = 0; i < asteroids.Count; i++)
            {
                if (asteroids[i] == null)
                {
                    continue;
                }
                asteroids[i].Update();
                for (int j = 0; j < bullets.Count; j++)
                {
                    if (bullets[j] != null && bullets[j].Collision(asteroids[i]))
                    {
                        System.Media.SystemSounds.Hand.Play();
                        ActionMessage = AsteroidCollapse;
                        asteroids[i]  = null;
                        bullets[j]    = null;
                        ship.HitTarget();
                        break;
                    }
                    if (bullets[j]?.Position.X > Game.Width)
                    {
                        bullets[j] = null;
                    }
                }
                if (asteroids[i] == null)
                {
                    continue;
                }
                if (!ship.Collision(asteroids[i]))
                {
                    continue;
                }
                ship?.ReductionOfEnergy(10);
                ActionMessage = AsteroidCollision;
                asteroids[i]  = null;
                System.Media.SystemSounds.Asterisk.Play();

                //проверка состояния корабля
                if (ship.Energy <= 0)
                {
                    ship?.Die();
                    ActionMessage = GameEnd;
                }
            }

            //проверка сбиты ли все астероиды
            if (ListEmpty(asteroids))
            {
                asteroidsCounter++;
                AsteroidsGenerate(asteroidsCounter);
            }
            ActionMessage?.Invoke();
        }