3.4.7 糖果掉落状态的设计与实现

当游戏开始棋盘为空时,或者删除糖果使棋盘上出现了空格子时,会进入糖果掉落状态。

糖果掉落状态的主要功能由Fall方法实现,该方法将棋盘划分为顶行和顶行以下的所有格子两部分,下面分别对这两部分做不同的操作。

(1)遍历顶行所有格子。当检测到顶行有空格子时,则生成新的糖果并注册动画。

(2)遍历顶行以下所有格子。如果发现当前格子有糖果,但当前格子下方的格子为空时,则注册从当前格子往其下方格子掉落糖果的动画和回调事件。具体代码如下。

代码位置:见源代码目录下Assets\Scripts\GameManager.cs。

根据上文的代码可知,在 Fall 方法的返回值为 true 的情况下,一定有注册动画和事件,当动画播放结束之后,各数据表才会更新数据,所以需要先跳转到动画状态,等待动画播放结束,再回到掉落状态。由此可知,有三种情况会进入掉落状态,分别为游戏开始时、删除糖果后、掉落动画结束后。而跳出掉落状态的条件是“已经没有掉落的糖果”。也就是说,在最近一次调用Fall方法的返回值为false时,将跳出掉落状态,进入结算状态。

具体实现方法为:首先需要调用Fall方法,如果调用结果为true,则需要跳转到动画状态并将下一状态设为掉落状态。等待动画播放完毕后回到掉落状态又会再次调用Fall方法,直到Fall方法返回false,进入检测状态。代码如下。

代码位置:见源代码目录下Assets\Scripts\GameManager.cs。

至此,糖果掉落状态的设计与实现介绍完毕,本节省略了部分声明字段和对字段赋值的代码,如有需要请读者自行翻阅本实例的源代码。