# Bone_Sweeper **Repository Path**: wei-chen-yi/Bone_Sweeper ## Basic Information - **Project Name**: Bone_Sweeper - **Description**: 简单的扫雷小游戏 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-18 - **Last Updated**: 2025-08-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于C语言的GEC6818开发板扫雷小游戏 ## 一、项目概述 本项目是一个运行在GEC6818开发板上的扫雷小游戏,使用C语言结合LVGL图形库开发。游戏提供了三种不同难度级别供玩家选择,玩家可以通过点击和长按操作来翻开格子和标记地雷。该项目充分利用了LVGL图形库的优势,在嵌入式平台上实现了完整的扫雷游戏体验。 ### 项目流程 ![alt text](./pic/项目流程图.jpg) ## 二、功能特性 1. **难度选择**:提供简单(8×8 10个雷)、中等(16×16 40个雷)和困难(16×30 99个雷)三种难度级别。 2. **游戏操作**: - **点击**:翻开未翻开且未标记的格子。 - **长按**:标记或取消标记可能有雷的格子。 3. **游戏控制**: - **重新开始**:可随时重新开始游戏,回到难度选择界面。 - **暂停游戏**:支持暂停和恢复游戏。 - **实时计时**:游戏进行中,实时显示游戏时长。 - **雷数统计**:实时显示已标记的地雷数量。 4. **游戏结束判断**: - **胜利**:当所有非雷格子都被翻开时,游戏胜利。 - **失败**:当翻开到有雷的格子时,游戏失败。 ## 三、代码结构 ### 主要文件及功能 1. **`main.c`**:程序入口文件,负责设备初始化、创建难度选择界面,并循环处理LVGL任务。 2. **`my_code/difficulty.c`**:实现难度选择界面的创建和难度选择按钮的点击事件处理,以及退出功能。 3. **`my_code/game.c`**:包含游戏的主要逻辑,如游戏参数初始化、游戏网格创建、游戏控制按钮的事件处理以及单元格触摸事件处理。 4. **`my_code/game_logic.c`**:处理游戏的核心逻辑,如翻开单元格、检查胜利条件和显示游戏结束界面,以及确保首次点击安全区域。 5. **`my_code/game.h`**:定义游戏所需的结构体和枚举类型,并声明相关函数。 6. **`my_code/game_logic.h`**:声明游戏逻辑相关函数。 7. **`my_code/difficulty.h`**:定义难度级别枚举类型,并声明相关函数。 ### 项目目录结构 - `./` - 项目根目录,包含主程序文件和构建配置 - `./my_code/` - 项目源代码目录 - `./lvgl/` - LVGL图形库源码 - `./bin/` - 编译生成的可执行文件目录 - `./pic/` - 项目说明文件图片目录 ## 四、编译和运行 ### 编译环境 确保你的开发环境中已经安装了必要的工具链和LVGL库。 ### 编译步骤 使用CMake进行编译: ```bash mkdir build cd build cmake .. make -j ``` 当你修改了CMakeLists.txt文件时,你需要重新运行cmake命令来生成新的Makefile。 ```bash make clean cd .. rm -rf build mkdir build && cd build cmake .. make -j ``` 修改源代码后,只需要重新编译: ```bash make -j ``` ### 运行步骤 将编译生成的可执行文件 `main` 复制到GEC6818开发板上,并确保开发板的 `/dev/fb0` 显示设备和 `/dev/input/event0` 输入设备正常工作。然后在开发板上运行以下命令: ```bash chmod u+x main ./main ``` ## 五、使用说明 1. **启动游戏**:运行程序后,会显示难度选择界面,选择你想要的难度级别,或选择退出程序。 2. **游戏界面布局**:游戏界面分为左右两列,左列显示当前分数,右列显示当前时间,中间显示游戏画面。 ![alt text](./pic/screen.jpg) 3. **游戏过程**: - 点击格子翻开,若翻开到雷则游戏失败(显示"*")。 - 长按格子标记或取消标记地雷(显示"F")。 - 当所有非雷格子都被翻开时,游戏胜利。 4. **游戏控制**: - **重新开始**:点击"Restart"按钮,游戏将回到难度选择界面。 - **暂停游戏**:点击"Pause"按钮,游戏将暂停并显示提示信息,再次点击可恢复游戏。 ## 六、技术细节 ### 安全首击机制 游戏实现了安全首击机制,确保玩家第一次点击的位置及其周围区域不会放置地雷,提升游戏体验。 ### 递归展开 当玩家点击空白区域(周围没有地雷的格子)时,程序会自动递归展开相邻的空白区域,提高游戏效率。 ### 实时状态显示 游戏界面实时显示已用时间和标记的地雷数量,帮助玩家掌握游戏进度。