Android21点游戏APP设计报告
文章目录
- Android21点游戏APP设计报告
- 一、项目设计背景
- 二、项目需求分析与功能介绍
-
- [2.1 功能设计需求分析](#2.1 功能设计需求分析)
- [2.2 功能模块分析](#2.2 功能模块分析)
- [2.3 系统功能操作流程图](#2.3 系统功能操作流程图)
- 三、开发环境与工具介绍
-
- [3.1 开发环境](#3.1 开发环境)
- [3.2 工具介绍](#3.2 工具介绍)
- 四、界面设计
-
- [4.1 游戏启动与下注界面设计](#4.1 游戏启动与下注界面设计)
- [4.2 游戏主界面设计](#4.2 游戏主界面设计)
- [4.3 菜单功能设计](#4.3 菜单功能设计)
- [4.4 数据库设计](#4.4 数据库设计)
- 五、创新与改进
-
- [5.1 破产补助机制](#5.1 破产补助机制)
- [5.2 数据自动持久化](#5.2 数据自动持久化)
- [5.3 沉浸式体验](#5.3 沉浸式体验)
- 六、总体设计展示
-
- [6.1 打开 app,进入下注界面](#6.1 打开 app,进入下注界面)
- [6.2 下注与开始游戏](#6.2 下注与开始游戏)
- [6.3 游戏过程:要牌与停牌](#6.3 游戏过程:要牌与停牌)
- [6.4 游戏结算:胜负判定](#6.4 游戏结算:胜负判定)
- [6.5 查看战绩与菜单](#6.5 查看战绩与菜单)
- [6.6 退出操作](#6.6 退出操作)
- 七、总结与心得
-
- [7.1 总结](#7.1 总结)
- [7.2 心得](#7.2 心得)
一、项目设计背景
随着智能手机的普及,手机游戏已成为人们休闲娱乐的重要方式。棋牌类游戏因其规则简单、对抗性强而深受喜爱。Blackjack(21点)作为一种经典的扑克游戏,在全球范围内拥有广泛的受众。
本项目旨在设计并实现一款基于 Android 平台的 Blackjack 游戏应用。通过该应用,用户可以随时随地体验 21 点游戏的乐趣。项目采用 Java 语言开发,利用 Android Studio 作为集成开发环境,实现了游戏的核心逻辑、界面交互以及数据持久化等功能。该项目不仅是一个娱乐工具,也是对 Android 应用开发技术的一次综合实践。
二、项目需求分析与功能介绍
2.1 功能设计需求分析
本应用的主要目标是还原真实的 21 点游戏体验,主要功能需求如下:
- 下注功能:玩家在开始游戏前,需要选择下注的金额。系统提供多种筹码面额(如 5, 10, 20, 50)供玩家选择。
- 发牌与游戏流程:系统需按照 21 点规则进行发牌,玩家可以查看自己的手牌和庄家的一张明牌。
- 玩家操作:玩家根据手牌点数,可以选择"要牌"(Hit)或"停牌"(Stand)。
- 胜负判定:游戏需自动计算点数,处理爆牌(Bust)、黑杰克(Blackjack)等特殊情况,并根据规则判定玩家与庄家的胜负。
- 数据记录:系统需要记录玩家的资产(Money)、最高分(Max Score)、胜场(Win Count)和负场(Lose Count),并在应用关闭后保留这些数据。
- 破产保护:当玩家资产不足以进行最基本的下注时,系统应提供"破产补助",确保游戏可以继续进行。
2.2 功能模块分析
根据需求分析,系统主要划分为以下三个核心模块:
-
下注模块 (Betting Module):
- 负责显示当前玩家资产和战绩。
- 提供不同面额的筹码按钮供玩家累加赌注。
- 提供"开始游戏"和"重置游戏"的入口。
- 处理破产逻辑,发放救济金。
-
游戏核心模块 (Game Core Module):
- 牌桌视图 (TableView):绘制游戏背景、扑克牌、动画效果。
- 游戏逻辑 (Game Logic):包含洗牌、发牌、点数计算、庄家 AI(自动要牌逻辑)等。
- 交互控制 (Interaction):响应玩家的触摸事件,执行要牌或停牌操作。
-
数据存储模块 (Data Storage Module):
- 利用 SQLite 数据库存储用户的游戏数据。
- 提供数据的增删改查接口,确保数据的持久化和一致性。
2.3 系统功能操作流程图
系统整体操作流程如下:
- 启动应用 -> 进入下注界面。
- 下注 -> 点击筹码按钮增加赌注 -> 点击 Start 按钮。
- 游戏开始 -> 系统发牌(玩家两张,庄家一明一暗)。
- 玩家决策 -> 若点数不足 21,选择"要牌"或"停牌"。
- 要牌 -> 获得一张新牌 -> 若超过 21 点则爆牌(负)。
- 停牌 -> 结束玩家回合,进入庄家回合。
- 庄家回合 -> 庄家揭开暗牌 -> 若点数小于 17 则强制要牌,直到大于等于 17 或爆牌。
- 结算 -> 比较双方点数 -> 判定胜/负/平 -> 更新玩家资产和战绩。
- 循环 -> 返回下注界面或直接开始新的一局。
是
否
否
是
是
否
Hit (要牌)
是
否
Stand (停牌)
是
是
否
否
启动应用
是否首次进入?
初始化数据库
设置初始金币
从数据库读取数据
BettingActivity
下注界面
选择筹码
5/10/20/50
点击 Start?
BlackjackGameActivity
游戏主界面
系统发牌
玩家2张, 庄家1明1暗
检查 Blackjack?
直接结算
玩家回合
选择操作
发一张牌
是否爆牌 > 21?
玩家输 (Bust)
庄家回合
揭开暗牌
点数 < 17?
庄家要牌
庄家爆牌?
玩家赢
比牌结算
更新数据库
扣除金币
更新数据库
增加金币
更新数据库
根据胜负处理
弹出结果对话框
返回下注界面
三、开发环境与工具介绍
3.1 开发环境
- 操作系统:Windows 10 / 11
- 开发工具:Android Studio Ladybug | 2024.2.1
- 编程语言:Java (JDK 1.8+)
- 构建工具:Gradle 8.11.1
3.2 工具介绍
- Android SDK:提供了 Android 平台开发的 API 库和工具集,支持界面绘制、组件交互、系统服务调用等。
- SQLite :Android 内置的轻量级关系型数据库,用于存储玩家的金币、战绩等结构化数据。本项目通过
SQLiteOpenHelper进行数据库的创建和版本管理。 - XML Layouts:使用 XML 定义界面布局,实现了 UI 结构与逻辑代码的分离,便于界面的维护和适配。
四、界面设计
4.1 游戏启动与下注界面设计
BettingActivity 是应用的入口界面。
- 布局结构 :采用
ConstraintLayout实现灵活的适配。 - 顶部:显示应用名称的 Toolbar。
- 中部 :核心交互区。
- 筹码区 :放置了 5, 10, 20, 50 四种面额的圆形按钮,背景使用
bg_button_circle_selector实现点击反馈。 - 信息展示:显示当前的下注金额 (Clip In)。
- 筹码区 :放置了 5, 10, 20, 50 四种面额的圆形按钮,背景使用
- 底部 :
- 操作按钮:包含 "Restart" (重置) 和 "Play Game" (开始) 两个圆角矩形按钮。
- 战绩面板:展示 Win, Lose, Max Score 等统计数据。

4.2 游戏主界面设计
BlackjackGameActivity 是游戏进行的主要场所。
- 布局结构 :使用
FrameLayout作为根布局,背景设置为绿色的牌桌图片 (bg_game)。 - 自定义视图 :核心区域是一个自定义 View ------
BlackjackTableView。- 该 View 负责通过
Canvas绘制扑克牌、玩家区域和庄家区域。 - 动态显示发牌动画和翻牌效果。
- 该 View 负责通过
- 状态栏 :底部包含一个
TableLayout,实时显示当前的胜负场次和最高分,方便玩家随时查看战绩。 - 交互弹窗 :游戏结束时,通过
AlertDialog弹出胜负结果(如 "Player Win", "Banker Burst" 等),并提示玩家确认。

4.3 菜单功能设计
在下注界面,通过右上角的菜单栏 (Option Menu) 提供额外功能:
- Restart:重置所有游戏数据,恢复初始资金。
- Asset (Prop):查看当前拥有的特殊资产(如有)。
- Help:弹出帮助对话框,介绍游戏规则。
- Exit:退出应用程序。
4.4 数据库设计
系统使用 UserDataDB 类管理数据库 blackjack_db。
主要数据表 blackjack_table 结构如下:
| 字段名 | 类型 | 描述 |
|---|---|---|
_id |
integer | 主键,自增 |
max_score |
text | 玩家历史最高资产 |
my_money |
text | 玩家当前持有金币 |
win_count |
text | 胜利场次 |
lose_count |
text | 失败场次 |
此外,还有 blackjack_menu_table 用于扩展存储菜单或道具相关的数据。
五、创新与改进
5.1 破产补助机制
为了提升用户体验,防止玩家因运气不佳输光所有金币而无法继续游戏,系统引入了"破产补助"机制。
- 逻辑:当检测到玩家金币不足以支付最小筹码时,系统会自动发放救济金(如 500 金币)。
- 实现 :在
BettingActivity的菜单或逻辑中判断mMoney状态,触发update操作增加数据库中的金币数值。
5.2 数据自动持久化
区别于普通的单机游戏,本应用实现了完整的数据持久化。
- 实时保存 :每局游戏结束(结算胜负)后,系统会立即调用
mDB.update()方法,将最新的金币和战绩写入 SQLite 数据库。 - 自动恢复 :应用下次启动时,在
onCreate方法中读取数据库,恢复玩家上一次的进度,确保持续的游戏体验。
5.3 沉浸式体验
应用在界面设计上追求沉浸感:
- 全屏显示 :在 Activity 中使用了
requestWindowFeature(Window.FEATURE_NO_TITLE)和相关 Flag,隐藏了系统状态栏,让玩家专注于游戏桌面。 - 视觉风格:整体采用深绿色背景模拟真实赌场牌桌,配合清晰的扑克牌资源,营造身临其境的氛围。
六、总体设计展示
6.1 打开 app,进入下注界面
启动应用后,用户首先看到下注界面。界面上方显示当前持有的金币数,下方列出历史战绩。若为首次进入,金币为初始值(如 5000)。
6.2 下注与开始游戏
用户点击屏幕中央的圆形筹码按钮(5, 10, 20, 50),下注金额会累加显示在屏幕上。确认下注金额后,"Play Game" 按钮变为可用状态,点击即可进入游戏。
6.3 游戏过程:要牌与停牌
进入游戏界面,系统自动发牌。屏幕下方显示玩家手牌点数。
- 若点数较小,玩家可选择继续要牌。
- 若点数接近 21 点,玩家选择停牌,等待庄家操作。
6.4 游戏结算:胜负判定
庄家操作结束后,系统弹出对话框显示本局结果(如 "You Win!", "Push" 等)。点击确认后,界面自动跳转回下注界面(或重置牌桌),金币数根据胜负自动增减。
6.5 查看战绩与菜单
在下注界面,用户可以清晰地看到自己的胜率变化。点击右上角菜单键,可以调出帮助信息或重置游戏数据,重新开始挑战。
6.6 退出操作
通过菜单中的 "Exit" 选项或连续按返回键,可以安全退出应用。系统确保所有数据在退出前已保存。
七、总结与心得
7.1 总结
本次课程设计完成了一款功能完备的 Android 21点游戏。项目从需求分析出发,经历了界面设计、逻辑编码、数据库集成和测试调试等阶段。最终实现的应用具备流畅的游戏体验和稳定的数据存储功能,达到了预期的设计目标。
7.2 心得
通过开发这个项目,深入理解了 Android 应用的生命周期管理、Activity 之间的跳转与传值、以及 SQLite 数据库在移动端的应用。特别是在处理游戏逻辑(如 A 的点数计算、胜负判定)时,锻炼了逻辑思维能力。同时,自定义 View 的绘制也让我对 Android 的图形系统有了更直观的认识。未来可以考虑加入网络对战功能,将单机游戏升级为联机游戏。