231880313 刘鑫鑫 2024/1/19
-
操作系统 : Windows
-
C语言环境 : mingw gcc version 12.1.0 (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders)
-
编译选项 : 见文件夹中 CMakeLists 及
src
文件夹中 CMakeLists -
使用的第三方库 : SDL2
- 需要计算机已经配置好 SDL2 相关环境
强烈建议开声音玩 (没有逆天音效)
初始有10个地雷, 玩家有10点生命, 地鼠可能在任意的格子探头,若未及时对其进行用锤子进行攻击,玩家会掉一点血,血量归零则游戏失败。若未击中地鼠,玩家除掉血外,地鼠周边的格子(3*3的范围,去掉地鼠所在格子共8个格子)隐含的地雷重新分布。若击中地鼠,地鼠会倒下,并根据地鼠种类实现相应功能. 当推测出某个格子有地雷后,可以用排雷工具清除地雷,地雷所在格子暴露;若对某格子使用排雷工具,但该格子并无地雷,则玩家掉血,该格子不会暴露。找到所有地雷则游戏胜利 暴露的格子可能会出现地鼠(此时击倒地鼠后不会产生地鼠对应效果),但不再会出现地雷。 随着分数的增加, 地鼠冒头频率会变高。
- 探测地鼠 (普通地鼠) : 击中后地鼠所在格子暴露,其周边的格子(3*3的范围,去掉地鼠所在格子共8个格子)会显示数字,分别表示该格子周围的地雷数量(功能同扫雷);
- 混乱地鼠: 击中后地鼠所在格子不暴露, 其周边格子(3*3的范围,去掉地鼠所在格子共8个格子)所含的地雷重新分配(已经暴
露的格子不会出现地雷);
- 若游戏失败, 则找到地雷数量越多, 分数越高
- 若游戏胜利, 则所用事件越短, 分数越高
欢迎助教gg挑战我的最高记录 ()
- 鼠标左键: 地鼠锤
- 鼠标右键: 排雷工具
窗口大小: 1280*760
- 致敬某二字游戏
- 界面中央
START
/QUIT
点击即可开始 / 退出游戏, 上下左右键可以切换>
指向, 按SPACE
/ENTER
执行对应操作 - 界面左侧
RECORDS
点击显示近10条游戏记录,RULES
点击显示游戏背景故事及规则 (英文) (每页至少看3秒才能翻页)
- 界面左侧: 显示玩家生命值; 已经找到的地雷数量及未找到的地雷数量; 本局游戏进行时间; 已经击倒的地鼠数; 随机到的bgm名字
- 界面右侧: 显示地图; 地鼠冒头, 击倒地鼠, 损失生命值, 找到地雷都有对应音效提示; 找到的地雷会在方块上放置
小红旗
作为标识 - 按
ESC
投降
- 再次致敬某二字游戏
- 若是最佳游戏记录, 则显示
NEW RECORD
, 根据游戏 胜利/失败 对应选择显示 找到地雷数/所用时间; - 若不是最佳游戏记录, 则只显示最佳记录
- 点击
BACK TO MENU
返回菜单
这次CPL期末项目是我第一次用多文件的形式开发程序, 也是第一次开发代码量超千行的大型程序. 通过这次项目, 我理解了分层在大型程序开发中极其重要. 刚开使我的game()函数甚至超过了300行, 在后续的开发中我感觉到了单个过于臃肿的函数对开发进程有很大的阻碍, 还会影响大脑的清晰度, 所以我采用了把图像, 音频等资源变量定义成结构体的方式并声明成全局变量, 把inti(), quit()等操作抽出来, 并把game()分成几个小的部分, 每个部分单独定义成函数, 降低了game()的复杂度, 同时使我的思路更加清晰; 这次项目开发也让我认识到了代码规范性的重要性, 如用fopen等函数的返回值来检测其是否正确运行, 以及定义HANDLE_ERROR来辅助处理错误信息, 大大降低了debug难度; 我也体会到了学习过程中自行摸索, 在实践中学习的乐趣, 遇到不会的问题首先学会自行查询or问gpt, 并在这个过程中学习
我觉得写的比较好的部分: 定义block结构体, 内存储方块相关信息并声明为全局变量