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(); } } }
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; }