Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Android 数字华容道

一个大二阶段完成的 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. 启动应用后,棋盘会自动生成一个打乱的局面。
  2. 点击空白格上下左右相邻的数字方块,使其移动到空白位置。
  3. 重复移动,直到棋盘恢复为 1 到 15 的顺序。
  4. 通关后可以查看本局步数和时间;如果步数更少,会更新最佳成绩。

技术栈

  • 开发语言: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

  1. 使用 Android Studio 打开项目根目录 hrd。
  2. 等待 Gradle 同步完成。
  3. 连接 Android 手机或启动模拟器。
  4. 点击运行按钮,选择 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 平台改进和实践。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages