public Menu(Engine game, Animation enter, Resources R) { this.game = game; cursorState = 0; keyboardState = Keyboard.GetState(); previousState = Keyboard.GetState(); this.enter = enter; Res = R; }
void Vybuch(int x,int y) { vybuch = new Animation(); vybuch.Initialize(x, y, 90, 90, animationFrameRate, false, true, 7); vybuch.LoadGraphicsContent(this.spriteBatch, Res.Textures["Vybuch_Maly"]); Animations.Add(vybuch); }
protected override void Update(GameTime gameTime) { switcher.CheckStates(); if (GameState == 0) //menu { menu.Update(gameTime); CurrentLevel = 1; scoreBoard = 0; won = false; } else if (GameState == 6) //howtoplay { if ((Keyboard.GetState().IsKeyDown(Keys.Escape)) || (Keyboard.GetState().IsKeyDown(Keys.Back))) { GameState = 0; } } if ((GameState == 2)&&(!GameOver)) { if ((enemiesToKill == 0)&&(!GameOver)) //prechod do dalsieho levelu { if (!switcher.switching) { CurrentLevel += 1; if (CurrentLevel > Constants.TotalLevels) { switcher.SwitchState(4, 0); won = true; } else { switcher.SwitchState(3, 3000); } } } if((scoreBoard/10>0)&&(!rewardOnScene)) //if ((!rewardOnScene)&&((Player1.Score+player2.Score) % 1600 == 0)&&(Player1.Score+player2.Score>=0)) { scoreBoard -= rnd.Next(8)+4; int x=rnd.Next(Constants.LevelWidth-Constants.BrickSize/2)+Constants.OriginX+Constants.BrickSize; int y=rnd.Next(Constants.LevelHeigth-Constants.BrickSize*2)+Constants.OriginY+Constants.BrickSize; reward = new Animation(); reward.Initialize(x, y, 40, 40, 20, true, true, 7); reward.Type=rnd.Next(4); reward.LoadGraphicsContent(spriteBatch, Res.Textures["Reward_" + reward.Type]); Animations.Add(reward); Rewards.Add(reward); planner.PlanEvent("cancelReward", rnd.Next(3000) + 6000, 0); rewardOnScene = true; } } for (int i = 0; i < Animations.Count;i++ ) { Animations[i].Update(gameTime); if (Animations[i].Removable) { Animations.RemoveAt(i); } } if (GameState== 2) //hraj { timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds/2; if (timeSinceLastFrame > milisecondsPerFrame) { timeSinceLastFrame = 0; myKeyboard.Update(this, gameTime); myKeyboard2.Update(this, gameTime); //nastavi x,y prirastok k suradniciam tanku podla daneho smeru foreach (Tank Player in Players) { if (Player.Alive) { Player.CalculateXY(Constants.TanksSpeed[Player.Type]); } } if ((Player1.Lives == 0) && (Player2.Lives == 0)) { GameOver = true; } #region CheckRewardsCollision foreach (Tank Player in Players) { if (Player.Alive) { Animation temp; for (int i=0; i < Rewards.Count; i++) { temp = Rewards[i]; if (Player.BoundingRectangle.Intersects(temp.BoundingRectangle)) { Player.Score += 400; for (int j = 0; j < Animations.Count; j++) { if (Rewards[i] == Animations[j]) { Animations.RemoveAt(j); } } Rewards.RemoveAt(i); rewardOnScene = false; switch (temp.Type) { case 0: Player.Lives += 1; break; case 1: if (Player.MaxShots < 3) { Player.MaxShots += 1; } break; case 2: if (Player.ShotSpeed <= 12) { Player.ShotSpeed += 2; } break; } } } } } #endregion //skontroluje, ci hrac narazi v danom smere do nejakej tehly, ak ano nastavi Collision na true #region CheckCollisionTank Player1.Collision = false; Player2.Collision = false; if ((player2.Alive)&&(player1.NextFrameBound().Intersects(player2.BoundingRectangle))) { player1.Collision = true; } if ((player1.Alive)&&(player2.NextFrameBound().Intersects(player1.BoundingRectangle))) { player2.Collision = true; } if ((player1.BoundingRectangle.Intersects(player2.BoundingRectangle))) { player1.Collision = false; player2.Collision = false; } foreach (Tank Player in Players) { if (Player.Alive) { for (int j = 0; j < Bricks.Count; j++) { brick = Bricks[j]; if (!brick.Alive) { Bricks.RemoveAt(j--); } if ((!brick.Passable) && (brick.BoundingRectangle.Intersects(Player.NextFrameBound()))) { Player.Collision = true; } } if ((Player.NextFrameBound().Top < Constants.OriginY) || (Player.NextFrameBound().Bottom > Constants.LevelHeigth + Constants.OriginY) || (Player.NextFrameBound().Left < Constants.OriginX) || (Player.NextFrameBound().Right > Constants.LevelWidth + Constants.OriginX) ) { Player.Collision = true; } for (int j = 0; j < Enemies.Count; j++) { if (Player.NextFrameBound().Intersects(Enemies[j].BoundingRectangle)) { Player.Collision = true; } if (Player.BoundingRectangle.Intersects(Enemies[j].BoundingRectangle)) { Player.Collision = false; } } } } for (int i = 0; i < Enemies.Count; i++) { EnemyTank tempEnemy = Enemies[i]; if (tempEnemy.Alive) { for (int j = 0; j < Bricks.Count; j++) { brick = Bricks[j]; if (!brick.Alive) { Bricks.RemoveAt(j--); } if ((!brick.Passable) && (brick.BoundingRectangle.Intersects(tempEnemy.NextFrameBound()))) { tempEnemy.Collision = true; } } if ((tempEnemy.NextFrameBound().Top < Constants.OriginY) || (tempEnemy.NextFrameBound().Bottom > Constants.LevelHeigth + Constants.OriginY) || (tempEnemy.NextFrameBound().Left < Constants.OriginX) || (tempEnemy.NextFrameBound().Right > Constants.LevelWidth + Constants.OriginX) ) { tempEnemy.Collision = true; } for (int j = 0; j < Enemies.Count; j++) { if ((tempEnemy.BoundingRectangleTop.Intersects(Enemies[j].BoundingRectangle)) && (j != i)) { tempEnemy.Otoc(); } } foreach (Tank Player in Players) { if (Player.Alive) { if ((tempEnemy.NextFrameBound().Intersects(Player.BoundingRectangle))) { tempEnemy.Collision = true; } } } } } #endregion //ak je Collision true, nepusti ho v danom smere #region MoveTanks if (Player1.Alive) { if ((myKeyboard.KeyPressed) && (!Player1.Collision)) { Player1.PositionX += Player1.X; Player1.PositionY += Player1.Y; } } if (Player2.Alive) { if ((myKeyboard2.KeyPressed) && (!Player2.Collision)) { Player2.PositionX += Player2.X; Player2.PositionY += Player2.Y; } } for (int j = 0; j < Enemies.Count; j++) { if (Enemies[j].Alive) { Enemies[j].UpdateEnemy(gameTime); } else { Enemies.RemoveAt(j); } } #endregion //skontroluje kolizie striel s tehlami, ak nastane, strela.Expode(); #region CheckCollisionsShots for (int i = 0; i < Strely.Count; i++) { strela = Strely[i]; for (int j = 0; j < Strely.Count; j++) { if ((i != j)) { if (strela.CheckCollisionsShot(Strely[j])) { Vybuch((int)strela.PositionX, (int)strela.PositionY); } } } if (strela.Alive) { if ((strela.BoundingRectangle.Intersects(Eagle.BoundingRectangleBrick)) && (strela.Alive)) { Eagle.CalculateSource(2); GameOver = true; strela.Alive = false; } for (int j = 0; j < Bricks.Count; j++) { brick = Bricks[j]; if (!brick.ShotPassable) { if(strela.CheckCollisions(brick)) { Vybuch((int)strela.PositionX,(int)strela.PositionY); } } } EnemyTank temp; if ((strela.ShotBy == player1) || (strela.ShotBy == player2)) { for (int j = 0; j < Enemies.Count; j++) { temp = Enemies[j]; if (temp.Alive) { if (strela.CheckCollisionsTank(temp)) { int value=0; switch(temp.Type) { case 1: value=100; break; case 2: value=200; break; case 3: value=400; break; } enemiesToKill -= 1; temp.Explode(); strela.ShotBy.Score += value; if (!rewardOnScene) { scoreBoard += 1; } if (planner.CountEvent("newEnemy") < 1) { planner.PlanEvent("enemyBorn", 1300, 1); planner.PlanEvent("newEnemy", IntervalEnemy, 1); } for (int k = 0; k < Strely.Count; k++) { if((Strely[k].ShotBy==temp)&&(strela.BoundingRectangle.Intersects(temp.BoundingRectangle))) { Strely[k].Alive=false; } } VybuchTank((int)temp.PositionX, (int)temp.PositionY); } } } } else { for (int j = 0; j <= 1; j++) { if (strela.CheckCollisionsTank(Players[j])) { if (!Players[j].Indestructable) { Players[j].Lives -= 1; Players[j].Alive = false; if (Players[j].Lives > 0) { planner.PlanEvent("bornPlayer", IntervalPlayer, j + 1); planner.PlanEvent("enemyBorn", 1300, j + 2); } VybuchTank((int)Players[j].PositionX, (int)Players[j].PositionY); } else { Vybuch((int)strela.PositionX, (int)strela.PositionY); } strela.Explode(); Strely.RemoveAt(i); } } } if ((strela.PositionY < Constants.OriginY + strela.Size.Y / 2) || (strela.PositionY > Constants.LevelHeigth + Constants.OriginY - strela.Size.Y / 2) || (strela.PositionX < Constants.OriginX + strela.Size.X / 2) || (strela.PositionX > Constants.LevelWidth + Constants.OriginX - strela.Size.X / 2)) { strela.Alive = false; Vybuch((int)strela.PositionX, (int)strela.PositionY); } strela.Update(); } else { strela.Explode(); Strely.RemoveAt(i--); } } } previousState = Keyboard.GetState(); #endregion } previousState = Keyboard.GetState(); base.Update(gameTime); }
Animation vybuch, reward, enter; //NN #endregion Fields #region Constructors public Engine() { Res = new Resources(Content); this.Constants = new Constants(); numberOfPlayers = 0; graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; LevelLayout = new List<List<int>>(); viewportRect = new Rectangle(0, 0, Constants.ResolutionX, Constants.ResolutionY); //ToDo: resolve enter = new Animation(); menu = new Menu(this, enter, Res); switcher = new Switcher(this,this); planner = new Planner(this,this); //FIXME: naco????? Components.Add(switcher); Components.Add(planner); keyboardBlocked = false; this.Player1 = new Tank(); this.Player2 = new Tank(); Players.Add(Player1); Players.Add(Player2); this.myKeyboard = new Klavesnica(Keys.Space, Keys.Up, Keys.Down, Keys.Left, Keys.Right, Player1); this.myKeyboard2 = new Klavesnica(Keys.Q, Keys.W, Keys.S, Keys.A, Keys.D, Player2); graphics.PreferredBackBufferWidth = Constants.ResolutionX; graphics.PreferredBackBufferHeight = Constants.ResolutionY; }
public void NewTankAnim(int x, int y) { vybuch = new Animation(); vybuch.Initialize(x, y, 90, 90, 8, false, true, 7); vybuch.LoadGraphicsContent(this.spriteBatch, Res.Textures["Vybuch_Narodenie"]); Animations.Add(vybuch); }