App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网

第5课 编写程序——设计游戏结尾

到目前为止,我们只是用屏幕的标题来显示游戏结束的状态,我们需要为游戏设计一个正式的结尾,并实现一些重要的功能。这些功能包括:

  1. 显示游戏得分;
  2. 显示历史最高得分;
  3. 清除历史记录;
  4. 返回游戏;
  5. 退出游戏。

上述功能的实现主要依赖于对话框组件及微数据库组件。我们需要创建一个名为游戏结束的过程,并在适当的位置调用该过程。

1、显示游戏得分

有两种情况会导致游戏结束:①剩余时间=0;②翻牌对数=8。这两种情况需要分别加以考虑,其中关键条件是剩余时间是否>0。如果剩余时间>0,则计算总分,否则将没有成绩。

对话框组件提供了很多内置过程(紫色的代码块),在调用这些过程时,屏幕上会弹出一个对话框:有些对话框只显示简单的信息,信息停留片刻后,就会慢慢隐去;有些则可以显示多项信息,并提供若干按钮供用户选择。在用户选择了某个按钮之后,将触发“选择完成”事件,开发者可以从事件携带的消息中,获得用户的选择,并针对不同选择,执行不同的程序分支。在游戏结束过程中,我们先使用一个简单的只带一个按钮的内置过程,如图1- 39所示。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 39 创建游戏结束过程
然后在两处分别调用游戏结束过程,如图1- 40及图1- 41所示。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 40 当剩余时间为零时,调用游戏结束过程
App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 41 当翻牌对数为8时,调用游戏结束过程
测试结果如图1- 42所示。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 42 对游戏结果的不同处理

2、保存游戏得分

针对剩余时间>0的情况,我们用一张流程图来理清解决问题的思路,如图1- 43所示。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 43 本次得分与历史记录比较,并保存其中的高分
App Inventor支持将应用中的数据保存在手机里。通过调用本地数据库组件的内置过程,可以保存、提取或清除数据,具体方法可参见 http://www.17coding.net/reference 与本地数据库(TinyDB)相关的条目。由于要显示历史记录,并允许玩家清除记录和退出游戏,因此我们选用对话框组件最复杂的内置过程,该内置过程可显示标题及消息,并提供三个按钮供用户选择。我们用标题来显示历史记录,用消息来显示本次得分,三个按钮分别实现“清除记录”、“退出游戏”及“返回游戏”的功能 。按照流程图的思路,我们将对游戏结束过程进行改造,如图1- 44所示。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 44 改写后的游戏结束过程
经测试,游戏运行正常,测试结果见图1- 45。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 45 游戏测试结果

3、处理对话框的按钮选择

在对话框组件提供的“完成选择”事件里,我们可以通过事件程序中的“选择值”来侦测用户的选择。事件处理程序如图1- 46所示。这里我们暂时用屏幕的标题栏来显示程序的执行结果,稍后我们将写一个游戏初始化过程:当用户点击“Cancel”或“返回游戏”按钮时,将开始新一轮的游戏。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 46 当对话框完成选择时,执行该程序
注:退出程序功能在测试阶段将无法实现,当游戏开发完成,编译成apk文件并安装到手机上时,该功能才能生效。

4、创建游戏初始化过程

如图1- 47所示,游戏初始化过程将实现以下功能:

  1. 生成新的随机图案列表
  2. 让所有卡片显示背面图案
  3. 让全局变量翻牌对数=0
  4. 让全局变量剩余时间 = 60
  5. 让滑块回到起始点
  6. 得分显示为0
  7. 启动游戏计时器,开始新的一轮游戏。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 47 游戏初始化过程
最后一项任务是将对话框完成选择事件中的临时测试语句替换为游戏初始化过程,如图1- 48所示。

App Inventor编程开发集锦1-水果配对-第5课-设计游戏结尾-少儿编程教育网
图1- 48 最终的完成选择事件处理程序
在三项选择中,第一项选择“退出程序”将退出游戏,而其他选择在执行完若干指令之后,还会再回到游戏中。