图形化编程对于编程教育来说确实很方便,上手也非常快,不过我感觉若程序比较复杂,还是代码编程比较快,尤其是涉及多维的数组、对象等概念时。
我在实际的教学中,感觉对于中小学学生来说,进行编程的最大问题其实是对键盘不熟悉。回想以前小霸王学习机上的打字游戏,我想是不是可以通过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所示,当火箭飞行时,其他按键是不起作用的。
图22-5 建立变量“state”
因为这个变量只有火箭角色会用到,所以可以定义变量仅适用于当前角色,加入变量的火箭角色的程序如图22-6所示。
图22-6 加入变量的火箭角色的程序
为了让大家看得更清楚,这里只列出了响应一个按键的程序,响应其他按键的程序都需要做相应的修改。
这里变量state等于1表示火箭在飞行,所以每次按下相应按键时首先要判断火箭是否在飞行,只有火箭不在飞行的状态下才会运行后续的程序。在后续的程序中,当我们将火箭显示出来后就要改变state的值,将其置为1;最后当火箭碰到舞台边缘隐藏后,再将变量state置为0。
第五步是添加火箭和字母的碰撞检测。这个功能在字母角色中添加,修改后的程序如图22-7所示。
图22-7 添加火箭和字母碰撞检测
在检测是否碰到舞台边缘的程序下方再添加检测是否碰到Rocketship的指令模块(因为火箭角色实际上是火箭飞船“Rocketship”,所以这里是“碰到Rocketship”指令模块),碰到火箭之后的操作和碰到舞台边缘后的操作一样,都是要隐藏角色并停止运行当前程序。不同的是,此时为了让火箭也消失,我们要广播“boom”消息。对应地,在火箭的程序中,当接收到“boom”消息时也要执行和碰到舞台边缘一样的操作,设火箭的state的值为0,隐藏并停止运行角色的其他程序,如图22-8所示。
图22-8 修改火箭角色的程序
其他字母的程序参考字母Q的程序,都要添加检测是否碰到火箭(Rocketship)的部分。第六步是添加生命值。这次要创建一个适用于所有角色的变量,变量名为HP,如图22-9所示。
图22-9 创建变量“HP”
将变量“HP”的初始值设为5,表示我们有5次让字母落到地面的机会。初始值的设定是在舞台的程序区完成的,程序如图22-10所示。
图22-10 设定变量“HP”的初始值
当字母落到底时,会将变量“HP”的值减1,所以我们要修改字母角色的程序,添加当角色碰到舞台边缘时将HP增加-1的指令模块,以字母Q为例,程序如图22-11所示。
图22-11 完善字母角色的程序
然后要修改其他字母角色的程序,每个字母落地都会影响HP的值,和字母Q的程序基本相同,这里就不一一列出了。最后添加游戏结束的提示。这里我们要新建一个角色,在角色的造型中输入“GAMEOVER”,放大到合适的大小,放在合适的位置,如图22-12所示。
图22-12 添加游戏结束的提示
新角色的程序功能就是不断地判断HP的值,当HP的值等于0时,显示“GAMEOVER”,同时停止运行所有程序,如图22-13所示。
图22-13 新角色的程序
新角色程序的启动条件是当 被点击。这个程序会在一个“重复执行”指令模块中,不断判断HP的值是不是等于0,如果HP的值等于0就将角色显示出来,即显示“GAMEOVER”,同时停止运行全部程序;如果HP的值不等于0,就将角色隐藏起来。
此时,这个只有8个字母的简易版打字练习游戏就完成了,大家可以自行将其扩展为26个字母的打字练习游戏,同时还可以添加一个记录分数的变量,用来显示我们成功地消除了多少个字母,游戏运行效果如图22-14所示。
图22-14 游戏运行效果
本节知识点:
1. 理解变量作用域(适用于所有角色、仅适用于当前角色)的概念。
2. 学会将变量加入“广播××”指令模块中。
扩展练习:
1. 将本程序扩展为26个字母的打字练习。
2. 加入计分功能。
发表评论 取消回复