弹幕躲避游戏
游戏说明
1.操作
上下左右移动/选择 shift慢速模式 x清屏 esc退出界面(除了主界面)
2.计分
每帧(1/60秒)计分 原有 + 1 + pluspoint
3.奖励
当达到第六级别后可以奖励一次清屏机会(原有3次
4.关卡结束
关卡结束后有约0.6秒的休息时间
5.慢速模式
速度减少约一半,并显示判定点
6.垂直同步
屏幕刷新与逻辑刷新同步,打开可以减少cpu负担
7.关卡
目前共有五关
8.文件
含有文件 gdat 玩家数据与设置 ; main.cpp 主程序 ; define.h 定义函数 ; type.h 定义数据与数据结构 ; Title.jpg 标题背景
9.pluspoint
为黄色的点,获得后可以增加1点pluspoint随关卡等级增加,出现率增加,进入下一关后淸0
更新说明
2020-6-7
- 修复了无法编译通过的问题
- 添加了一关
- 使用option.ini保存说明,并且可以根据其中的path属性设置成绩信息的保存与读取位置
2020-6-14
- 修复了排行榜与回放列表的显示bug
- 修复了回放功能的部分bug
- 根据村长意见,合并了option.ini 与 player.mdat
2020-6-25
- 修改了游戏的得分规则
- 添加了第六关
- 替换了原有的第五关
2020-12-13
- 使用了新的帧数控制方法,使帧数控制在62.5帧/s(16ms/帧)
- 计划重新编写回放功能
部分功能的实现思路
1.碰撞判定
将每一个像素视为一个bool形的单元,true为不能接触 false为可以接触两种 再检查玩家判定点所在区域是否有不可接触的单元
2.回放功能
记录下每一个逻辑帧角色的位置,在保存,并保证每次游戏下落的弹幕位置不变
3.排行榜
利用二进制方式读取文件,读取记录排名的数据结构,再按分类进行归纳,利用stringstream生成格式化的文本再输出
4.游戏控制
分开画面更新与逻辑更新部分,记录每次逻辑判定的时间间隔,若小于16ms则不执行,若大于16ms,循环运行逻辑部分,并将小于16ms的时间间隔计入到下一次(6-25及之前版本)
在12-13版本中使用了新的帧数控制方法
ps.因为我只有周末能上QQ,可能不能及时回复,若有问题可以直接在评论区写出,不必加QQ,也能方便他人学习
关于12-13日更新的新的帧数控制
引言
我现在已经高三了,学业比较繁重,太久没有写程序了,实在忍不住,在二阶考的时候突然想到了一个新的帧数控制方法,一回家就马上应用到这个游戏里了(虽然后果就是这次考试考砸了....)
由于时间的问题以及这个方法仍存在问题便先不另开了,如有建议欢迎指出
正文
在之前的帧数控制中我采用的是记录时间间隔的方法,然而由于程序处理时间的不稳定,导致画面更新实际上并不是稳定的16ms/帧,而是会不断波动
在绘图所用时间短时,两种方法其实并无区别,但在卡顿时则旧方法岁帧率高但将会有明显卡顿感,但新的方法则依然流畅且保持在稳定的帧率
原因是旧的方法为了使用到所有的时间跟充分,在绘图部分结束后立刻进入逻辑部分进行逻辑部分的补帧,提高了时间的利用效率但一个画面更新后跟的逻辑补帧次数不稳定,使画面不连贯
新方法则有严格的帧数管理,画面部分结束后必须Sleep至一帧结束
(测试方法:于绘图部分前添加Sleep(20); 旧方法帧率于43帧/s左右波动,有明显卡顿 新方法保持在31.25帧/s)
新方法的思路程序:
bool gameloop = true;
int lastframe = -1;
int currentframe = 0;
init(); // 初始化
long starttime = clock();
while(gameloop)
{
for(lastframe;lastframe<currentframe;lastframe++)
{
logic(); // 逻辑部分
}
image(); // 绘制部分
currentframe = (clock()-starttime)/gaptime+1;
if(currentframe * gaptime + starttime>clock())Sleep(currentframe * gaptime + starttime - clock());
}
EndBatchDraw();
待改进的不足:
- 无法实现小数的时间间隔
时间仓促可能讲的的不是很好,十分抱歉,如有任何建议欢迎指出
已知BUG
当在设置界面中先打开全屏模式再在关上,其他窗口会受到影响,变得与游戏窗口一样大
回放功能具有大量bug! 计划重写
可能还存在其他bug,若出现请联系邮箱799052200@qq.com,十分感谢,开学后可能不能及时回复
效果图
下载
1.1.1 稳定版本(2020-6-14):下载完整的游戏源码及图片资源
1.2 测试版本(2020-6-25):下载
1.3 测试版本(2020-12-13):下载
添加评论
取消回复