小学生系列之五——乘法口诀表(画布版)
一、功能描述
显示乘法口诀表,程序的执行结果如图1所示。
图1 用画布显示乘法口诀表
二、界面设计
如图2所示,在项目中添加两个组件——画布及按钮,Screen1的方向设为横屏,标题改为“乘法口诀表——画布版”,设画布的宽、高均为充满,按钮的宽为充满,显示文本为“开始”。
图2 设计视图中的用户界面
三、认识代码块
1、手动添加列表项
这是一个可扩展的块,可以手工向列表中添加列表项。
2、全局变量
用来“记住”在整个应用中都必须使用的临时数据。
3、选择列表项
列表中的数据是按顺序排列的,每个列表项的位置是固定的,根据列表项的位置(排列序号,也称为索引值)可以提取出列表项。
4、画布的写字功能
注意写字时,横向(x)坐标位于整段文字的中点,纵向(y)坐标位于文字的底线。
5、常量
这两个值在程序运行过程中保持不变,只有应用的开发者(程序员)可以修改它们的值(图5中的x0、y0亦然)。这一类的变量也被称作常量。
四、语法要点
1、复杂数据类型——列表
在上一节(乘法口诀——标签版)中,介绍了简单的数据类型——数字、文本及逻辑值,这里要介绍的是一种复杂的数据类型——列表。如图3所示,列表中包含一个或多个列表项,它们可能是简单的数据类型,也可能是列表。图3中的列表项为颜色,共包含9个列表项,以对应于乘法口诀表中的9行或9列。根据我们在调色板案例中掌握的知识,颜色也是一种复杂的数据类型。
图3 认识列表
2、提取数学公式
在使用画布的写字功能时,需要确定文字的x、y坐标,如何根据行和列的值,来计算x、y的值,这对于小学生来说,也算是一道应用题了。首先我们声明了4个全局变量:x0、y0、行距及列距。虽然它们的值在程序运行过程中保持不变,但在App Inventor里依然称其为变量(在文本编程语言中有常量这种类型)。
如图4所示,(x0,y0)是第一行、第一列文本的坐标,每增加一列,x坐标的增加值为列距,每增加一行,y坐标的增加值为行距。因此,任何行列文本的坐标为:
x =x0 + 列距*(列数-1)
y =y0 + 行距*(行数-1)
我们可以将行、列均为1或2的值代入公式进行检验。
图4 将行、列值换算为x、y坐标值
画布是一个充满自由度的创作工具,我曾经用画布开发了俄罗斯方块及贪吃蛇等游戏,仅凭画布的画线功能,通过对坐标的计算,控制游戏中角色的移动(当然离不开计时器的驱动)。
五、课堂练习:在本例中按行区分颜色。
六、课堂提问:如何检验文本中心点的位置?
七、课后作业:如何确保所有的列对齐?
图5 完整的代码