本文链接: https://xiets.blog.csdn.net/article/details/50188259
声明: 游戏中使用到的部分图片和音频资源来自网络,资源版权和游戏创意属原作者,这里仅供学习交流。
1. 概述
2048 是一款非常热门的数字益智类游戏,操作规则很简单,在屏幕中有四行四列共 16 个卡片,初始时随机在其中两个卡片生成两个数字 2 或 4,然后手指可在卡片组区域 上下左右滑动 将所有卡片移动到 上侧 / 下侧 / 左侧 / 右侧。如果在移动的方向上有数字相同并连着的两个卡片发生“碰撞”,则这两个卡片的数字相加合并成一个卡片,每移动完一次随机在一个空白卡片处生成一个数字 2 或 4。通过不断移动卡片,直到拼凑出数字为 2048 的卡片,则游戏胜利;如果卡片不可再移动(没有空白卡片)又没有拼凑出数字为 2048 的卡片,则游戏结束。
2. 游戏效果展示
HTML5 平台 在线演示(浏览器需要支持 WebGL): https://xiets.github.io/Game2048ForGDX/
Desktop 平台项目运行截图:
3. LibGDX 工程创建
为了方便游戏代码在不同平台之间调试和完成后发布到不同平台,这里我使用 LibGDX 开发包中的 gdx-setup.jar 工具创建 Gradle 关联工程,工程相关参数如下:
- 项目名称(Name): Game2048ForGDX
- 项目包名(Package): cn.appkf.game2048
- 游戏程序入口类(Game class): MainGame
- LibGDX 版本: 1.6.1
- Sub Projects: Desktop,Android,Ios,Html
- Extensions: 不需要任何扩展包
项目的创建步骤参考: LibGDX_1.5: 使用 Gradle 创建 LibGDX 所有平台的关联项目
4. 游戏的设计
程序结构的大致组成如下图所示:
程序中的游戏元素节点的结构组成关系如下所示:
- DesktopLauncher / AndroidLauncher / IOSLauncher / HtmlLauncher(平台启动器)
- MainGame(游戏程序入口类,表示整个游戏应用)
- GameScreen(游戏主场景,包含 4 个舞台)
- GameStage(主游戏舞台,划分为上中下三个部分)
- TopGroup
- Image(2048 LOGO)
- ScoreGroup(当前分数)
- ScoreGroup(最佳分数)
- MiddleGroup
- Image(纯色背景)
- CardGroup(4 行 4 列 共 16 个卡片)
- Image(卡片背景)
- Label(卡片上显示的数字文本标签,2、4、8、16…)
- BottomGroup
- Button(帮助按钮)
- Button(退出按钮)
- TopGroup
- HelpStage(帮助舞台)
- Image(半透明的黑色背景遮盖)
- Image(帮助内容,以图片方式展示)
- GameOverStage(游戏结束舞台)
- Image(半透明的黑色背景遮盖)
- Label(游戏结束文本提示标签)
- Button(返回按钮)
- Button(再来一局按钮)
- ExitConfirmStage(退出确认舞台)
- Image(半透明的黑色背景遮盖)
- DialogGroup(自定义对话框)
- Image(对话框背景)
- Label(对话框上的文本提示)
- Button(确认按钮)
- Button(取消按钮)
- GameStage(主游戏舞台,划分为上中下三个部分)
- GameScreen(游戏主场景,包含 4 个舞台)
- MainGame(游戏程序入口类,表示整个游戏应用)
除了上面主要的程序结构类之外,还有一些与结构无关的类:
- Res(保存了所有的资源常量)
- IDataModel(数据模型接口)
- DataModelImpl(数据模型实现)
下面详细介绍主要的几个类:
(1) MainGame(游戏主程序入口类)
MainGame 类表示整个游戏应用。MainGame 中包含了一个游戏场景(GameScreen)。在 MainGame 中进行各种参数的初始化设置,加载资源等操作,并且在 MainGame 中维护资源管理器(AssetManager),提供访问资源接口等。
(2) GameScreen(主游戏场景)
本游戏中就一个游戏场景 GameScreen,该场景中包含了四个舞台,分别为 GameStage(主游戏舞台)、HelpStage(帮助舞台)、GameOverStage(游戏结束舞台)、ExitConfirmStage(退出确认舞台)。其中 GameStage 作为主游戏舞台将一直被显示,其他舞台由 GameScreen 提供方法在适当时机控制显示和隐藏。
(3) GameStage(主游戏舞台)
GameStage 是游戏的主要部分,为了更好的描述主游戏舞台,将 GameStage 划分为了三个部分,分别为上中下三个演员组。
- TopGroup: 包含一个 2048 LOGO,当前分数显示,最佳分数显示。
- MiddleGroup: 包含了 4 行 4 列共 16 个数字卡片(实际为背景图片加文本标签组成的演员组)。
- BottomGroup: 包含了 “游戏帮助” 和 “退出游戏” 两个按钮。
(4) HelpStage(帮助舞台)
点击 “游戏帮助” 按钮显示 HelpStage。HelpStage 由一张带文字说明的大图片组成。
(5)GameOverStage(游戏结束舞台)
游戏过关(拼凑出 2048) 或 游戏失败(卡片不可再移动并且没有拼凑出 2048)时显示。
(6) ExitConfirmStage(退出确认舞台)
点击 “退出游戏” 按钮 或 按返回键 时显示 ExitConfirmStage,ExitConfirmStage 中包含了一个自定义的退出确认对话框(其实是一个演员组)。
(7) IDataModel / DataModelImpl(数据模型)
DataModelImpl 中封装了 2048 游戏的核心数据结构与算法逻辑。DataModel 维护了一个 4 x 4 的二维整形数组,用于表示 4 行 4 列 卡片中的数字(0 表示不显示数字),并提供了操作二维整形数组中数据的方法(例如 上下左右 “移动” 数据),然后在 MiddleGroup 中获取到数据显示到 4 行 4 列的数字卡片上。
5. 游戏源码
更加详细的游戏设计和游戏逻辑请结合上面所说的设计思路查看完整源码。