第22课 打字练习

图形化编程对于编程教育来说确实很方便,上手也非常快,不过我感觉若程序比较复杂,还是代码编程比较快,尤其是涉及多维的数组、对象等概念时。

我在实际的教学中,感觉对于中小学学生来说,进行编程的最大问题其实是对键盘不熟悉。回想以前小霸王学习机上的打字游戏,我想是不是可以通过Scratch来设计一个打字游戏。

打字游戏的功能是每隔一定的时间,从舞台区的上方随机地下落一个字母,我们必须根据字母按下键盘上相应的按键,如果按键正确,就会从舞台区底部发射一个火箭,当火箭碰到字母时就会将字母消除。而如果字母在碰到底部之前还没有被消灭,则生命值会减1,如果生命值为0则游戏结束。

这里我们不会一下将26个字母都做出来,而是先选择8个字母将游戏的功能和程序架构实现出来,剩下的字母大家可以按照相同的方式添加到自己的程序当中。

下面我们来一步一步地实现这个打字游戏。

第一步是添加角色,我们选择的字母是Q、X、R、B、J、I、Y、P,这8个字母不在键盘的同一行,而且横跨了整个键盘,能够体现游戏的难度。另外再加上我们要发射的火箭“Rocketship”,总共要添加9个角色,如图22-1所示。


图22-1 选择角色

在Scratch的角色库中有很多种字母外形可以选,这里我选择一种橙色的字母。

调整角色的大小并将它们摆在合适的位置,因为图22-1所示的字母比较少,所以看起来比较稀疏。

第二步是设定一个1 ~ 8的随机数定时发生器(设定1 ~ 8是因为我们只有8个字母角色)。我们将这段程序放在舞台的程序区,如图22-2所示。


图22-2 随机数定时发生器的程序

这段程序比较简单,当绿旗被点击,开始运行程序时,会在1到8之间产生一个随机数,同时将这个随机数广播出来,之后等待1秒,表示我们的随机数产生时间间隔为1秒。同时我们找个背景替换之前的白色背景。

第三步就是要编写每个角色的程序了,每个角色对应一个随机数,当收到这个随机数的消息时,角色开始下落。

这里以字母Q为例,Q对应的是随机数1,所以当接收到消息“1”时开始运行这段程序,如图22-3所示。

先让角色移动到舞台区上方,然后显示出来(这是和之后的隐藏对应的);之后加一个“重复执行”指令模块,其中不断地让角色的y坐标减小,即让角色往下移动;而当角色碰到舞台边缘时,就将角色隐藏起来,并停止运行当前程序,等待下次触发。

其他字母的程序类似,将这段程序复制到其他的字母角色中,复制过去的程序需要调整两个地方:一是接收到的消息,字母Q对应的是数字0、字母X对应的是数字1,依次类推;二是接收到消息之后移动到的初始位置,8个字母在一条水平线上的不同位置,所以y坐标一致,但x坐标是不同的,要根据字母的位置进行调整。


图22-3 字母Q角色的程序

8段程序运行完成后,如果每一个字母都落下来过,那么此时舞台区应该就只有1个字母。

第四步是添加发射火箭的程序。火箭角色的程序其实和字母角色的程序非常像,只是一个往上飞,一个往下落;一个是靠按键触发,一个是靠广播的消息触发,具体程序如图224所示。


图22-4 火箭角色的程序

运行程序时,我们可能会发现,如果在火箭飞行过程中按下另一个按键,火箭就会从空中消失,直接出现在另一个位置,这对于程序来说是一个bug,修复的方式是建立一个表示火箭状态的变量“state”,如图22-5所示,当火箭飞行时,其他按键是不起作用的。