Android 扫雷游戏项目设计报告
目录
- 一、项目设计背景
- 二、项目需求分析与功能介绍
- [2.1 功能设计需求分析](#2.1 功能设计需求分析)
- [2.2 功能模块分析](#2.2 功能模块分析)
- [2.3 系统功能操作流程图](#2.3 系统功能操作流程图)
- 三、开发环境与工具介绍
- 四、界面设计
- [4.1 主游戏界面](#4.1 主游戏界面)
- [4.2 游戏交互与弹窗](#4.2 游戏交互与弹窗)
- 五、创新与改进
- [5.1 手势缩放与移动](#5.1 手势缩放与移动)
- [5.2 轻量级音效系统](#5.2 轻量级音效系统)
- [5.3 排行榜数据持久化](#5.3 排行榜数据持久化)
- 六、总体设计展示
- 七、总结与心得
一、项目设计背景
扫雷(Minesweeper)是一款经典的单人电脑益智游戏。游戏的规则简单但极具挑战性:玩家需要在不触碰到地雷的情况下,通过逻辑推理揭开所有非雷格子。
本项目旨在基于 Android 平台复刻这一经典游戏,不仅为了重现童年回忆,更是为了深入学习 Android 自定义 View 绘制、触摸事件处理(Touch Event)、手势识别(GestureDetector)以及数据持久化存储等核心技术。通过将 PC 端的鼠标操作转化为移动端的触控操作(点击翻开、长按插旗、双指缩放),提升在手机屏幕上的游戏体验。
二、项目需求分析与功能介绍
2.1 功能设计需求分析
本 APP 主要包含以下核心功能:
- 多难度选择:提供初级(Easy)、中级(Medium)、高级(Hard)三种难度,对应不同的雷区大小和地雷数量。
- 核心游戏逻辑 :
- 点击格子:翻开覆盖层,若为雷则游戏结束,若为数字则显示周围雷数。
- 空白扩散:点击空白区域自动展开周围无雷区域(递归算法)。
- 长按操作:对疑似有雷的格子进行插旗标记或取消标记。
- 触控优化:支持双指缩放(Zoom)和拖动(Pan)雷区,适配不同尺寸的手机屏幕。
- 游戏状态记录 :
- 实时计时器:记录游戏耗时。
- 剩余雷数显示。
- 音效反馈:点击、插旗、爆炸、胜利等操作均有音效反馈。
- 排行榜:记录并展示各难度的历史最佳时间(Top 3)。
2.2 功能模块分析
项目采用标准的 Android 开发模式,主要类结构如下:
- Model(数据层) :
grid[][]:二维数组存储地雷分布和数字计算。HighScoreManager.java:负责使用SharedPreferences读取和保存最高分数据。
- View(视图层) :
MinesweeperView.java:项目的核心类,继承自View。负责整个游戏画面的绘制(Canvas),包括网格、数字、旗帜、计时器等。
- Controller(控制层) :
MinesweeperGame.java:主 Activity,负责初始化游戏视图。MinesweeperGestureListener&ScaleGestureDetector:负责处理用户的点击、长按、滑动和缩放手势,并将逻辑传递给 View 层更新 UI。SoundManager.java:负责管理音效的播放与开关。
2.3 系统功能操作流程图
点击格子
长按格子
双指捏合
手指拖动
菜单选择
是雷
是数字
是空白
是
否
点击重来
点击退出
打开 APP
初始化游戏
默认初级难度
用户操作
格子状态
插旗/取消标记
缩放雷区
平移雷区
切换难度
更新界面
重置游戏
游戏结束
播放爆炸音效
翻开格子
递归展开周围
是否扫清所有雷?
游戏胜利
播放胜利音效
弹出结束对话框
记录成绩
退出 APP
三、开发环境与工具介绍
3.1 开发环境
- 操作系统:Windows 10/11
- JDK 版本:Java Development Kit 1.8+
- Android SDK:API Level 21+ (Android 5.0 Lollipop 及以上)
3.2 工具介绍
- Android Studio:Google 官方推荐的集成开发环境,用于代码编写、界面预览和调试。
- Gradle:自动化构建工具,管理项目依赖和打包流程。
- Git:版本控制工具(可选)。
四、界面设计
4.1 主游戏界面
游戏界面采用全屏绘制方式,移除系统标题栏,最大化游戏可视区域。
- 顶部 HUD:绘制当前耗时(Time)和剩余地雷数(Mines)。
- 中央雷区 :根据难度生成的网格矩阵。采用经典的灰色调配色(Windows 95 风格),未翻开格子有立体阴影效果,数字采用标准扫雷配色(1-蓝, 2-绿, 3-红等)。

4.2 游戏交互与弹窗
- 难度选择菜单:通过 Options Menu 或对话框提供难度切换。
- 游戏结束弹窗 :使用
AlertDialog,显示 "Game Over" 或 "You Won!",并显示本次耗时。 - 排行榜弹窗 :展示当前难度的前三名最快记录。

五、创新与改进
5.1 手势缩放与移动
考虑到手机屏幕尺寸有限,而高级难度(Hard)下的网格非常密集,本项目创新性地引入了无限画布的概念:
- 缩放(Zoom) :利用
ScaleGestureDetector监听双指捏合手势,实时改变scaleFactor,实现雷区的无损放大与缩小。 - 平移(Pan) :利用
GestureDetector的onScroll方法,计算手指位移distanceX/Y,动态调整画布坐标translateX/Y。
这一改进使得用户可以在小屏幕上也能精确操作复杂的雷区,极大地提升了可玩性。
5.2 轻量级音效系统
为了减小 APK 体积,本项目没有使用体积较大的 .mp3 或 .wav 音频文件,而是使用了 Android 原生的 ToneGenerator 类:
- 使用
TONE_PROP_BEEP模拟点击声。 - 使用
TONE_DTMF_0模拟低沉的爆炸声。 - 使用
TONE_CDMA_ALERT_CALL_GUARD模拟胜利的提示音。
这种方式无需加载外部资源,响应速度极快且零资源占用。
5.3 排行榜数据持久化
利用 Android 的轻量级存储 SharedPreferences 实现了一个 HighScoreManager 类。它能够:
- 自动区分不同难度(Easy/Medium/Hard)存储数据。
- 对新产生的成绩进行排序,只保留前三名。
- 即使关闭 APP,成绩数据也不会丢失。
六、总体设计展示
6.1 打开 APP,进入游戏

6.2 游戏进行中(缩放与插旗)

6.3 游戏胜利与排行榜

七、总结与心得
7.1 总结
通过本次 Android 扫雷游戏的开发,成功实现了一个功能完备、交互流畅的移动端益智游戏。项目不仅复刻了经典玩法,还针对移动端特性进行了深度优化(手势缩放、触控反馈)。代码结构清晰,MVC 分层合理,具备良好的扩展性。
7.2 心得
在开发过程中,我深入理解了 Android View 的生命周期和 onDraw 绘制机制。特别是在处理多指触控冲突时(如区分点击和滑动),通过查阅文档和反复调试,掌握了 GestureDetector 和 ScaleGestureDetector 的配合使用技巧。此外,对 Android 的数据持久化机制也有了更直观的实践经验。