/// <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))); } } }