GithubHelp home page GithubHelp logo

whack-a-mine's Introduction

期末项目实验报告 --- 打地鼠

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 相关环境

二. 游戏信息

强烈建议开声音玩 (没有逆天音效)

1.游戏规则:

初始有10个地雷, 玩家有10点生命, 地鼠可能在任意的格子探头,若未及时对其进行用锤子进行攻击,玩家会掉一点血,血量归零则游戏失败。若未击中地鼠,玩家除掉血外,地鼠周边的格子(3*3的范围,去掉地鼠所在格子共8个格子)隐含的地雷重新分布。若击中地鼠,地鼠会倒下,并根据地鼠种类实现相应功能. 当推测出某个格子有地雷后,可以用排雷工具清除地雷,地雷所在格子暴露;若对某格子使用排雷工具,但该格子并无地雷,则玩家掉血,该格子不会暴露。找到所有地雷则游戏胜利 暴露的格子可能会出现地鼠(此时击倒地鼠后不会产生地鼠对应效果),但不再会出现地雷。 随着分数的增加, 地鼠冒头频率会变高。

  • 未暴露方块 : block 已暴露方块: empty

地鼠种类 (出现概率递减):

  • shrewNormal探测地鼠 (普通地鼠) : 击中后地鼠所在格子暴露,其周边的格子(3*3的范围,去掉地鼠所在格子共8个格子)会显示数字,分别表示该格子周围的地雷数量(功能同扫雷);
  • shrewMulti混乱地鼠: 击中后地鼠所在格子不暴露, 其周边格子(3*3的范围,去掉地鼠所在格子共8个格子)所含的地雷重新分配(已经暴

​ 露的格子不会出现地雷);

  • shrewChaos不稳定地鼠: 击中后地鼠所在格子暴露, 若地鼠所在格子存在地雷, 则地雷爆炸, 玩家失去5点生命 (爆炸的地雷也算作找到)

计分规则

  • 若游戏失败, 则找到地雷数量越多, 分数越高
  • 若游戏胜利, 则所用事件越短, 分数越高

欢迎助教gg挑战我的最高记录 ()

2. 键位

  • 鼠标左键: 地鼠锤
  • 鼠标右键: 排雷工具

3. 游戏界面及功能介绍

窗口大小: 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结构体, 内存储方块相关信息并声明为全局变量

whack-a-mine's People

Contributors

positron114514 avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.