# 基于C#开发的模仿微信飞机大战游戏
> 转载
>
> **作者:[周旭龙](http://www.cnblogs.com/edisonchou/)**
>
> **出处:[http://edisonchou.cnblogs.com/](http://edisonchou.cnblogs.com/)**
>
> **本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。**
## 一、关于飞机大战
要说微信中最火爆的小游戏是哪款,可能既不是精心打造的 3D 大作,也不是《植物大战僵尸 2》,而是微信 5.0 刚开启时的《飞机大战》。
![](https://www.writebug.com/myres/static/uploads/2021/12/5/9b99d7b97c671155a2925f52a3fd013c.writebug)
就是这样一款铅笔手绘风格的简单到不能再简单的“**打飞机**”游戏,让国内的微信用户一次又一次地尝试,并表示似乎又找回了童年时玩电子游戏的那份单纯的快乐。至于游戏的玩法都不用加以介绍,就是简单的“***打飞机***”。
## 二、关于游戏设计
### 2.1 总结游戏印象
(1)一个玩家飞机,多个电脑飞机
①![](https://www.writebug.com/myres/static/uploads/2021/12/5/2e53b2f482f2d1ec4051a39b8a826680.writebug) ②![](https://www.writebug.com/myres/static/uploads/2021/12/5/920813c88dc1d5629b9a3fcc4a1d3df1.writebug) ③![](https://www.writebug.com/myres/static/uploads/2021/12/5/a236db444438ab209f9ee99c692b6fa8.writebug) ④![](https://www.writebug.com/myres/static/uploads/2021/12/5/ce31aed5efe27214ed9aef36b4330111.writebug)
(2)玩家飞机可以发射子弹,电脑飞机也可以发射子弹
①![](https://www.writebug.com/myres/static/uploads/2021/12/5/72311bedb813d24d92bdf278572ae258.writebug) ②![](https://www.writebug.com/myres/static/uploads/2021/12/5/88321e69f715495b065872dfbe3e6c3a.writebug)
(3)玩家和电脑飞机被击中后有爆炸效果,并且有一定几率出现大型飞机
①![](https://www.writebug.com/myres/static/uploads/2021/12/5/778209a4812ed30add84286910991626.writebug) ②![](https://www.writebug.com/myres/static/uploads/2021/12/5/40da807da04f0bc0f01f6681e2cfae5f.writebug)
### 2.2 总结设计思路
#### **(1)万物皆对象**
在整个游戏中,我们看到的所有内容,我们都可以理解为游戏对象(GameObject),每一个游戏对象,都由一个单独的类来创建;在游戏中主要有三类游戏对象:一是飞机,二是子弹,三是背景;其中,飞机又分为玩家飞机和电脑飞机,子弹又分为玩家子弹和电脑子弹。于是,我们可以对飞机进行抽象形成一个抽象父类:PlaneBase,然后分别创建两个子类:PlanePlayer 和 PlaneEnemy;然后对子弹进行抽象形成一个抽象类:BulletBase,然后分别创建两个子类:BulletPlayer 和 BulletEnemy。但是,我们发现这些游戏对象都有一些共同的属性和方法,例如 X,Y 轴坐标,长度和宽度,以及绘制(Draw())和移动(Move())的方法,这时我们可以设计一个抽象类,形成了 GameObject 类:将共有的东西封装起来,减少开发时的冗余代码,提高程序的可扩展性,符合面向对象设计的思路:
![](https://www.writebug.com/myres/static/uploads/2021/12/5/42b82d6565bcd2e4dc588416066f2a5f.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/5/aface1ec07e16f543a262c1cf9c81d11.writebug)
#### **(2)计划生育好**
在整个游戏中,我们的玩家飞机对象只有一个,也就是说在内存中只需要存一份即可。这时,我们想到了伟大的计划生育政策,于是我们想到了使用单例模式。借助单例模式,可以保证只生成一个玩家飞机的实例,即为程序提供一个全局访问点,避免重复创建浪费不必要的内存。当然,除了玩家飞机外,我们的电脑飞机集合、子弹集合等集合对象实例也保证只有一份存储,降低游戏开销;
![](https://www.writebug.com/myres/static/uploads/2021/12/5/d2b316382f9a417c73538d5cf3491bd2.writebug)
#### (3)对象的运动
在整个游戏过程中,玩家可以通过键盘上下左右键控制玩家飞机的上下左右运动,而飞机的运动本质上还是改变游戏对象的 X 轴和 Y 轴的坐标,然后一直不间断地在窗体上重绘游戏对象。相比玩家飞机的移动,电脑飞机的移动则完全是通过程序中设置的随机函数控制左右方向移动的,而玩家飞机发出的子弹执行的运动则是从下到上,而电脑飞机发出的子弹执行的运动则是从上到下。
![](https://www.writebug.com/myres/static/uploads/2021/12/5/e681b61ab2bea6bada1dee084c5fc318.writebug)
#### **(4)设计流程图**
**![](https://www.writebug.com/myres/static/uploads/2021/12/5/50ac33cecf6ab9b9fd52cf36bba9fd5c.writebug)**
## 三、关键代码实现
### 3.1 客户端开发
#### (1)设计 GameObject 类:封装所有游戏对象的公有属性
```
/// <summary>
/// 抽象类:游戏对象基类
/// </summary>
public abstract class GameObject
{
public int X
{
get;
set;
}
public int Y
{
get;
set;
}
public int Width
{
get;
set;
}
public int Height
{
get;
set;
}
public int Speed
{
get;
set;
}
public int Life
{
get;
set;
}
public Direction Dir
{
get;
set;
}
public GameObject(int x, int y, int width, int height, int speed, int life, Direction dir)
{
this.X = x;
this.Y = y;
this.Width = width;
this.Height = height;
this.Speed = speed;
this.Life = life;
this.Dir = dir;
}
public GameObject(int x, int y)
{
this.X = x;
this.Y = y;
}
// 实例方法:返回所在矩形区域用于碰撞检测
public Rectangle GetRectangle()
{
return new Rectangle(this.X, this.Y, this.Width, this.Height);
}
// 抽象方法:游戏对象的绘制各不相同
public abstract void Draw(Graphics g);
// 虚方法:游戏对象的移动各不相同
public virtual 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;
}
// 移动之后判断是否超出了边界
if (this.X <= 0)
{
this.X = 0;
}
if (this.X >= 380)
{
this.X = 380;
}
if (this.Y <= 0)
{
this.Y = 0;
}
if (this.Y >= 670)
{
this.Y = 670;
}
}
}
```
一切皆对象,这里封装了游戏对象:飞机、子弹以及其他游戏对象共有的属性,以及两个抽象方法,让对象们(飞机?子弹?爆炸效果?等)自己去实现。
#### (2)设计 SingleObject 类:保证游戏中的类都只有一个实例
```
/// <summary>
/// 单例模式类
/// </summary>
public class SingleObject
{
private SingleObject()
没有合适的资源?快使用搜索试试~ 我知道了~
基于C#开发的模仿微信飞机大战游戏【100011538】
共141个文件
png:46个
cs:26个
wav:13个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 27 浏览量
2023-04-04
09:22:51
上传
评论
收藏 16.74MB ZIP 举报
温馨提示
在整个游戏中,我们看到的所有内容,我们都可以理解为游戏对象(GameObject),每一个游戏对象,都由一个单独的类来创建,将共有的东西封装起来,减少开发时的冗余代码,提高程序的可扩展性,符合面向对象设计的思路。
资源推荐
资源详情
资源评论
收起资源包目录
基于C#开发的模仿微信飞机大战游戏【100011538】 (141个子文件)
DesignTimeResolveAssemblyReferencesInput.cache 14KB
DesignTimeResolveAssemblyReferencesInput.cache 7KB
MyPlaneGame.Client.csproj.GenerateResource.Cache 4KB
MyPlaneGame.Client.csprojResolveAssemblyReference.cache 2KB
MyPlaneGame.Server.csprojResolveAssemblyReference.cache 2KB
DesignTimeResolveAssemblyReferences.cache 1KB
MyPlaneGame.Server.csproj.GenerateResource.Cache 980B
DesignTimeResolveAssemblyReferences.cache 863B
ClassDiagram.cd 5KB
App.config 235B
MyPlaneGame.Client.exe.config 235B
MyPlaneGame.Client.vshost.exe.config 235B
Resources.Designer.cs 29KB
MainForm.cs 12KB
ServerForm.cs 10KB
ServerForm.Designer.cs 9KB
SingleObject.cs 7KB
MainForm.Designer.cs 6KB
PlaneEnemy.cs 6KB
Resources.Designer.cs 3KB
GameObject.cs 3KB
BoomEnemy.cs 3KB
BulletBase.cs 2KB
PlanePlayer.cs 1KB
AssemblyInfo.cs 1KB
AssemblyInfo.cs 1KB
BoomPlayer.cs 1KB
Settings.Designer.cs 1KB
Settings.Designer.cs 1KB
GameTitle.cs 993B
GameBackground.cs 966B
BulletEnemy.cs 760B
PlaneBase.cs 678B
BulletPlayer.cs 536B
Program.cs 483B
Program.cs 481B
BoomBase.cs 361B
Direction.cs 279B
MyPlaneGame.Client.csproj 10KB
MyPlaneGame.Server.csproj 4KB
Properties.Resources.Designer.cs.dll 14KB
MyPlaneGame.Client.exe 4.59MB
MyPlaneGame.Client.exe 4.59MB
MyPlaneGame.Server.exe 34KB
MyPlaneGame.Server.exe 34KB
MyPlaneGame.Client.vshost.exe 22KB
MyPlaneGame.Server.vshost.exe 22KB
GameMaster.ico 17KB
LICENSE 1KB
MyPlaneGame.Server.vshost.exe.manifest 479B
README.md 25KB
game_music.mp3 115KB
game_over.mp3 14KB
get_double_laser.mp3 13KB
enemy1_down.mp3 13KB
big_spaceship_flying.mp3 12KB
enemy0_down.mp3 11KB
use_bomb.mp3 10KB
out_porp.mp3 10KB
get_bomb.mp3 9KB
enemy2_down.mp3 9KB
achievement.mp3 9KB
bullet.mp3 8KB
button.mp3 7KB
MyPlaneGame.Client.pdb 110KB
MyPlaneGame.Client.pdb 110KB
MyPlaneGame.Server.pdb 36KB
MyPlaneGame.Server.pdb 36KB
bg.png 418KB
loading.png 154KB
enemy2_down5.png 74KB
background.png 67KB
enemy2_down4.png 66KB
enemy2_down3.png 59KB
gameover.png 58KB
enemy2_down2.png 52KB
enemy2_down1.png 47KB
enemy2_hit.png 45KB
enemy2_n2.png 42KB
enemy2.png 42KB
name.png 32KB
button_nor.png 29KB
button_p.png 28KB
progress.png 28KB
plane.png 24KB
bullet.png 23KB
hero_blowup_n3.png 18KB
hero_blowup_n2.png 16KB
hero_blowup_n1.png 15KB
enemy1_down3.png 13KB
hero1.png 13KB
hero2.png 12KB
icon72x72.png 12KB
enemy1_down2.png 11KB
enemy1_down1.png 10KB
enemy1_hit.png 9KB
enemy2_down6.png 9KB
enemy1.png 8KB
prop_type_1.png 7KB
New Atlas.png 7KB
共 141 条
- 1
- 2
资源评论
神仙别闹
- 粉丝: 2680
- 资源: 7667
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 课设毕设基于SSM的农产品供销服务系统-LW+PPT+源码可运行.zip
- 课设毕设基于SSM的高校四六级报名管理系统-LW+PPT+源码可运行.zip
- 课设毕设基于SSM的高校二手交易平台-LW+PPT+源码可运行.zip
- 课设毕设基于SSM的毕业生就业信息管理系统-LW+PPT+源码可运行
- ZodGame.DLL
- 编译原理是什么以及学习了解编译原理的意义
- 0dc10bd6f58239f070aa65979b792057.cpp
- 什么是协同过滤算法以及学习了解协同过滤算法的意义是什么
- 什么是汉诺塔python以及学习汉诺塔python的意义
- 1plusx_1_proj_test_231125_答案.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功