用VS开发一款“飞机大战“单机游戏<C++>

本文详细介绍了一个简单的单机版“飞机大战”游戏的开发过程。通过面向对象的方式,定义了玩家飞机、子弹及不同类型的敌机等游戏元素,并实现了游戏逻辑,包括玩家控制、子弹发射、敌机生成及碰撞检测等功能。

显示界面如上图所示

自己找的背景和飞机素材,先将素材奉上.

 

接下来我先简单分析一下这个单机游戏的运行逻辑:

就像显示界面所显示的那样,我们想要实现的是自己的飞机在发射子弹(子弹在上图没显示),然后当子弹射到敌方飞机,这里设置了两种类型的飞机,如果读者想定义更多类型的,直接添加属性就可以.当子弹射到飞机的时候,飞机的血量减少,就像CS一样,并不一定是一发子弹就死亡,读者可以根据自己喜欢去设置,博主这里设置大飞机的血量是3发子弹,而小飞机的血量是1发子弹,也就是说,当有3发子弹射到大飞机的时候,大飞机就消失,一发子弹小飞机消失.至于其他的动态效果,博主这里暂时不做介绍.具体往下看:

面向对象开发,每一个对象我们都需要给他设置相对应的对象属性,在语言当中,我们将其设置成结构体就可以:

enum My
{
	WIDTH = 500,
	HIGHT = 700,
	BULLET_NUM = 100,//玩家子弹数量
	ENEMY_NUM = 10,//敌机的数量
	BIG,
	SMALL,
};
struct Plane
{
	int x;
	int y;
	bool live;//是否存活
	int width;
	int hight;
	int hp;
	int type;//敌机类型  big small

}player,bull[BULLET_NUM],enemy[ENEMY_NUM];

首先设定了一个联合,用于设置弹出窗口的基本参数和其他属性. 

上面是不是把敌方飞机,自己飞机和自己发射的子弹都定义成了一个结构体.下面我们就可以直接用了.

(x,y)代表的是对象在窗口当中的坐标,width和hight是对象自身的尺寸,而hp是血量,type是博主自己定义了两种敌机类型.布尔类型live判断飞机是否存活状态.

第一步我们应该是要先创建图形窗口

	/*测试
circle(50, 50, 50);//画空心圆
setfillcolor(GREEN);//圆的颜色
fillcircle(100, 100, 50);///实心⚪*/
	//创建图形窗口
	initgraph(WIDTH, HIGHT,SHOWCONSOLE);//宽长

initgraph()函数直接用

第二步加载窗口里面使用到的图片   //无论什么时候用,我们都要进行图片加载的,因此此处我们将其设定到一个函数下,方便之后也可以随时添加和删除.

//把图片加载进程序
IMAGE bk;//背景图
//保存玩家图片
IMAGE img_role;
//保存子弹
IMAGE img_bull;
//
IMAGE img_enemy[4];
void loadImg()
{
	//加载图片
	loadimage(&bk, "D:/program/飞机大战/images/bk.png");
	//加载玩家图片
	loadimage(&img_role, "D:/program/飞机大战/images/fly.png");
	//加载子弹图片
	loadimage(&img_bull, "D:/program/飞机大战/images/子弹.jpg");
	//加载敌机的图片
	loadimage(&img_enemy[0], "D:/program/飞机大战/images/enemy1.png");
	loadimage(&img_enemy[1], "D:/program/飞机大战/images/enemy2.png");
	//loadimage(&img_enemy[2], "D:/program/飞机大战/images/enemy3.jpg");
	//loadimage(&img_enemy[3], "D:/program/飞机大战/images/enemy4.jpg");
}

IMAGE 是easyx里面的一个参数,直接用

此案例当中,需要我们加载的图片有背景图,自己飞机图,子弹图,敌方飞机1和敌方飞机2,如果读者也自己添加第三台和第四台敌机,也可以直接添加,不过要注意,当一种对象,存在多个类型的时候,要采用数组将其存储,方便之后进行使用.

第三步,要干嘛?设置好窗口了,加载完图片了,是不是要把图片添加进去了?

那图片添加到哪里去?怎么添加?哪一种图片应该添加在哪里呢?

这里我们是不是首先要初始化一下图片的基本属性?of course,买衣服我总的知道我适合穿多大尺码的衣服吧?

void gameinit()//初始化数据
{
	player.x = WIDTH / 2;
	player.y = HIGHT - 120;
	player.live = true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值