DDG/wx

不定期诈尸

简单的音乐游戏

介绍

这是一款十分简单的音乐游戏。

编译环境:Visual Studio 2019,EasyX_20210730

游戏说明

  1. 介绍:玩家需根据音乐节奏,控制方向块,接住不断靠近的 note。
  2. 控制:Q 逆时针旋转,W 后移,E 顺时针旋转,ESC 暂停游戏,具体可于游戏中进行设置。 
  3. 若想游玩其他谱面可以访问 osu 或镜像站 v mirror (推荐 使用时可以下载其中的MINI谱面,减少不必要的空间占用)下载谱面 并将下载的 .osz 文件以 zip 格式打开并解压到 obm 文件夹中。
  4. 对于任何音乐游戏,包括该游戏都建议从最低难度开始。

项目共包含以下文件

源程序文件:

  1. main.cpp 主程序。
  2. Control.h/cpp 游戏控制部分 包含类 keycheck 单独按键控制,timer 计时器,FPSCounter 帧数计算。
  3. EasyGraphic.h/cpp 包含部分图形相关的函数,类 AlphaChange 图像渐变模块。
  4. EasyUI.h/cpp 包含类 BaseStuff 物件类的基类,StuffPoint 记录物件类指针与优先级的结构,ButtonStuff 按键物件类,StrStuff 字符串物件类,SlideStuff 进度条/滑动条物件类,Page 页面类。
  5. EasyUI_Block.h/cpp 对 EasyUI 的扩展,目前仅有类 ChooseBlock 选择界面物件组。
  6. Game.h/cpp 游戏主体部分的实现包含类 PlayerSet 保存设置信息,OsuBeatmap 保存谱面信息,GameEnvironment 游戏环境与实现游戏内容与界面,StartMenu 实现游戏开始前的界面,note 保存note信息的结构,以及其他有关函数。
  7. Music.h/cpp 包含音乐环境有关函数,MusicControl 音乐控制类。
  8. PageSet.h/cpp 包含类 GradienterPage 储存游戏全部页面信息,与页面初始化与卸载的有关函数。

游戏素材,谱面与其他文件:

  1. res 文件夹:界面素材。
  2. obm 文件夹:谱面。 
  3. FMOD.dll,lib 与 inc 文件夹:音效引擎 FMOD 所需文件。

关于音乐播放的说明

鉴于 MCI 在部分电脑上无法正常播放音乐,且功能有限,该程序使用了 FMOD 作为音乐播放引擎,其功能强大,但目前缺少中文介绍的资料,我通过不断尝试与阅读英文文档实现了部分简单的应用,并用 MusicControl 类进行封装,使其更好理解,其他功能如 3D 效果,音效等还有待学习。

关于 x64 模式下的编译与Release版本的问题

关于 x64 模式下的编译与 Release 版本的问题,经过村长的建议 x64 模式的问题已解决,解决方案可能在下次作为教程说明。

若要将程序打包给一般用户,除必要的素材,配置文件外,Release 版本中还要有相应的 fmod.dll 文件。

关于新版本

鉴于上一版本游戏代码过于冗余且有不少问题,于是进行重写,新版本有以下改变

  1. 更灵活的界面设置,轨道长度与 note 大小可以调节
  2. note的速度与判定精度由于涉及难度将依据谱面文件中 OverallDifficulty 与 ApproachRate 调节
  3. 添加了命中与 miss 提示
  4. 添加了对准确度的计算与现实游戏进度
  5. 改善了页面
  6. 字符集改为 unicode

关于 EasyUI

为了方便未来及现在程序的页面编写,我在写该游戏前写了 EasyUI 这一基于 EasyX 的界面库。

由于编写时基本按照自己的思路来写,因此与主流界面库有一定偏差,优化也可能不完美,若无后续 BUG 计划编写教程

有兴趣可访问:https://github.com/tonyddg/EasyUI 若有有关疑问与希望参与 EasyUI 的后续编写可联系邮箱 799052200@qq.com

游戏图片

下载

Gridenter 2.1 (改正了按钮单词的拼写错误)

最后

程序还不是很完善,还将继续修改,如有 BUG,建议,欢迎指出。

分享到

评论 (2) -

  • 建议全部使用unicode,读文件时,用char数组读,然后再转为unicode,string.h库里好像提供了相应的转换函数,记不太清,建议百度。
    • 在新版中已解决,主要不是读文件,而是写文件时会出现乱码,不过直接用ofstream代替wofstream就可解决

添加评论