/// <summary> ///游戏初始化 /// </summary> public void InitialGame() { //首先需要初始化的是我们的背景 SingleObject.GetSingle().AddGameObject(new BackGround(0, -850, 5)); //初始化英雄飞机 SingleObject.GetSingle().AddGameObject(new PlaneHero(100, 100, 5, 3, GameObject.Direction.Up)); }
public override void Draw(Graphics g) { //当爆炸图片绘制到窗体的时候,需要根据当前飞机的类型来绘制 switch (this.Type) { case 0: for (int i = 0; i < img1.Length; i++) { g.DrawImage(img1[i], this.X, this.Y); } break; case 1: for (int i = 0; i < img2.Length; i++) { g.DrawImage(img2[i], this.X, this.Y); } break; case 2: for (int i = 0; i < img3.Length; i++) { g.DrawImage(img3[i], this.X, this.Y); } break; } //播放完爆炸图片后,应该被销毁 SingleObject.GetSingle().RemoveGame(this); }
} //Fire() public override void IsOver() { //实现敌机死亡的方法 if (this.Life <= 0) { //敌人飞机坠毁,应该把敌机从游戏中移除 SingleObject.GetSingle().RemoveGame(this); //播放敌机爆炸的图片 SingleObject.GetSingle().AddGameObject(new EnemyBoom(this.X, this.Y, this.EnemyType)); //敌人发生爆炸,给玩家加分,根据不同的敌机,给玩家不同的分数 switch (this.EnemyType) { case 0: SingleObject.GetSingle().Score += 100; break; case 1: SingleObject.GetSingle().Score += 200; break; case 2: SingleObject.GetSingle().Score += 300; break; } } }
public override void Draw(Graphics g) { for (int i = 0; i < imgs.Length; i++) { g.DrawImage(imgs[i], this.X, this.Y); } //绘制完成后,应该 将爆炸的图片移除 SingleObject.GetSingle().RemoveGame(this); }
private void Form1_Paint(object sender, PaintEventArgs e) { //当窗口重绘时,我们就绘制我们的背景 SingleObject.GetSingle().Draw(e.Graphics); string score = SingleObject.GetSingle().Score.ToString(); //绘制玩家的分数 e.Graphics.DrawString(score, new Font("宋体", 20, FontStyle.Bold), Brushes.Red, new Point(0, 0)); }
private void timerBG_Tick(object sender, EventArgs e) { this.Invalidate(); //每50毫秒刷新一次 //不停的判断敌机的数量 //获取敌方飞机的数量 int count = SingleObject.GetSingle().listPlaneEnemy.Count; if (count <= 1) { //再次对敌机进行初始化 InitialPlaneEnemy(); } //不停的进行碰撞检测 SingleObject.GetSingle().PZJC(); }
//初始化敌方飞机 public void InitialPlaneEnemy() { //初始人敌方飞机 for (int i = 0; i < 4; i++) { SingleObject.GetSingle().AddGameObject(new PlaneEnemy(r.Next(0, this.Width), -200, r.Next(0, 2))); } //不应该每次都出现大飞机 if (r.Next(0, 100) > 80) { SingleObject.GetSingle().AddGameObject(new PlaneEnemy(r.Next(0, this.Width), -200, 2)); } }
private void Form1_MouseDown(object sender, MouseEventArgs e) { //判断玩家是否按下了左键 //如果玩家按下了左键,调用玩家飞机发射子弹的方法 SingleObject.GetSingle().PH.Fire(); }
private void Form1_MouseMove(object sender, MouseEventArgs e) { //当鼠标在窗体移动的时候,让飞机跟着鼠标的移动而移动 SingleObject.GetSingle().PH.MouseMove(e); //调用玩家飞机的mouseMove方法 }
} //Move() public void Fire() { SingleObject.GetSingle().AddGameObject(new EnemyZiDan(this, 20, 1)); } //Fire()
public override void Move() { //根据游戏对象的方向进行移动 switch (Dir) { case Direction.Up: this.Y -= this.Speed; break; case Direction.Down: this.Y += this.Speed; break; case Direction.Left: this.X -= this.Speed; break; case Direction.Right: this.X += this.Speed; break; default: break; } //移动完成后,判断一下游戏对象是否超过窗体 if (this.X <= 0) { this.X = 0; } if (this.X >= 400) { this.X = 400; } if (this.Y <= 0) { this.Y = 0; } if (this.Y >= 780) { this.Y = 1400; //敌人飞机到底部时,让敌人飞机离开窗体 //同时当敌机离开窗体时,我们应该销毁敌机 SingleObject.GetSingle().RemoveGame(this); } //当敌人的飞机类型是0 ,并且纵坐标>=某个值之后,我们不停的更换他的横坐标 if (this.EnemyType == 0 && this.Y >= 200) { if (this.X >= 0 && this.X <= 240) { //表示当前的小飞机在左边的范围内 //增加当前飞机的X值 this.X += r.Next(0, 50); } else { this.X -= r.Next(0, 50); } } else //如果飞机是1,2大飞机 { //大飞机不更改坐标,改速度 this.Speed += 1; } //百分之三十概率发射子弹 if (r.Next(0, 100) > 90) { Fire(); } } //Move()
public override void IsOver() { //实现英雄飞机死亡 SingleObject.GetSingle().AddGameObject(new HeroBoom(this.X, this.Y)); }
//玩家飞机发射子弹的方法 public void Fire() { //初始化我们玩家子弹到游戏中 SingleObject.GetSingle().AddGameObject(new HeroZiDan(this, 10, 1)); }