Android 21点游戏APP设计报告

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 点游戏体验,主要功能需求如下:

  1. 下注功能:玩家在开始游戏前,需要选择下注的金额。系统提供多种筹码面额(如 5, 10, 20, 50)供玩家选择。
  2. 发牌与游戏流程:系统需按照 21 点规则进行发牌,玩家可以查看自己的手牌和庄家的一张明牌。
  3. 玩家操作:玩家根据手牌点数,可以选择"要牌"(Hit)或"停牌"(Stand)。
  4. 胜负判定:游戏需自动计算点数,处理爆牌(Bust)、黑杰克(Blackjack)等特殊情况,并根据规则判定玩家与庄家的胜负。
  5. 数据记录:系统需要记录玩家的资产(Money)、最高分(Max Score)、胜场(Win Count)和负场(Lose Count),并在应用关闭后保留这些数据。
  6. 破产保护:当玩家资产不足以进行最基本的下注时,系统应提供"破产补助",确保游戏可以继续进行。

2.2 功能模块分析

根据需求分析,系统主要划分为以下三个核心模块:

  1. 下注模块 (Betting Module):

    • 负责显示当前玩家资产和战绩。
    • 提供不同面额的筹码按钮供玩家累加赌注。
    • 提供"开始游戏"和"重置游戏"的入口。
    • 处理破产逻辑,发放救济金。
  2. 游戏核心模块 (Game Core Module):

    • 牌桌视图 (TableView):绘制游戏背景、扑克牌、动画效果。
    • 游戏逻辑 (Game Logic):包含洗牌、发牌、点数计算、庄家 AI(自动要牌逻辑)等。
    • 交互控制 (Interaction):响应玩家的触摸事件,执行要牌或停牌操作。
  3. 数据存储模块 (Data Storage Module):

    • 利用 SQLite 数据库存储用户的游戏数据。
    • 提供数据的增删改查接口,确保数据的持久化和一致性。

2.3 系统功能操作流程图

系统整体操作流程如下:

  1. 启动应用 -> 进入下注界面。
  2. 下注 -> 点击筹码按钮增加赌注 -> 点击 Start 按钮。
  3. 游戏开始 -> 系统发牌(玩家两张,庄家一明一暗)。
  4. 玩家决策 -> 若点数不足 21,选择"要牌"或"停牌"。
    • 要牌 -> 获得一张新牌 -> 若超过 21 点则爆牌(负)。
    • 停牌 -> 结束玩家回合,进入庄家回合。
  5. 庄家回合 -> 庄家揭开暗牌 -> 若点数小于 17 则强制要牌,直到大于等于 17 或爆牌。
  6. 结算 -> 比较双方点数 -> 判定胜/负/平 -> 更新玩家资产和战绩。
  7. 循环 -> 返回下注界面或直接开始新的一局。

是
否
否
是
是
否
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 工具介绍

  1. Android SDK:提供了 Android 平台开发的 API 库和工具集,支持界面绘制、组件交互、系统服务调用等。
  2. SQLite :Android 内置的轻量级关系型数据库,用于存储玩家的金币、战绩等结构化数据。本项目通过 SQLiteOpenHelper 进行数据库的创建和版本管理。
  3. XML Layouts:使用 XML 定义界面布局,实现了 UI 结构与逻辑代码的分离,便于界面的维护和适配。

四、界面设计

4.1 游戏启动与下注界面设计

BettingActivity 是应用的入口界面。

  • 布局结构 :采用 ConstraintLayout 实现灵活的适配。
  • 顶部:显示应用名称的 Toolbar。
  • 中部 :核心交互区。
    • 筹码区 :放置了 5, 10, 20, 50 四种面额的圆形按钮,背景使用 bg_button_circle_selector 实现点击反馈。
    • 信息展示:显示当前的下注金额 (Clip In)。
  • 底部 :
    • 操作按钮:包含 "Restart" (重置) 和 "Play Game" (开始) 两个圆角矩形按钮。
    • 战绩面板:展示 Win, Lose, Max Score 等统计数据。

4.2 游戏主界面设计

BlackjackGameActivity 是游戏进行的主要场所。

  • 布局结构 :使用 FrameLayout 作为根布局,背景设置为绿色的牌桌图片 (bg_game)。
  • 自定义视图 :核心区域是一个自定义 View ------ BlackjackTableView。
    • 该 View 负责通过 Canvas 绘制扑克牌、玩家区域和庄家区域。
    • 动态显示发牌动画和翻牌效果。
  • 状态栏 :底部包含一个 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 的图形系统有了更直观的认识。未来可以考虑加入网络对战功能,将单机游戏升级为联机游戏。

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui