public void TestMovementDelta() { _bullet = new Bullet(0, 0, 1, 3, 50, SwinGameSDK.Color.Red, Alignment.Player); //loop a few times, it shouldn't have moved for (int i = 0; i < 3; i++) { _bullet.Update(); } Assert.AreEqual(_bullet.X, 3); Assert.AreEqual(_bullet.Y, 9); }
public static void Update() { foreach (Asteroid a in asteroids) { a.Update(); if (a.Collision(bullet)) { Random rnd = new Random(); bullet = new Bullet(new Point(0, rnd.Next(20, 600)), new Point(rnd.Next(3, 10), 0), new Size(1, 3)); } } bullet.Update(); }
/// <summary> /// метод для изменения состояния объектов. /// </summary> public static void Update() { foreach (BaseObject obj in _objs) { obj.Update(); } _bullet?.Update(); // предшествующий вариант описания поведения астероидов //foreach (BaseObject obj in _asteroids) //{ // obj.Update(); // if (obj.Collision(_bullet)) //обнаружение столкновений // { // obj.Crash(); /*при столкновениях пули с астероидом пуля и астероид регенерировались*/ // //в разных концах экрана; // _bullet.Crash(); // System.Media.SystemSounds.Hand.Play(); // } //} for (var i = 0; i < _asteroids.Length; i++) { if (_asteroids[i] == null) { continue; // если объект не определен продолжить обход цикла далее } _asteroids[i].Update(); // иначе обновить положение астероида стандартно if (_bullet != null && _bullet.Collision(_asteroids[i])) //если снаряд не нулл и снаряд столкнулся с астероидом { System.Media.SystemSounds.Hand.Play(); //звуковой сигнал _asteroids[i] = null; // этот астероид уничтожается - нулл _bullet?.Destroyed(); _bullet = null; // снаряд уничтожается - нулл continue; // если продолжить обход цикла далее } if (!_ship.Collision(_asteroids[i])) { continue; //если корабль и этот астероид в цикле не столкнулись продолжить обход цикла } var rnd = new Random(); _ship?.EnergyLow(rnd.Next(1, 10)); // иначе корабль потерял энергию _ship.LooseEnerg(); // Loosing energy System.Media.SystemSounds.Asterisk.Play(); if (_ship.Energy <= 0) { _ship?.Die(); //если энергия корабля меньше или равна нулю корабль погибает } } }
public static void Update() { ConsoleMessage <string> strTarget = new ConsoleMessage <string>(StringTarget); //foreach (BaseObject obj in objs) obj.Update(); bullet?.Update(); heal?.Update(); if (heal != null && heal.Collision(ship)) { if (ship.Energy <= 90) { ship?.EnergyHeal(10); strTarget("Ship is healed"); } else { ship.EnergyClear(); } Random rnd = new Random(); heal = new Heal(new Point(Game.Width, rnd.Next(20, 1000)), new Point(rnd.Next(3, 10), rnd.Next(3, 10)), new Size(5, 5)); } for (var i = 0; i < asteroids.Length; i++) { 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++; strTarget("Asteroid is hit"); continue; } if (!ship.Collision(asteroids[i])) { continue; } var rnd = new Random(); ship?.EnergyLow(rnd.Next(1, 10)); strTarget("Ship is hit"); System.Media.SystemSounds.Asterisk.Play(); if (ship.Energy <= 0) { ship?.Die(); } } }
/// <summary> /// Метод меняет позиции каждого объекта на игровом поле /// </summary> public static void UpdatePosition() { foreach (BaseObject obj in objs) { try { obj.Update(); } catch { } } bullet.Update(); foreach (Asteroid aster in asteroids) { aster.Update(); if (aster.Collision(bullet)) { System.Media.SystemSounds.Hand.Play(); Console.WriteLine("столкновение пули и астероида"); aster.UpdateAfterCollision(); bullet.UpdateAfterCollision(); } } }