卡卡在工作人员的引导下穿上游戏特制的装备。
“游戏中,您注意一下画外音,AI助手会给您提供一些提示信息“。
“好的,谢谢啦!”
卡卡进入虚拟世界,眼前飘过一连串游戏名称。《第六人格》、《王者归来》,《出征三体世界》……卡卡有点眼花缭乱。这时,一个标题进入了他的视野——《拯救!屏奴的逆袭》。
“屏奴?”卡卡有点好奇地问了一句。
AI助手的声音传来——“屏奴,就是每天面对各类屏幕(手机、电脑、Pad)无法自拔,已经影响健康的人……”
“就玩这个”卡卡说。
话音刚落,场景切换到了一个大草原,湛蓝的天空飘着朵朵白云。
AI助手提醒卡卡,这是游戏的热身环节,要先走完2000步才能开始游戏。
“2000步?小意思”,卡卡开始小跑起来。不一会就满头大汗……
学习目标
- 进一步熟悉 Scratch 编程环境;
- 学习让角色在舞台上移动并产生“动画”效果;
- 掌握重复执行、逻辑判断类控制指令;
- 初步了解变量的概念。
编程实战
本节我们使用Scratch编程控制小猫在舞台上来回走动,走到2000步时自动停止。
第一步:舞台设置
新建一个 Scratch 作品,利用上一节课所学的知识,设置舞台背景为“Blue Sky”(蓝色天空),将默认小猫角色的大小修改为60,并放到背景中的地面上。
第二步:编写跑步代码
试着从指令区拖动一个“移动10步”指令到代码区,点击这条指令执行,你会发现小猫果然向前移动了一点点。那么要移动更多的步数怎么办呢?把步数直接修改成2000?运行一下,发现小猫瞬间就移动到舞台边缘不动了。原来,Scratch 规定角色是不能走出舞台范围之外的,那我们就需要解决两个问题:
- 不能让小猫一下走完2000步,电脑的运算太快了,这样你根本看不到走路的过程;
- 当小猫走到舞台边缘的时候,要能掉头向回走。
你可以写出这样的指令:
这三条指令都是运动类的指令,它将小猫的翻转方式设置为左右翻转(如果没有这条指令,小猫碰到边缘反弹回来的时候就变成头向下了,你可以试验一下),再移动10步,如果碰到舞台边缘,小猫会回过头来。这样,你只要不断点击这段代码,重复每次走10步的过程,就可以让小猫不断地走路。
有没有什么办法让小猫自己不断地重复执行这段代码呢?有的,找到“控制”类指令中的“重复执行”指令。这是一个奇怪的指令,有点像一边开口的抽屉,里面可以装东西。当你把它拖动到代码区域时,可以试着用它去“套”住你想重复执行的指令,这些执行就会一直反复执行下去!
你会看到图中我把设置旋转方式的指令放在了重复执行之前,这是因为设置旋转方式只需要设置一下就能一直生效,不需要反复修改。现在点击这段代码,你会发现小猫已经学会了在舞台上来回移动——注意,是“移动”不是“走路”,因为小猫的腿似乎并没有动!能不能实现像现实中的人走路一样让小猫迈开腿呢?这就需要用到制作动画的原理了。
电影上的人物是怎么动起来的呢?是因为摄像机为运动中的角色拍摄了大量的照片,一般是每秒钟至少24张,当把这些照片连续展示在你眼前时,由于你的眼睛存在“视觉暂留”现象,你会觉得这些角色真的动起来了。
我们要实现小猫走路,也得用到这个原理。不过我们不能为小猫每秒钟拍摄很多照片,只能让小猫轮流显示两条腿在不同位置的照片,重复执行的时候,你就会觉得小猫的腿在动。这就要使用 Scratch 提供的“造型”功能。Scratch 角色库中的大部分角色都带有不同的造型,当你在角色库查找角色时可能会注意到,把鼠标放到角色上,角色就会动起来,这就是通过不断切换角色的不同造型来实现的。
我们的小猫角色有没有别的造型呢?注意一下项目编辑区上方有三个标签页,分别是“代码”、“造型”和“声音”,点击切换到“造型”标签,可以看到下面的界面:
左侧的列表区域显示出小猫有两个造型,你可以点击这些造型切换一下,看看造型之间有什么不同。Scratch 提供了丰富的造型创作功能,你可以通过下方的小猫头按钮,选择新的造型到当前角色,也可以自己绘制一个新的造型——右侧显示的绘图编辑器就是用来做这个的,它的功能很强大,等用到的时候我们再说——甚至你可以使用电脑自带的摄像头拍摄一个图片作为新造型!不过今天我们暂时不用修改小猫的造型,返回代码标签页,把代码修改为下面这样:
其实,只是增加了一条“外观”类型的指令(紫色)到重复执行的代码中,为了方便运行程序我在最前面添加了一个绿旗启动按钮。这时点击绿旗,你发现小猫真的跑起来了!(小猫跑动的时候,你有没有注意到在角色列表区域上方,小猫的X属性在不断发生变化?这是我们下一次要学习的内容,这里先提醒关注一下)。
第三步:为小猫实现计步
根据故事情节,小猫要跑2000步。怎么在天空中显示出小猫已经跑了多少步?这要用到变量。
什么是变量?变量是计算机编程中不可或缺的概念,你可以理解为变量就是一个存取数据的盒子,给这个盒子取一个名字(代号)之后,你就可以利用这个名字去获取盒子的内容,或者修改盒子的内容。举个例子,你买了一个存钱罐把自己的零钱存起来,就可以把你的“零钱余额”视为一个“变量”,当你向盒子里投币时,变量的值就增加了;从盒子里取钱用的时候,变量的值就减少了,任何时候你查看“零钱余额”的数值时,都会获得最新的余额数字。当然,Scratch 中的“变量”不仅可以保存数字,还能保存字符等数据,我们用到的时候再说。
就眼下的场景而言,你一定会想到,我们可以设置一个变量去保存小猫的步数,然后让它在跑步的时候,每重复执行一次移动指令,就在变量上加10步不就可以了吗?正是如此。可是怎么才能设置一个变量呢?
在项目编辑区,你可以点击切换到“变量”类(桔红色)指令,最上面就是一个按钮——“建立一个变量”。点击它,会出现新建变量的界面,你可以给变量取名为“小猫步数”,确定即可,先不用管它适用于所有角色还是当前角色。
变量建立完成后,注意一下舞台左上角,出现了一个灰色的条状区域,里面显示了变量的名称和变量当前保存的数值。现在对代码做如下修改:
桔红色的两条指令是新加的,第一条是在绿旗开始时把“小猫步数”设置为“0”,这样会重新开始计数;第二条是在重复执行的代码内部,小猫移动10步后,把小猫步数这个变量也增加10。需要注意的是,初学者最容易犯的错误就是变量混用,因为一个程序中可能有多个变量,保存不同的值,而对变量的操作都是通过一个下拉菜单选择你要操作的变量的,点击指令中变量名称旁边向下的小三角符号就可以看到这个菜单 :
所以在拖动变量相关的指令时,务必检查一下你操作的是不是正确的变量。
点击绿旗运行,小猫跑步的时候,舞台左上角的步数显示果然随着增加了。再次点击绿旗,又重新开始从0计算。
第四步:跑完休息
小猫热身的要求是跑2000步,怎样让它在跑到2000步之后就停下呢?这要用到逻辑判断。
什么是逻辑判断?简单来说就是“是”和“非”、“真”和“假”相关的问题。比如:如果外面下雨了,我出门就带上伞。这里的“下雨”就是一个逻辑判断,它决定了后面是否带伞这个动作。在讲到流程图时,我们讲到了“条件执行”,就是指这种情况。“是否下雨”就是条件,当条件成立,我们做拿雨伞的动作;如果不成立也就是没有下雨,当然就不用带伞了。
具体到本例来说,就是我们要判断一个条件,小猫是否已经跑了2000步以上?换句话说,“小猫步数”这个变量的值是不是已经大于2000了?如果大于2000,我们就让它停下来。怎么做呢?
在“控制”类指令中找到“如果...那么”,就是这个——
如果后面有一个深色的六边形区域,这里就是放我们要判断的条件。如果条件成立,就执行这条指令所“包含”的代码,否则不执行。那么条件从哪里来?
切换到“运算”类(绿色)指令,找到下面这组指令:
发现了吗?这六个指令正好是六边形的,它们就是与“如果...那么”配合使用实现逻辑判断的指令,这里生成的指令可以嵌套到“如果...那么”的条件区域中去。而第一种判断“XX(空白,这里是放变量的,可以把变量拖过来)大于50”正是我们需要的判断,把它和“小猫步数”变量以及“如果...那么”指令组合起来,变成这样:
注意一下,绿色的条件中“小猫变量”是从指令区拖动过来的。初学者可能会犯的错误是直接在这个圆形中输入变量名字,那是无法从变量中取值的,而是拿变量的“名字”或代号与后面的数字比较,也就是用“小猫步数”这四个汉字去和2000比较大小,这是没有意义的,一定要注意避免!
现在条件已经组合完成,只要条件成立的时候,停止程序就可以。从控制类指令中拖动一个“停止全部脚本”到“如果...那么”指令当中,当小猫步数大于2000的时候,程序就会被停止。(这条指令还有其它选项,我们用到时再说)。
最后,我们再把这段组合好的代码拖动到小猫跑步的重复执行程序中,让程序在小猫每次跑完10步的时候就去判断一下是不是已经大于2000,大于2000就停止程序:
点击绿旗,观察小猫跑步的执行情况,到2000步的时候,它停止了吗?
第五步:保存程序
最后,使用“文件菜单”下的“保存到电脑”,将作品保存为“热身中的卡卡.sb3”,本节的任务就完成了。
指令小贴示
- 移动【数值】步:让角色朝着目前的方向前进设定的步数;
- 碰到边缘就反弹:角色移动到边缘会改变方向,改变方式与角色的旋转方式有关,如果要让角色掉头往回走,就需要用“将旋转方式设为左右翻转”指令,或在角色属性中设置这个旋转方式;
- 将【变量名称】设为【值】:直接给你建立的变量指定一个值,一般用于程序启动时为变量建立初始值;
- 将【变量名称】增加【值】:在变量现有数值的基础上加上指定的数字。比如变量原值为10,增加10后,变量值为20;
- 停止【全部脚本】:这个指令有三个选项,分别是停止全部脚本(把所有角色的所有代码都停止执行)、停止当前脚本(只影响这个指令所在的代码)、停止该角色的其它脚本(除了本段指令,当前角色的其它代码都不再执行),具体可以在后续课程中逐步体会它们的不同之处;
- 下一个造型:将角色在舞台上的样子切换成它的造型列表中下一个造型,如果已经是最后一个,再跳到第一个,这样切换造型会产生动画效果;
- 重复执行:这是一个控制类指令,被它包含的指令会一直启动下去,除非有其它指令停止它的运行;
- 如果【判断条件】那么...:控制类代码执行的指令,如果后面的运行条件成立,就执行包含的代码。这个指令会和绿色的逻辑运算指令结合起来使用,让程序根据条件的不同来执行不同的代码。
课后思考
本节我们第一次接触到变量,并学习了重复执行和条件执行,这些都是下一步学习的重要基础,务必认真领会。
一般来说,程序的结构类型可以分为顺序结构、分支(条件执行)和循环(也就是重复执行)。本节我们把这三种类型的结构都用到了。
要理清复杂程序的结构,最好的方法是流程图,你能运用之前所学的知识,为本节学习的程序画一幅流程图吗?