public AI( Grid _grid, Grid _gridTopBar, Player _player, int difficulty) { aiTower = new Tower(2000, 50, 250, 1, false, _grid, _gridTopBar); player = _player; grid = _grid; switch (difficulty) { case 1: _op = 0.6; _chanceToGenSoldier = 120000; _chanceToUpgradeTower = 100000; _towerLVlimit = 1; _soldierLimit = 10; _canCounterAttack = false; break; case 2: _op = 1; _chanceToGenSoldier = 85000; _chanceToUpgradeTower = 50000; _towerLVlimit = 3; _soldierLimit = 15; _canCounterAttack = true; break; case 3: _op = 1.5; _chanceToGenSoldier = 60000; _chanceToUpgradeTower = 10000; _towerLVlimit = 5; _soldierLimit = 15; _canCounterAttack = true; break; case 4: _op = 3; _chanceToGenSoldier = 50000; _chanceToUpgradeTower = 1000; _towerLVlimit = 10; _soldierLimit = 20; _canCounterAttack = true; break; default: MessageBox.Show("AI Difficulty Error"); break; } }
public Player( Grid grid1, Grid _gridTopBar) { grid = grid1; _money = 5000; // 初始資金 _towerUpgradePrice = 100; //塔升級費用 moneyGainSpeed = 10; myTower = new Tower(2000, 50, 250, 1, true, grid1, _gridTopBar); lbMoney = new Label(); lbMoney.Margin = new Thickness(938, 0, 0, 270); lbMoney.VerticalAlignment = VerticalAlignment.Bottom; lbMoney.HorizontalAlignment = HorizontalAlignment.Left; lbMoney.Width = 120; lbMoney.Height = 25; lbMoney.HorizontalContentAlignment = HorizontalAlignment.Right; lbMoney.BorderBrush = System.Windows.Media.Brushes.Black; lbMoney.FontWeight = FontWeights.Bold; lbMoney.BorderThickness = new System.Windows.Thickness(1, 1, 1, 1); grid1.Children.Add(lbMoney); }
public void MaintainSolidersPosition(List<Soldier> enemyS, Tower enemyTower) { for (int i = 0; i <soldier.Count; i++) { // 每個士兵該往前的往前,該打的打 soldier[i].Move(enemyS, enemyTower); // Checking life if (soldier[i].HP <= 0) { grid.Children.Remove(soldier[i].LifeCheck()); soldier.RemoveAt(i); } } for (int i = 0; i < enemyS.Count; i++) { if (enemyS[i].HP <= 0) { EarnMoney(enemyS[i].PRICE); grid.Children.Remove( enemyS[i].LifeCheck()); enemyS.RemoveAt(i); } } }
public void MaintainSolidersPosition(List<Soldier> enemyS, Tower enemyTower) { for (int i = 0; i <soldier.Count; i++) { soldier[i].Move(enemyS, enemyTower); } }
public override bool Attack(Tower Enemy) { int movePerStepX = this.RANGE / 10 ; if (Math.Abs(Enemy.POSITION - this.POSITION) <= this.RANGE) { bool isShooted = false; //如果已開槍,則在未打到目標前 isShooted == true if (bullet == null && counter == this.APS-15) { grid.Children.Add(BulletShow()); //把子彈放進Grid } if (counter >= this.APS-15) isShooted = true; if ((++counter % this.APS) == 0) //控制攻速 { counter = 0; Enemy.GetHurt(this.ATK); grid.Children.Remove(bullet); bullet = null; } else { if (bullet != null && isShooted) { if (isEnemy) { bullet.Margin = new System.Windows.Thickness(0, 0, bullet.Margin.Right - movePerStepX, bullet.Margin.Bottom ); } else { bullet.Margin = new System.Windows.Thickness(0, 0, bullet.Margin.Right + movePerStepX, bullet.Margin.Bottom ); } } } if (!isAttack) //判斷是否需要換gif圖 { if (imgSourceAttack == null) imgSourceAttack = imgSourceMove.Replace("Move", "Attack"); //MessageBox.Show(imgSourceAttack); var _image = new BitmapImage(); _image.BeginInit(); _image.UriSource = new Uri(imgSourceAttack, UriKind.Absolute); _image.EndInit(); ImageBehavior.SetAnimatedSource(Image, _image); Image.Width = Image.ActualWidth + 15; spImg.Width = Image.Width; isAttack = true; } return true; } else { // if (bullet != null) grid.Children.Remove(bullet); bullet = null; return false; } }
public void Move(List<Soldier> enemyS, Tower enemyTower) { if (!Attack(enemyS) && !Attack(enemyTower)) { if (isAttack) //判斷是否要換gif { if (_imageMove == null) { _imageMove = new BitmapImage(); _imageMove.BeginInit(); _imageMove.UriSource = new Uri(imgSourceMove, UriKind.Absolute); _imageMove.EndInit(); } ImageBehavior.SetAnimatedSource(Image, _imageMove); Image.Width = Image.ActualWidth - 15; spImg.Width = Image.Width; } if (isEnemy) { spImg.Margin = new Thickness(spImg.Margin.Left + SPEED, spImg.Margin.Top, spImg.Margin.Right - SPEED, spImg.Margin.Bottom); POSITION = spImg.Margin.Right; } else { spImg.Margin = new Thickness(spImg.Margin.Left - SPEED, spImg.Margin.Top, spImg.Margin.Right + SPEED, spImg.Margin.Bottom); POSITION = spImg.Margin.Right + spImg.Width ; } isAttack = false; } }
public virtual bool Attack(Tower Enemy) { if (Math.Abs(Enemy.POSITION - this.POSITION) <= this.RANGE) { if ((++counter % APS) == 0) { Enemy.GetHurt(ATK); counter = 0; } if (!isAttack) //判斷是否需要換gif圖 { if (imgSourceAttack == null) imgSourceAttack = imgSourceMove.Replace("Move", "Attack"); //MessageBox.Show(imgSourceAttack); if (_imageAttack == null) { _imageAttack = new BitmapImage(); _imageAttack.BeginInit(); _imageAttack.UriSource = new Uri(imgSourceAttack, UriKind.Absolute); _imageAttack.EndInit(); } // Image.Source = _imageAttack; ImageBehavior.SetAnimatedSource(Image, _imageAttack); Image.Width = Image.ActualWidth + 15; spImg.Width = Image.Width; isAttack = true; } return true; } return false; }