예제 #1
0
        /// <summary> Task 3 Lesson 2
        /// Сделать так, чтобы при столкновениях пули с астероидом
        /// они регенерировались в разных концах экрана.
        /// </summary>
        public static void Update()
        {
            #region old code

            //foreach (var game_object in __GameObjects)
            //    game_object.Update();
            //__Bullet?.Update();
            //__PowerAid.Update();
            ////if (__Bullet is null || __Bullet.Rect.Left > Width)
            ////if (__Bullet.Rect.Left > Width)
            ////{
            ////    var rnd = new Random();
            ////    __Bullet = new Bullet(rnd.Next(0, Height));
            ////}

            //for (var i = 0; i < __GameObjects.Length; i++)
            //{
            //    var obj = __GameObjects[i];
            //    if (obj is ICollision)
            //    {
            //        var collision_object = (ICollision)obj;

            //        if (__SpaceShip.CheckCollision(collision_object))
            //        {
            //            __GameLog.LogEnergyDown(_Counter);
            //            __GameLogFile.LogEnergyDown(_Counter);
            //            __GameLog.Flush();
            //            __GameLogFile.Flush();
            //        }

            //        if (__PowerAid.CheckCollision(collision_object))
            //        {
            //            __GameLog.LogEnergyUp(_Counter);
            //            __GameLogFile.LogEnergyUp(_Counter);
            //            __GameLog.Flush();
            //            __GameLogFile.Flush();


            //            var rnd = new Random();
            //            __PowerAid = new PowerAid(
            //                new Point(rnd.Next(0, Width), rnd.Next(0, Height)),
            //                new Point(-rnd.Next(0, _ObjectMaxSpeed), 10),
            //                _ObjectSize);
            //        }

            //        if (__Bullet != null)
            //        {
            //            if (__Bullet.CheckCollision(collision_object))
            //            {
            //                _Counter++;
            //                __GameLog.LogAsteroidShotDown(_Counter);
            //                __GameLogFile.LogAsteroidShotDown(_Counter);
            //                __GameLog.Flush();
            //                __GameLogFile.Flush();

            //                __GameObjects[i] = null;
            //                __Bullet = null;

            //                var rnd = new Random();
            //                ////__Bullet = new Bullet(rnd.Next(0, Height));

            //                ////const int asteroid_size = 40;
            //                ////const int asteroid_max_speed = 20;
            //                __GameObjects[i] = new Asteroid(
            //                    // поскольку пуля всегда летит слева на право, астероид будет перенесен вправо.
            //                    new Point(rnd.Next(Width - 50, Width), rnd.Next(0, Height)),
            //                    new Point(-rnd.Next(0, _ObjectMaxSpeed), 0),
            //                    _ObjectSize + 15);//будет отличаться размером
            //                System.Media.SystemSounds.Beep.Play();
            //            }
            //        }
            //    }
            //}
            #endregion
            __SpaceShip?.Update();
            __Bullets?.ForEach(bullet => bullet.Update());
            __PowerAids?.ForEach(poweraid => poweraid.Update());
            __Asteroids?.ForEach(asteroid => asteroid.Update());
            __Stars?.ForEach(star => star.Update());

            foreach (var bullet_to_remove in __Bullets.Where(b => b.Rect.Left > Width).ToArray())
            {
                __Bullets.Remove(bullet_to_remove);
            }

            for (int i = 0; i < __Asteroids.Count; i++)
            {
                var obj = __Asteroids[i];
                if (obj is ICollision)
                {
                    var collision_object = (ICollision)obj;

                    if (__SpaceShip.CheckCollision(collision_object))
                    {
                        __GameLog.LogEnergyDown(_Counter);
                        __GameLogFile.LogEnergyDown(_Counter);
                        __GameLog.Flush();
                        __GameLogFile.Flush();

                        if (i < __Asteroids.Count)
                        {
                            __Asteroids.Remove(__Asteroids[i]);
                        }
                    }

                    foreach (var bullet in __Bullets.ToArray())
                    {
                        if (bullet.CheckCollision(collision_object))
                        {
                            _Counter++;

                            __Bullets.Remove(bullet);
                            if (i < __Asteroids.Count)
                            {
                                __Asteroids.Remove(__Asteroids[i]);
                            }
                            System.Media.SystemSounds.Beep.Play();

                            __GameLog.LogAsteroidShotDown(_Counter);
                            __GameLogFile.LogAsteroidShotDown(_Counter);
                            __GameLog.Flush();
                            __GameLogFile.Flush();
                        }
                    }
                }
            }

            for (int i = 0; i < __PowerAids.Count; i++)
            {
                var obj = __PowerAids[i];
                if (obj is ICollision)
                {
                    var collision_object = (ICollision)obj;

                    if (__SpaceShip.CheckCollision(collision_object))
                    {
                        __GameLog.LogEnergyUp(_Counter);
                        __GameLogFile.LogEnergyUp(_Counter);
                        __GameLog.Flush();
                        __GameLogFile.Flush();

                        __PowerAids.Remove(__PowerAids[i]);
                        System.Media.SystemSounds.Beep.Play();

                        __PowerAids.Add(new PowerAid(
                                            new Point(_Random.Next(0, Width), _Random.Next(0, Height - _ObjectSize)),
                                            new Point(-_Random.Next(1, _ObjectMaxSpeed), 10),
                                            _ObjectSize));
                        System.Media.SystemSounds.Beep.Play();
                    }
                }
            }

            if (__Asteroids.Count == 0)
            {
                _AsteroidCount++;
                for (int a = 0; a < _AsteroidCount; a++)
                {
                    __Asteroids.Add(new Asteroid(
                                        new Point(_Random.Next(Width - 70, Width), _Random.Next(0, Height - _ObjectSize)),
                                        new Point(-_Random.Next(1, _ObjectMaxSpeed), 0),
                                        _Random.Next(_ObjectSize - 5, _ObjectSize + 10)));
                }
            }
        }