private void timer_EnemyAppearControl_Tick(object sender, EventArgs e) //定时器生成敌机 { Obj.GetObj().time++; while (ListIndex <= LevelNow.listenemyAppears.Count - 1 && LevelNow.listenemyAppears[ListIndex].Time <= Obj.GetObj().time) { if (LevelNow.listenemyAppears[ListIndex].Type > 0) { Obj.GetObj().AddGameObj(new PlaneEnemy(LevelNow.listenemyAppears[ListIndex].Type, LevelNow.listenemyAppears[ListIndex].X, LevelNow.listenemyAppears[ListIndex].Y, planePlayer)); ListIndex++; } else if (LevelNow.listenemyAppears[ListIndex].Type == -1) { PlaneEnemy.StayY = LevelNow.listenemyAppears[ListIndex].X; ListIndex++; } break; } if (ListIndex >= LevelNow.listenemyAppears.Count && Obj.GetObj().listplaneEnemies.Count == 0) { Game_Die die = new Game_Die(); Obj.IsDead = true; Obj.GetObj().time = 0; Obj.GetObj().ClearData(); Obj.PlayerProperty += (int)(Obj.GetObj().myScores.Score * 0.5); Obj.GameRun = false; die.Show(); } }
//碰撞检测 public void Crash() { //判断玩家子弹是否打中敌人 for (int i = 0; i < listPlayerBullet.Count; i++) { for (int j = 0; j < listplaneEnemies.Count; j++) { if (listPlayerBullet[i].GetRectangle().IntersectsWith(listplaneEnemies[j].GetRectangle())) //判断玩家子弹矩形是否和敌人飞机矩形相交 { listplaneEnemies[j].HP -= listPlayerBullet[i].Power; //当子弹射击到目标时,HP减去武器伤害值 listplaneEnemies[j].Explosion(); //调用敌人类的爆炸函数,判断敌人是否死亡 listPlayerBullet.RemoveAt(i); //销毁射击到敌人身上的子弹 break; } } } //判断敌人子弹是否打中玩家 for (int i = 0; i < listenemyBullets.Count; i++) { if (listenemyBullets[i].GetRectangle().IntersectsWith(this.PP.GetRectangle()))//判断敌人子弹矩形是否和玩家矩形相交 { PP.HP -= listenemyBullets[i].Power; if (PP.HP < 0) { this.PP.Explosion(); Game_Die die = new Game_Die(); die.Show(); Obj.IsPause = true; } listenemyBullets.RemoveAt(i); //销毁子弹 break; } } //判断玩家是否撞到敌人飞机 for (int i = 0; i < listplaneEnemies.Count; i++) { if (listplaneEnemies[i].GetRectangle().IntersectsWith(this.PP.GetRectangle())) { listplaneEnemies[i].HP = listplaneEnemies[i].HP - 10; PP.HP -= 10; if (PP.HP <= 0) { this.PP.Explosion(); Game_Die die = new Game_Die(); die.Show(); Obj.IsPause = true; } listplaneEnemies[i].Explosion(); break; } } //判断供给是否与玩家接触 for (int i = 0; i < listSupllies.Count; i++) { if (listSupllies[i].GetRectangle().IntersectsWith(this.PP.GetRectangle())) { if (listSupllies[i] is Medkit) { this.PP.HP += (listSupllies[i] as Medkit).MedHp; if (PP.HP > MaxHP) { PP.HP = MaxHP; } listSupllies.RemoveAt(i); break; } else { //此处放武器buff相关处理代码 this.PP.BulletType = doubleFire; listSupllies.RemoveAt(i); break; } } } }