白二娃
上期我们已经可以自己制作一个“点名神器”的APP,并安装在手机中正常使用了。由于网络环境的不同以及Android手机环境的碎片化,你的APP编写、安装以及调试可能需要解决更多的问题,不过当第一个程序顺利运行起来后,我們就可以开始编写更加复杂实用的APP了。
这次我们一起来开发一款训练口算的小游戏,让孩子在游戏中巩固口算能力。在这个实例中我们将会涉及变量、选择结构、传值及嵌套等知识点。另外我们还要在学习编程的一开始就养成写注释的习惯。
“口算练习”是一款儿童加减法运算的APP小游戏,让口算练习不再枯燥。我们以加法为例制作APP的第一版,完成之后再由你自己思考如何添加上减法的功能。
如图1所示,点击“开始”按钮,自动生成算式和答案,其中加数和被加数取个位数;点击“√”和“×”按钮来判断给出的算式对错。每回答正确一题,则加1分;游戏中有3条生命,即可以有3次出错的机会,答错一题,生命值减1,并伴有音效;如生命值为0,则游戏结束;可以点击“开始”按钮再次启动游戏(如图1)。
根据功能需求,准备好音效(答错的声音wrong.wav)和两张图片(“√”right.png和“×”wrong.jpg)。登录开发网站后(http://app.gzjkw.net/),新建项目“kousuanlianxi”,上传准备好的素材。App Inventor支持的图片文件格式有.png、.gif和.jpg等;支持的音频文件格式有.wav、.arm、.mpg和 .mp3等(如图2)。
Screen1的屏幕对齐改为居中,放入3个水平布局组件,注意将需要在逻辑中使用的组件重命名。
第一行为算式,水平和垂直都选居中对齐,宽度为充满。用5个标签标示算式的两个数字A和B、符号、等号和结果C,字号都改为70。
第二行为对错选项,水平和垂直都选居中对齐,宽度为充满。放入2个按钮,图像选择导入的素材,删除文本。
第三行为计分,放入4个标签,为得分、分值、生命、生命值,字号50,分值为蓝色,生命值为红色。
第四行为开始按钮,放入按钮,设置底色为橙色,文本为“开始”,文本颜色为白色。
非可视组件为音效和对话框。音效源文件为wrong.wav。对话框属性全部为默认(如图3)。
App Inventor的屏幕设计虽然比较简单,通过直接选取一些组件加入屏幕中即可,但组件的位置并不能做到拖放到哪里就停留在哪里。为了达到屏幕组件布局效果,需要用到屏幕布局类组件。
我们这里仅以实现加法功能为例,你可以在完成程序基础功能后再思考实现减法需要哪些修改。
点击“开始”按钮,得分的初始值为0,生命初始值为3,产生一个新的算式。这里约定新的算式“A+B=C”产生规则为:加数A和被加数B取0-9之间的随机整数,C=A+B+(-1到 1间的随机整数)。
A、B、C的值是不断变化的,在程序设计语言中称之为“变量”,在App Inventor中,使用“变量内置块”定义变量。变量包括全局变量和局部变量,全局变量在整个APP中都可以调用,而局部变量只能在它的作用范围内调用。变量在使用前需要先定义和赋初值。注意,同一个屏幕中全局变量名称不能够重复。设置变量后就可以用变量组件中的“取…”和“设…为”模块获取该变量的值和给这个变量赋值。
从开始按钮找到“当…被点击,执行”。我们使用了生成随机数模块;要让加法模块可以加3个数,可以点模块前的齿轮,拖一个数加进去。从标签1_A,找到“设置标签文本”,为标签A、B、C设置显示值。设置分值标签和生命值标签的数值,代码如图4。
当点击“√”按钮时,首先判断算式“C=A+B”是否成立,如果算式成立,则得分加1分,并产生一个新的算式,继续进行游戏;如果算式不成立,则生命值减1,播放“失败”的音效;再判断生命值是否为0,如果为0,则显示警告信息“游戏结束,请重新开始”,否则产生一个新的算式,继续游戏。流程图如图5所示。
“产生新的算式”需要多次使用,可以封装这个模块以减少代码冗余(图6)。
流程图的菱形是一个条件判断,这种程序结构称为选择结构。点击“如果…则…”模块前的小齿轮,可以添加否则条件。标签文本在运算中会自动转换为数值并参与计算。App Inventor中并不严格区分文本和数据类型,只要符合转换规则,不同数据类型的值都可以自动转换。比如,数值7.4可以转换为文本,反过来也一样,但文本“7天”不能转换为数值。
按钮“√”的代码(如图7)。
按钮“×”的代码与“√”的代码类似,唯一不同是判断式“C≠A+B”(如图8)。
为了让代码模块具有更好的可读性,让别人容易理解为什么要这么写,有时需要为特定的模块加上一些说明。这些说明就是软件开发中的注释。在App Inventor中,可以在任意模块上单击鼠标右键,来添加注释。
如果我们需要随机产生“+-×÷”,那么得到的结果应该根据随机产生的运算符来进行分类讨论。如何确定产生哪种运算符呢?可以通过产生的随机数1到4来表示四则运算符号。
其实直接做成口算填空题比判断题更简单,直接用文本输入框就行了。