public Player(ContentManager content)
        {
            mapManager = new MapManager(content);
            _map = mapManager.CreateMap(Global.LEVEL);
            towerButtons = Data.loadTowerButton(content);
            waveManager = Data.loadWave(Global.LEVEL);
            SetUpPanel(content);
            coin_tex = content.Load<Texture2D>(@"Sprite\Image\coin");
            coin = new NormalSprite(coin_tex, 0, 0, coin_tex.Width, coin_tex.Height);

            speed_1_tex = content.Load<Texture2D>(@"Sprite\Image\Menu\button_x1");
            NormalSprite speed_1 = new NormalSprite(speed_1_tex, 685, 5, speed_1_tex.Width / 2, speed_1_tex.Height);
            increaseSpeed_1 = new Checkbox(speed_1, 2, Global.NEW_GAME_SPEED == 1 ? true : false);
            speedButtonList.Add(increaseSpeed_1);

            skip_tex = content.Load<Texture2D>(@"Sprite\Image\Menu\button_skip");
            NormalSprite speed_2 = new NormalSprite(skip_tex, 720, 5, skip_tex.Width / 2, skip_tex.Height);
            increaseSpeed_2 = new Checkbox(speed_2, 2, Global.NEW_GAME_SPEED == 2 ? true : false);
            speedButtonList.Add(increaseSpeed_2);

            speed_3_tex = content.Load<Texture2D>(@"Sprite\Image\Menu\button_x3");
            NormalSprite speed_3 = new NormalSprite(speed_3_tex, 755, 5, speed_3_tex.Width / 2, speed_3_tex.Height);
            increaseSpeed_3 = new Checkbox(speed_3, 2, Global.NEW_GAME_SPEED == 3 ? true : false);
            speedButtonList.Add(increaseSpeed_3);

            _content = content;
        }
        public void Update(GameTime gameTime)
        {
            for (int i = 0; i < speedButtonList.Count; i++)
            {
                speedButtonList[i].Update(gameTime);

                int value = speedButtonList[i].pressCheckbox(false);
                switch (value)
                {
                    case 1:
                        Global.OLD_GAME_SPEED = Global.NEW_GAME_SPEED;
                        Global.NEW_GAME_SPEED = i + 1;
                        switch (Global.OLD_GAME_SPEED)
                        {
                            case 1:     // x 1
                                if (Global.NEW_GAME_SPEED == 2)
                                {
                                    Global.GAME_SPEED = 2;
                                    increaseSpeed_1.setFrame(0);
                                    increaseSpeed_3.setFrame(0);
                                }
                                if (Global.NEW_GAME_SPEED == 3)
                                {
                                    Global.GAME_SPEED = 4;
                                    increaseSpeed_1.setFrame(0);
                                    increaseSpeed_2.setFrame(0);
                                }
                                break;

                            case 2:     // x 2
                                if (Global.NEW_GAME_SPEED == 1)
                                {
                                    increaseSpeed_2.setFrame(0);
                                    increaseSpeed_3.setFrame(0);
                                    Global.GAME_SPEED = 1;
                                }
                                if (Global.NEW_GAME_SPEED == 3)
                                {
                                    increaseSpeed_1.setFrame(0);
                                    increaseSpeed_2.setFrame(0);
                                    Global.GAME_SPEED = 4;
                                }
                                break;
                            case 3:     // x 4
                                if (Global.NEW_GAME_SPEED == 1)
                                {
                                    increaseSpeed_2.setFrame(0);
                                    increaseSpeed_3.setFrame(0);
                                    Global.GAME_SPEED = 1;
                                }
                                if (Global.NEW_GAME_SPEED == 2)
                                {
                                    increaseSpeed_1.setFrame(0);
                                    increaseSpeed_3.setFrame(0);
                                    Global.GAME_SPEED = 2;
                                }
                                break;
                        }
                        break;
                }
            }

            if (isPanelVisible)
            {
                for (int i = 0; i < menuButtonList.Count; i++)
                {
                    menuButtonList[i].Update(gameTime);

                    int id = menuButtonList[i].getButtonPressedID();
                    switch (id)
                    {
                        case 1:     // quay về menu chính
                            if (isLose == false)
                                Global.LEVEL += 1;

                            Data.saveDataBeforeQuit();
                            towers.Clear();
                            Global.SCREEN = GameScreen.MENU;
                            Global.playMusic(SoundManager.mu_menuSound, true);
                            break;

                        case 2:
                            towers.Clear();
                            if (isLose == false)
                            {
                                Global.LEVEL += 1;
                            }
                            _map = mapManager.CreateMap(Global.LEVEL);
                            waveManager = Data.loadWave(Global.LEVEL);
                            towerButtons = Data.loadTowerButton(_content);
                            waveManager.PlayerWin = false;
                            isLose = false;
                            Global.HEALTH = 100;
                            Global.playMusic(SoundManager.mu_backgroundSound, true);
                            break;
                    }
                }
            }

            if (waveManager.PlayerWin == false && isLose == false)
            {
                if (waveManager.IsNewWaveStart)
                {
                    enemies = Global.ENEMIES;
                }
                mouseState = Mouse.GetState();

                chiSoCot = (int)(mouseState.X / Global.CELL_WIDTH);
                chiSoDong = (int)(mouseState.Y / Global.CELL_HEIGHT);

                viTriDong = (int)(chiSoDong * Global.CELL_WIDTH);
                viTriCot = (int)(chiSoCot * Global.CELL_HEIGHT);

                waveManager.Update(gameTime);

                if (waveManager.PlayerWin == true)
                    isPanelVisible = true;

                #region Chọn tháp và rê vào vị trí muốn đặt, xuất hiện tháp nếu đủ coin
                for (int i = 0; i < towerButtons.Count; i++)
                {
                    towerButtons[i].Update(gameTime);

                    int towerIdx = towerButtons[i].getButtonPressedID(true);

                    if (towerIdx >= 0)
                        towerIndexSelected = towerIdx;

                    if (towerIndexSelected >= 0)
                    {
                        if (mouseState.LeftButton == ButtonState.Pressed)
                        {
                            isDragging = true;
                            chiSoCot = (int)(mouseState.X / Global.CELL_WIDTH);
                            chiSoDong = (int)(mouseState.Y / Global.CELL_HEIGHT);

                            viTriDong = (int)(chiSoDong * Global.CELL_WIDTH);
                            viTriCot = (int)(chiSoCot * Global.CELL_HEIGHT);

                            preview = BuildingManager.SampleBuilding[towerIndexSelected].sprite;
                            preview.Left = viTriCot;
                            preview.Top = viTriDong - (preview.Texture.Height - Global.CELL_HEIGHT);
                            oldState = mouseState;
                        }
                        mouseState = Mouse.GetState();
                        if (mouseState.LeftButton == ButtonState.Released && oldState.LeftButton == ButtonState.Pressed)
                        {
                            isDragging = false;
                            chiSoCot = (int)(mouseState.X / Global.CELL_WIDTH);
                            chiSoDong = (int)(mouseState.Y / Global.CELL_HEIGHT);

                            viTriDong = (int)(chiSoDong * Global.CELL_WIDTH);
                            viTriCot = (int)(chiSoCot * Global.CELL_HEIGHT);

                            if (laViTriHopLe())
                            {
                                Tower tower = (Tower)BuildingManager.CreateBuilding(towerIndexSelected);
                                if (Global.COIN >= tower.Cost && tower.LevelReq <= Global.LEVEL)
                                {
                                    tower.sprite.Left = viTriCot;
                                    tower.sprite.Top = viTriDong - (tower.sprite.Texture.Height - Global.CELL_HEIGHT);
                                    towers.Add(tower);
                                    Global.COIN -= tower.Cost;
                                }
                            }
                            towerIndexSelected = -1;
                        }
                    }
                }
                #endregion

                foreach (Tower tower in towers)
                {
                    if (tower.TargetEnemy == null)
                    {
                        tower.getClosestEnemy(enemies);
                    }
                    tower.Update(gameTime);
                }

                oldState = mouseState;

                if (Global.HEALTH <= 0)
                {
                    Global.HEALTH = 0;
                    isPanelVisible = true;
                    isLose = true;
                    if (Global.SOUNDEFFECT_ENABLE)
                        SoundManager.so_failSound.Play();
                }
            }
        }
Exemple #3
0
        public static WaveManager loadWave(int level)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(@"Data/waves.dat");

            XmlNodeList waves = doc.SelectNodes("//level[@value=" + level + "]/wave");
            int[] numberOfDot = new int[waves.Count];
            int[] timeBetweenDot = new int[waves.Count];
            int[] numberOfEnemy = new int[waves.Count];
            float[] timeEnemyAppear = new float[waves.Count];

            for (int i = 0; i < waves.Count; i++)
            {
                int min = int.Parse(waves[i].Attributes["minTimeBetweenDot"].Value);
                int max = int.Parse(waves[i].Attributes["maxTimeBetweenDot"].Value);
                timeBetweenDot[i] = rand.Next(min, max);

                max = int.Parse(waves[i].Attributes["maxDot"].Value);
                numberOfDot[i] = rand.Next(3, max);

                min = int.Parse(waves[i].Attributes["minEnemy"].Value);
                max = int.Parse(waves[i].Attributes["maxEnemy"].Value);
                numberOfEnemy[i] = rand.Next(min, max);

                timeEnemyAppear[i] = float.Parse(waves[i].Attributes["timeAppear"].Value);
            }

            WaveManager wave = new WaveManager(Data.loadMap(level), waves.Count, 30, numberOfDot, timeBetweenDot, numberOfEnemy, timeEnemyAppear);

            return wave;
        }