Beispiel #1
0
 public Menu(Engine game, Animation enter, Resources R)
 {
     this.game = game;
     cursorState = 0;
     keyboardState = Keyboard.GetState();
     previousState = Keyboard.GetState();
     this.enter = enter;
     Res = R;
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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;
        }
Beispiel #5
0
        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);
        }