团队项目(2.1) -- 飞机躲避小游戏

    这个项目开始于2019年下半年,也就是大二上长学期的时候,当时申报了一个校级srtp项目,自拟题为“基于瞳孔检测的注意力检测方法研究”,而这一部分是作为最后眼控展示的一个小平台。有趣的是,当时开题答辩第一个上台,被怼得要死,中期答辩也是,好在结题答辩在我一波疯狂舔审核老师的操作后,竟然混了个校级优秀项目,后来还在大学生创新创业成果展贴了咱的展板(我的大头...),不过yysy,现在看起来这项目确实很low哈哈哈哈哈。
    这个项目估计会分成三章更完:游戏部分、人脸检测和瞳孔检测部分
以及两个统一的完整展示。下面是第一部分正文:

一、开发平台及辅助工具

开发平台:Visual Studio
编程语言:C++ / C语言
界面开发:EasyX(点击访问

二、游戏介绍
1、主界面

    启动游戏之后主界面如下图所示;

20899536-fde580d984685452.png
主界面
    通过按下键盘最右边的方向键 “↑、←、↓、→” 可以 操纵飞机移动到"开始游戏"字样处开始游戏,也可以同时按下类似“←↑”这样的组合实现 斜向移动
    进入游戏应该可以听到游戏音乐,任意时刻点击右上角的喇叭按钮可以 开关音乐

2、游玩界面

    进入游戏之后,操纵方式同前,界面如下:

20899536-cdb5225827d30275.png
游玩界面
    此时应该在玩家周围自界面最顶端产生了随机位置、随机数量的 敌机
    通过操控玩家飞机进行躲避,可以看到左上角 分数累加;
    当玩家与敌机发生碰撞之后,玩家会扣血,当 玩家血量扣完时,游戏结束;
    玩家可以按下空格键 发射子弹进行攻击,当敌机与子弹发生碰撞后,敌机会扣血,当 敌机血量扣完时,会从游戏界面中消失;

3、暂停

    点击右上角的Pokemon精灵球可以暂停/继续游戏

4、结束界面

    玩家死亡后,结束界面如下,玩家可以选择再来一次或者退出游戏;
    当玩家游玩分数高于最高纪录时,在游戏结束时会保存最高分。

20899536-bc926c9074402379.png
结束界面

三、游戏实现
1、贴图准备

    背景图网上随便找的一张,其余贴图都是自己用AI画的(当时暑假留校比较闲,成天没事就搞这些花里胡哨的嘻嘻)

2、参数等预定义

    下面这些主要是贴图的一些属性的预定义,而方向键的定义按照习惯还是定义成了wasd等字母按键了,实际上用的还是键盘上的上下左右键:

//贴图属性
#define PlayerBlock 75  //玩家方块大小,等于玩家飞机图像文件大小75x75
#define PlayerBlood 100 //玩家血量
#define PlayerSpeed 3   //玩家移动速度,数值越大越快

#define EnemyBlock  80  //敌机方块大小,等于敌机飞机图像文件大小80x80
#define EnemyBlood 100   //敌机血量
#define EnemySpeed  3   //敌机移动速度,数值越大越快
#define Enemy_NUM 15    //屏幕最多出现的敌机数量

#define BulletBlock 20   //子弹方块大小
#define Bullet_NUM 20   //屏幕最多出现的子弹数量
#define BulletSpeed 5   //子弹移动速度,数值越大越快

//定义方向键
#define LEFT           'a'  
#define UP             'w'
#define RIGHT          'd'
#define DOWN           's'
#define L_UP           'q'
#define R_UP           'e'
#define L_DOWN         'z'
#define R_DOWN         'x'

    考虑到各个贴图的属性都差不多,这里就定义成一个结构体了,别问为啥不用Class类,问就是喜欢一个个函数,用起来舒服就完事!需要注意的是Block结构体成员point保存的是贴图方块的左上角顶点,这在第8点碰撞检测部分需要特别注意。
    完整定义如下:

struct SinglePoint
{
    int x = 0;//定义点坐标
    int y = 0;
};

struct Block
{
    IMAGE image;//图片文件
    SinglePoint point;//左顶点
    uint8_t aliveflag = 0;//是否显示使能,默认不显示
    uint8_t kickedflag = 0;//是否被攻击,默认未被攻击
    long alivetime;//存活时间
    float blood;//血量
};
3.初始化界面函数

    在该函数中,依次进行:游戏背景音乐、子弹音效、死亡音效的装载;根据电脑分辨率动态调整游戏界面尺寸;各贴图装载;玩家飞机位置初始化。


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值