//怪物通过事件处理
 private void OnMonsterPass(Game aGame, Monster aMonster)
 {
     FLife--;
     if (FLife == 0)
     {
         FinishGame(false);
         FBornCount = 0;
     }
     RefreshCaption();
 }
 protected override Tower GetTower(Game aGame)
 {
     return new TrapTower(aGame);
 }
 //击杀怪物事件处理
 private void OnMonsterKilled(Game aGame, Monster aMonster)
 {
     MonsterBase m = (MonsterBase)aMonster;
     AddMoneyClip(aMonster.Position, m.Money);
     FMoney += m.Money;
     FKilled += 1;
     RefreshCaption();
 }
 protected abstract Tower GetTower(Game aGame);
 public TrapTower(Game aGame)
     : base(aGame,
     new int[] { 1000, 2000 },
     new int[] { 100, 200 })
 {
 }
 protected override Tower GetTower(Game aGame)
 {
     return new SpeedTower(aGame);
 }
 public Tower GetTower(ref int Money, Game aGame)
 {
     Money -= GetMoney();
     return GetTower(aGame);
 }
 public SpeedTower(Game aGame)
     : base(aGame,
     new int[] { 32, 162, 512, 1250, 2592 },
     new int[] { 20, 40, 60, 80, 100 })
 {
 }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="LevelMoney">升级必备金钱设置</param>
 /// <param name="LevelMoney">升级时间</param>
 public ShootingTower(Game aGame, int[] LevelMoney, int[] LevelUpTime)
 {
     FLevelMoney = LevelMoney;
     FLevelUpTime = LevelUpTime;
     FGame = aGame;
     int MaxShot = GetMaxShot(FLevelMoney.Length);
     FShots = new Shot[MaxShot];
     for (int i = 0; i < MaxShot; i++)
     {
         FShots[i] = new Shot();
     }
 }
 public MultiTower(Game aGame)
     : base(aGame,
     new int[] { 16, 81, 256, 625, 1296 },
     new int[] { 15, 30, 45, 60, 75 })
 {
 }
 public RangeTower(Game aGame)
     : base(aGame,
     new int[] { 150, 300, 600, 1200, 2000 },
     new int[] { 30, 60, 90, 120, 150 })
 {
 }
 protected override Tower GetTower(Game aGame)
 {
     return new MultiTower(aGame);
 }