原本以为很简单,写进来才发现细节很繁复。
初始化游戏不能出现可以不操作而直接消除的棋子。
最后想到的解决方案是生成的同时向前向上匹配,
如果能消除就重新生成,不能就下一格。
移动格子后查找可以消除的格子。
起初想的关注点就是移动后的两个格子,一调试发现每推进一格,都需要关注它的垂直的两个方向。这一块代码很吓人,写了n层while循环……
消除后空格上移。
这块又有一个细节,当空格上面的格子掉落后,
需要重新匹配地图中可以消除的格子,消除完又是一波掉落。所以这块需要设置一个无限次数循环,结束条件为不再有新的可消除格子产生。
消除停止后,再次填充为空的格子。
这点简单,把初始化的代码再拉过来跑一跑就ok。
想到但懒得实现的一个小细节——判断死局。
当前地图没有可通过移动消除的格子为死局,需要重新初始化游戏。关键点在判定上,想到的方案是for循环遍历所有格子。以每个格子为关注点,分别向上向下向左向右移位(代码中有交换方法,略加改造),如果能交换成功,直接返回活局。如果遍历完成还没有交换成功,返回残局。然后初始游戏。这个功能下次想写安卓时再实现吧,目前调试发现死局并不容易出现。
bug应该不少,但是关键代码好了,这个小游戏暂告一段落。
补充一下:代码编写调试全部在手机的aide软件中完成。耗时一天。下面上代码。
初始化游戏不能出现可以不操作而直接消除的棋子。
最后想到的解决方案是生成的同时向前向上匹配,
如果能消除就重新生成,不能就下一格。
移动格子后查找可以消除的格子。
起初想的关注点就是移动后的两个格子,一调试发现每推进一格,都需要关注它的垂直的两个方向。这一块代码很吓人,写了n层while循环……
消除后空格上移。
这块又有一个细节,当空格上面的格子掉落后,
需要重新匹配地图中可以消除的格子,消除完又是一波掉落。所以这块需要设置一个无限次数循环,结束条件为不再有新的可消除格子产生。
消除停止后,再次填充为空的格子。
这点简单,把初始化的代码再拉过来跑一跑就ok。
想到但懒得实现的一个小细节——判断死局。
当前地图没有可通过移动消除的格子为死局,需要重新初始化游戏。关键点在判定上,想到的方案是for循环遍历所有格子。以每个格子为关注点,分别向上向下向左向右移位(代码中有交换方法,略加改造),如果能交换成功,直接返回活局。如果遍历完成还没有交换成功,返回残局。然后初始游戏。这个功能下次想写安卓时再实现吧,目前调试发现死局并不容易出现。
bug应该不少,但是关键代码好了,这个小游戏暂告一段落。
补充一下:代码编写调试全部在手机的aide软件中完成。耗时一天。下面上代码。










