Android开发入门——推箱子游戏开发实战(十二)

绘制游戏局面

  本文是推箱子游戏程序开发的第七步。系列文章前五篇描述准备工作,故本文编号是(十二)。本文讲解如何绘制游戏局面。

本文目标
  本文讲解如何绘制游戏局面。游戏局面的示例如图1,图2所示。这两幅图中,红旗代表箱子的目的地。在任一关卡,玩家把全部箱子推到各个标有红旗的单元格上,就过了这一关。
  Android开发入门——推箱子游戏开发实战(十二)_第1张图片

  实现绘制游戏局面这一任务,要解决两个子问题:
  1. 如何在程序中存储游戏局面?
  2. 如何读取游戏局面的存储数据,显示到手机屏幕上?
  第1个问题是本文的关键。我们知道,不仅每一关的游戏局面不一样,而且由于搬运工或箱子的移动,游戏局面是不断变化的。因此,我们要用一个“变量”来存储游戏局面。
  通过本文,你将学习到:
  1. 用数据类存储游戏局面的方法。
  2. 静态数据成员的用法。

实现思路
  解决第一个子问题,即“如何在程序中存储游戏局面”,的思路是,采用矩阵来存储游戏局面,用字符来表示单元格的内容(例如,字符B (Box) 表示箱子;字符W (Wall) 表示墙体)。矩阵的元素与游戏局面上的单元格一一对应,如下一节的图3所示。矩阵的元素是字符型的。
  解决第二个子问题的思路是,依次读取矩阵的元素,根据元素的字符值在相应的单元格内绘制图像。例如,如果矩阵元素值为’B’,则绘制箱子;如果矩阵元素值为’W’,则绘制墙体。
  我们约定,游戏局面固定为12行12列。这一约定是为了减少次要的细节,使我们聚焦于核心内容。
  
实现步骤
  我们要区分游戏开局和游戏局面这两个概念。

  • 开局。推箱子游戏的每一关,都有一个开局。这是玩家第一次玩(或者重头玩)这一关,最开始看到的游戏局面,也就是这一关的初始局面——搬运工和箱子都没有移动过的局面。各个关卡的开局数据始终要存在。这是说,推箱子游戏程序运行期间,开局数据要存在;程序下一次、下下次运行,开局数据还是要存在。这是因为,即使以前玩家一个玩过关卡,在以后玩家都有可能重头玩这一关。还有一点,开局是不会变化的。
  • 局面。玩家在玩一个关卡期间,这个玩家在游戏界面所看到状态叫做局面。一个关卡的开局是这一关的初始局面。搬运工或箱子移动后,都将导致状态变化,形成新的局面。可见,局面是不断变化的。

下文中,首先详细讲解存储游戏局面的方法。在代码实现上,我们将讲解:
1. 如何存储游戏关卡的开局?
2. 如何从关卡号得到该关卡的开局?
3. 如何存储和绘制游戏关卡的局面?

  具体的做法在《编写推箱子游戏程序(第七步)——绘制游戏局面》一文(Word格式,13页)中有详细阐述,敬请下载阅读。
  代码可从GitHub网站下载,链接是https://github.com/yeahatgithub/moveboxgame。本文对应的提交版本是Commits on Aug 15, 2016。你可以点击网页上的“16 commits”查看各个提交版本。Android开发入门——推箱子游戏开发实战(十一)文末介绍了如何获取某个提交版本。

学习Android开发,要做的就是实践、实践、再实践。祝好运!

你可能感兴趣的:(Android开发)