public TankData(long ownerId, Tank tank) { OwnerId = ownerId; ServerId = (int)tank.ServerId; Transform = tank.GetTransform(); WorldTransform = tank.WorldTransform; Velocity = tank.GetVelocity(); WorldVelocity = tank.WorldVelocity; TurretTransform = tank.Turret.GetTransform(); TurretWorldTransform = tank.Turret.GetWorldTransform(); GunFiredTime = tank.GunFiredTime; }
public void UpdateTank(Tank tank) { NetworkHelper.SetServerId(tank, ServerId); tank.SetTransform(Transform); tank.SetVelocity(Velocity); tank.WorldTransform = WorldTransform; tank.WorldVelocity = WorldVelocity; foreach (SceneNode node in tank.Children) { node.WorldTransform = WorldTransform; node.WorldVelocity = WorldVelocity; } tank.Turret.SetTransform(TurretTransform); tank.Turret.WorldTransform = TurretWorldTransform; tank.GunFiredTime = GunFiredTime; }
protected override void Initialize() { this.Window.Title = "Tank Diggity"; uiManager = new UIManager(this); Components.Add(uiManager); screenManager = new ScreenManager(this); Components.Add(screenManager); soundManager = new SoundManager(this); Components.Add(soundManager); tankPos = new Vector2(60, 785); turretPos = new Vector2(tankPos.X + 45, tankPos.Y + 25); player1Tank = new Tank(this, tankPos,(float)Math.PI / 2); Components.Add(player1Tank); tankPos2 = new Vector2(2048 - 140, 785); turretPos2 = new Vector2(tankPos2.X + 45, tankPos.Y + 10); player2Tank = new Tank(this, tankPos2,-(float)Math.PI / 2); Components.Add(player2Tank); currentTank = player1Tank; camera = new Camera2d(graphics.GraphicsDevice); background = new Background(this); Components.Add(background); powerUpManager = new PowerUpManager(this); Components.Add(powerUpManager); power = 0; chargingShot = false; chargingShot2 = false; shotFired = false; shotCollided = false; turnOver = false; gameRunning = false; rightSwap = false; leftSwap = false; debugGame = false; controller = GamePad.GetState(PlayerIndex.One); base.Initialize(); }
private void tankCollision(Tank player1Tank, Tank player2Tank) { if (player1Tank.tankPosition.X <= player2Tank.tankPosition.X) { if (player1Tank.collisionRect.Intersects(player2Tank.collisionRect)) { player1Tank.collideRight = false; player2Tank.collideLeft = false; } if (!(player1Tank.collisionRect.Intersects(player2Tank.collisionRect))) { player1Tank.collideRight = true; player2Tank.collideLeft = true; } } if (player1Tank.tankPosition.X >= player2Tank.tankPosition.X) { if (player1Tank.collisionRect.Intersects(player2Tank.collisionRect)) { player2Tank.collideRight = false; player1Tank.collideLeft = false; } if (!(player1Tank.collisionRect.Intersects(player2Tank.collisionRect))) { player1Tank.collideLeft = true; player2Tank.collideRight = true; } } }
public void endTurn(Tank currentTank) { if (currentTank.tankPosition.X < 600) { camera.lookAt(new Vector2(600, player1Tank.getTankPos().Y + FIELD_HEIGHT_OFFSET)); camera.Origin.X = GraphicsDevice.Viewport.Width / 2.0f; } if (currentTank.tankPosition.X > 1400) { camera.lookAt(new Vector2(1400, player2Tank.getTankPos().Y + FIELD_HEIGHT_OFFSET)); camera.Origin.X = 1400; } player1Tank.takingTurn = false; player2Tank.takingTurn = false; }
public void changeTurn() { if (screenManager.currentState == ScreenManager.GameState.PLAYER1 || debugGame) { currentTank = player1Tank; controller = GamePad.GetState(PlayerIndex.One); if (debugGame) { player1Tank.inventory.debugShot(); } } else if (screenManager.currentState == ScreenManager.GameState.PLAYER2) { currentTank = player2Tank; controller = GamePad.GetState(PlayerIndex.Two); } endTurn(currentTank); currentTank.takingTurn = true; currentTank.controller = controller; if (debugGame) { currentTank.moveLimit = 99; currentTank.turnTime = 99; } else { currentTank.moveLimit = 3; currentTank.turnTime = 20; } shotPause = 0; uiManager.resetPowerBar(); uiManager.resetMove(); shotFired = false; shotCollided = false; turnOver = false; if (turnsTaken > 0) { lerpCamera = true; } if(!currentTank.firstShot) { currentTank.showPreviousShotLine = true; } gameRunning = true; }
private void shieldLogic(Tank tank, Tank otherTank, PowerUp powerUp) { shieldHealthRect.X = (int)tank.getTankPos().X - 20; shieldHealthRect.Y = (int)tank.getTankPos().Y - 40; ShieldLayer.powerUpPosition = tank.getTankPos() - new Vector2(8, 20); if (powerUp.collisionRect.Intersects(otherTank.bullet.collisionRect)) { otherTank.bullet.outOfBounds = true; if (otherTank.bullet.type == BulletType.TeleportShot) otherTank.bullet.speed.X = -(otherTank.bullet.speed.X); shieldHealth -= otherTank.bullet.damage / 10; shieldHealthRect.Width = shieldHealth; game.soundManager.shieldHit.Play(); if (shieldHealth <= 100) ShieldLayer.powerUpPic = Game.Content.Load<Texture2D>(@"Images/BrokenShield"); if (shieldHealth <= 0) { game.soundManager.shieldBreaking.Play(); powerList.Remove(powerUp); shieldActive = false; play1HasShield = false; play2HasShield = false; } } }
public void PowerUpEffect(PowerUp powerUp, Tank tank) { if (powerUp == Health) { game.uiManager.floatingPowerUpText("+100 Health", tank.getTankPos()); tank.healTank(100); } if (powerUp == HeavyShot) { game.uiManager.floatingPowerUpText("Heavy Shot +1", tank.getTankPos()); tank.inventory.incrementShot(BulletType.HeavyShot); } if (powerUp == ScatterShot) { game.uiManager.floatingPowerUpText("ScatterShot +1", tank.getTankPos()); tank.inventory.incrementShot(BulletType.ScatterShot); } if (powerUp == ExtraMovement) { game.uiManager.floatingPowerUpText("Move Limit +3", tank.getTankPos()); tank.moveLimit += 3; } if (powerUp == ShieldPower) { game.uiManager.floatingPowerUpText("Shield", tank.getTankPos()); updateShield(tank.getTankPos()); } }
public void PowerUpCollision(Tank tank, Tank otherTank) { for (int i = 0; i < powerList.Count; i++) { if (play1HasShield == true) { shieldLogic(tank, otherTank, powerList[i]); } if (play2HasShield == true) { shieldLogic(otherTank, tank, powerList[i]); } if (powerList.Count == 1) { if (powerList[i].collisionRect.Intersects(tank.collisionRect) & (powerList[i] != ShieldLayer)) { game.soundManager.powerUpPickUp.Play(); PowerUpEffect(powerList[i], tank); powerList.RemoveAt(i); if (shieldActive == true) play1HasShield = true; } } if (powerList.Count == 1) { if (powerList[i].collisionRect.Intersects(otherTank.collisionRect) & (powerList[i] != ShieldLayer)) { game.soundManager.powerUpPickUp.Play(); PowerUpEffect(powerList[i], otherTank); powerList.RemoveAt(i); if (shieldActive == true) play2HasShield = true; } } } }
public void Shoot(ref Tank enemy) // метод стрельбы { enemy.health = enemy.health - damage + enemy.armor; }
static void Main(string[] args) { Console.WriteLine("Игра Перестрелка "); Tank player = new Tank("Танк игрока", 5, 100, 25); // танк игрока Tank ai = new Tank("Танк противника", 5, 100, 25); // танк компьютера int i = 1; string key; int amount = 10; // величина починки key = Console.ReadLine(); Random rnd = new Random(); while (player.GetHealth() > 0 && ai.GetHealth() > 0) // условие победы { Console.WriteLine($"Раунд {i}"); // вывод номера раунда { do // начало валидации пользовательского ввода { player.PrintInfo(); ai.PrintInfo(); Console.WriteLine(); Console.WriteLine("Выберите действие"); Console.WriteLine("1. Выстрелить"); Console.WriteLine("2. Починка"); Console.WriteLine(); key = Console.ReadLine(); if (key != "1" && key != "2") { Console.WriteLine("Неизвестное действие, введите номер действия из списка"); } }while (key != "1" && key != "2"); // конец пользовательского ввода } if (key == "1") { player.Shoot(ref ai); } else if (key == "2") { player.Repair(amount); } if (ai.GetHealth() <= 0) { break; } int aim = rnd.Next(1, 3); if (aim == 1) { ai.Shoot(ref player); Console.WriteLine("Противник стреляет"); } else if (aim == 2) { ai.Repair(amount); Console.WriteLine("Противник чинится"); } i++; } if (player.GetHealth() > 0 || ai.GetHealth() <= 0) { Console.WriteLine("Игрок победил"); } else if (player.GetHealth() <= 0 || ai.GetHealth() > 0) { Console.WriteLine("Противник победил"); } Console.ReadKey(); }