一个大二阶段完成的 Android 数字华容道小游戏。项目在大一 C++ 图形化版本的基础上进行改进,移植到 Android 平台,并加入了触摸操作、计时、步数统计、最佳成绩保存、洗牌和重置等功能。
数字华容道也称 15-puzzle,是一个 4×4 的滑块益智游戏。棋盘中有 15 个数字方块和 1 个空白格,玩家通过移动空白格相邻的数字方块,将数字排列为从 1 到 15 的顺序。
目标状态如下:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 空白
本项目是个人学习和课程作业项目,主要用于练习 Android 界面开发、触摸事件处理、游戏状态管理和简单的数据持久化。
- 4×4 数字华容道棋盘。
- 点击数字方块进行移动,只允许移动到空白格相邻位置的方块。
- 启动游戏时自动洗牌,且洗牌过程由合法移动组成,保证局面可还原。
- 记录当前游戏步数。
- 记录游戏用时。
- 使用
SharedPreferences保存历史最佳步数。 - 支持“洗牌”开始一局新游戏。
- 支持“重置”恢复到有序棋盘。
- 通关后弹出成绩对话框,可继续挑战或退出游戏。
- 启动应用后,棋盘会自动生成一个打乱的局面。
- 点击空白格上下左右相邻的数字方块,使其移动到空白位置。
- 重复移动,直到棋盘恢复为
1到15的顺序。 - 通关后可以查看本局步数和时间;如果步数更少,会更新最佳成绩。
- 开发语言:Java
- 开发工具:Android Studio
- 构建工具:Gradle
- Android Gradle Plugin:9.2.1
- compileSdk:33
- targetSdk:33
- minSdk:21(Android 5.0)
- AndroidX AppCompat:1.6.1
项目不依赖网络服务,游戏逻辑和成绩数据均在本地运行和保存。
GameEngine 使用二维数组保存 4×4 棋盘状态,其中 0 表示空白格。游戏引擎同时记录空白格的位置和当前步数。
通过曼哈顿距离判断点击的方块是否与空白格相邻:
|点击行 - 空白行| + |点击列 - 空白列| == 1
只有距离为 1 时才执行交换,并将步数加 1。
洗牌不是直接随机打乱数组,而是从空白格的合法相邻位置中随机选择方块进行多次移动。因此,洗牌后的局面一定可以通过反向移动回到目标状态。
GameBoardView 是自定义 View,负责绘制棋盘和数字方块,并将触摸坐标换算为棋盘行列,再交给 MainActivity 处理游戏操作。
MainActivity 使用 SharedPreferences 保存最佳步数。应用重新启动后仍然可以读取之前的最佳成绩。
hrd/
├── app/
│ └── src/main/
│ ├── java/com/example/hrd/
│ │ ├── GameEngine.java # 棋盘数据、移动、洗牌和胜利判断
│ │ ├── GameBoardView.java # 棋盘绘制和触摸坐标处理
│ │ └── MainActivity.java # 页面、计时器、按钮和成绩逻辑
│ ├── res/layout/
│ │ └── activity_main.xml # 主界面布局
│ ├── res/values/
│ │ ├── colors.xml # 颜色资源
│ │ ├── strings.xml # 字符串资源
│ │ └── themes.xml # 应用主题
│ └── AndroidManifest.xml # 应用配置和启动入口
├── build.gradle.kts # 根项目构建配置
├── settings.gradle.kts # 模块配置
├── gradlew # Gradle Wrapper(Unix)
├── gradlew.bat # Gradle Wrapper(Windows)
└── README.md
- Windows、macOS 或 Linux
- Android Studio
- Android SDK 33 或兼容版本
- JDK 21(建议使用 Android Studio 自带的 JBR)
- Android 模拟器或 Android 5.0 及以上的实体设备
- 使用 Android Studio 打开项目根目录
hrd。 - 等待 Gradle 同步完成。
- 连接 Android 手机或启动模拟器。
- 点击运行按钮,选择
app配置启动应用。
在项目根目录执行:
.\gradlew.bat assembleDebug生成的调试 APK 位于:
app/build/outputs/apk/debug/app-debug.apk
连接设备并开启 USB 调试后,可以使用 ADB 安装:
adb install -r app/build/outputs/apk/debug/app-debug.apk| 类名 | 作用 |
|---|---|
GameEngine |
管理棋盘数组、空白格、步数、合法移动、洗牌和胜利判断 |
GameBoardView |
绘制数字方块,并处理用户的触摸操作 |
MainActivity |
初始化页面,更新步数和时间,处理洗牌、重置、通关弹窗和最佳成绩 |
- 当前只有 4×4 棋盘,暂不支持自定义棋盘大小。
- 当前只支持点击操作,不支持键盘方向键或滑动手势。
- 最佳成绩目前只按步数比较,没有按时间进行排名。
- 项目主要用于学习和课程作业,界面和代码结构仍有继续完善的空间。
- 增加滑动手势操作。
- 增加多个难度等级和不同棋盘尺寸。
- 增加历史成绩列表。
- 优化计时器和 Activity 生命周期处理。
- 增加游戏截图、应用图标和发布版 APK。
这是我大二阶段完成的 Android 课程作业。大一阶段曾使用 C++ 和 EasyX 完成过桌面版数字华容道,本项目是在原有游戏思路上的一次 Android 平台改进和实践。