“嗖!嗖嗖!”
寒光闪过,邪恶的吸血蝙蝠灰飞烟灭,不过卡卡的双臂也逐渐沉重起来,他咬牙坚持着,直到消灭最一只蝙蝠。
卡卡擦了擦额头的汗珠,收到AI助手的信息:你刚才消灭了368只蝙蝠,消耗235卡路里——大约相当于一小罐可乐的热量。
战斗这么久才消耗一小罐可乐?卡卡吐了吐舌头,跑出了这片黑暗的森林。
远远地看见一座古堡,有点像中世纪的建筑,目标一定就在那里!卡卡兴奋地加快脚步要冲过去,忽然感觉脚下一软,好像踩到了一团烂泥。而且这团“烂泥”似乎还会动,死死地粘住卡卡的脚不放。
这是什么怪东西?卡卡大吃一惊,AI助手的提示——
“这是注意力吞噬者,又称注意力陷阱。它们的唯一目标就是尽可能地抓住你的注意力,让你把宝贵的时间浪费在它们身上。比如无聊的文章、满足好奇心的短视频、让人上瘾的游戏等……你必须尽快挣脱它们,否则无法及时到达前方的幽灵古堡”。
好吧,真是一波未平一波又起,卡卡花了好大力气才把自己从这个吞噬者身上挣脱。定睛一看,通往古堡的道路上,大大小小的全是这种“注意力陷阱”。
看来这关不好过啊,卡卡心中暗暗叫苦。
学习目标
- 掌握背景图的修改方式;
- 使用键盘控制角色的方法;
- 颜色触碰侦测指令;
- 自制积木的用法。
编程实战
本节我们实现一个使用键盘控制小猫自由行走的程序,如果行走中碰到了陷阱,就退回原位。
第一步:设置背景与角色
新建 Scratch 项目,将背景修改为 Scratch 自带的 Castle 2(城堡):
在这个场景中,小猫站在一条通往古堡的道路上。我们需要在背景上加入一些“陷阱”,所以在“舞台”下方的背景缩略图上点击“背景2”,你会发现项目编辑区的标签页从“代码”、“造型”、“声音” 变成了“代码”、“背景”、“声音” ,点击“背景”标签页就可以进入修改界面:
这个背景标签页和角色造型的界面很相似,左边列出了你曾经选择过的背景,右侧是当前所选背景图的编辑器(与角色的编辑器一样)。你会看到编辑器中所能使用的工具和角色绘图时不同,这是因为这张背景图是“位图”,它的修改方式不是通过添加线条、形状来完成的,而是就像我们平时绘画一样,使用画笔、橡皮等工具进行涂抹擦除。当然,你也可以点击画布下方的“转换为矢量图”对它进行转换。不过对这张像照片的背景来说,用位图的编辑方式还是更合适一些。
选中绘图工具中的“圆形”绘制工具,在通往古堡的道路上画几个深色的实心圆,代表陷阱。如下图所示,因为我们是为了演示,而不是真的要绘制一个很难通过的“迷宫”,所以不用太复杂。如果你完成了本节内容,想提高难度,可以在这个图上自由发挥。
第二步:编写小猫指令
接下来为小猫编写指令。在编写指令之前,务必注意先在角色列表中选中小猫角色,因为刚才在修改背景时,我们切换到了背景的代码页,如果不切换到小猫角色,编写的就是背景的代码。这是初学者易犯的错误之一——怎么我写的代码找不到啦?
要实现小猫接收键盘命令,有两种方式,一种是上节内容我们学习到事件类指令(当按下...键),这里的键位你可以从下拉的列表中选择;另一种是把条件判断指令与侦测指令结合起来使用,如果条件成立则执行里面的代码,同样,判断条件里面的键位也是可以选择的。你可以根据具体场景来使用,本节内容我们采用后面这种方式。
现在把小猫移动到舞台的左下角,注意不要碰到你画的陷阱,然后为它编写下面的代码:
这里的指令都是你熟悉的,当按下向上键的时候,面向0度方向(也就是垂直向上)移动十步,切换造型,使用外观类指令将角色大小增加-5(也就是减少5,这样可以让小猫有近大远小的效果,向远处走的时候变小)——运行一下,怎么小猫一动不动呢?出什么问题了?
这就是初学者容易出错的场景之一——侦测指令是单次运行的,也就是说每运行一次指令检测一次。现在我们只是在绿旗启动的时候检测,它只运行一次就结束了,你还没来得及按键呢!必须是在程序运行后不断地检测是不是按下这个键才可以,所以我们需要在条件判断指令前面加上一个重复执行:
现在你按上箭头的时候,小猫可以向上走动了。掌握了这种方法,要实现向下、向左、向右就很容易了,在重复执行指令内部再加上相应的判断条件即可:
小猫如果在移动中碰到了“陷阱”,就要回到起始点,也就是原来的坐标,所以我们在重复执行中再加一个条件判断:
这里我们使用了一个新的侦测指令——碰到颜色,它和碰到角色的判断是一样的,只不过碰到的对象从某个角色变成了颜色而已,这个颜色从哪里来呢?点击这个颜色的时候,会出现一个设置颜色窗口,你可以把它设置成和你画陷阱的时候选择的颜色一样。不过更简便的方法是,使用这个窗口下面的“吸管”按钮,再把鼠标移动到舞台区你已经画好的陷阱上,这时鼠标会变成一个放大镜,把鼠标放到陷阱的位置点击,就能取到陷阱的颜色。
现在可以运行检验一下效果了,你的小猫可以灵活地四处走动,碰到“陷阱”就回到起始位置。
第三步:指令精简
到这里程序的功能是基本上实现了,可是你有没有觉得什么地方不对劲?小猫的代码是不是有点太长了?长也不算什么大问题,功能复杂的程序都会比较长——可是你发现这一长串代码中,有不少是简单重复的呀,下面图中处理四个方向的代码,除了移动的方向之外,是不是其它都一样?
切记,当你发现自己的代码中出现这种“有规律的重复”时,表明你需要精简你的程序了。在 Scratch 中,处理的方法,是把重复的代码做成自制积木。
什么是自制积木?简单地说,其实就是把具有通用性的一段代码放到一起,给它们起一个名字保存起来。当你在其它代码中要用到这段通用代码时,可以直接把这个保存好的积木放过去,就能起到和写一段代码一样的效果!比如在这段代码中,我们可以自制一个“走路”积木,把调整方向、移动、下一个造型这三块积木放到这个走路积木中,那么你只需把走路积木放到条件判断指令内部,就能实现现有程序的功能——这样代码量不仅减少了,如果走路功能发生了变化,你只用修改这块自制积木,所有用到这块积木的地方不用做任何修改——是不是很方便?这就是编程的一个重要原则:重复的事件只做一次就好!
你可能会问,不对呀,这四段代码也不是完全一样的,它们面向的方向不同!的确,完全重复的代码不多,这里就存在一个方向变化的问题。Scratch 考虑到了这种情况,所以你可以在自制积木的时候,定义一个或多个“输入项”——就像你在用移动10步这个指令的时候,可以把步数设置为10,也可以设置为20一样,这个步数就是输入项——你可以给你的“走路”积木定义一个“方向”输入项,在使用这块积木的时候告诉它向哪个方向去,在积木内部就可以用这个输入项来决定小猫面向哪个方向。
这么说很抽象,有点难以理解,我们来实际操作一下——
在项目编辑区找到最后一个指令分类——“自制积木”,这类积木目前里面只有一个按钮“制作新的积木”。
点击“制作新的积木”按钮,会弹出一个窗口,要求你输入这个积木的名字,我们输入“走路”:
先不要急着点完成,由于走路的方向不同,我们再点击“添加输入项(数字或文本)”,在积木名称后面就多出一个椭圆的空白区域,你可以在这里输入“方向”(这是输入项的名字)——
点击窗口右下方的“完成”按钮,一个新的积木会同时出现在指令区和代码区:
代码区的“定义走路(方向)”和其它的积木有很明显的不同,我们可以在它下面加入代码,让它实现“走路”的功能,你可以在已经写好的走路代码上点击鼠标右键,在弹出的快捷菜单中选择“复制”,Scratch 就会复制一份代码,把它拖过来放到定义积木下面就可以:
注意!!关键的一步来了。这里的代码是让小猫面向0度方向的!我们怎么才能让把自制积木定义好的输入项“方向”放到第一条指令“面向...方向”的空白区域,让它根据输入项改变方向呢?你可能会想,把现在的“0”修改成“方向”两个字就可以了吧?这是错误的。这和我们在前面内容中讲的变量一样,输入项传递过来的实际上是一个变量,而不是“方向”这两个汉字!“方向”这两个字是输入项的名称,而我们需要的是保存在这个输入项当中的值——可能是0,也可能是90等。怎么办?很简单,用鼠标拖动最上面“定义积木”中的“方向”这个稍微浅一点的区域,你会发现一件神奇的事情——它居然可以被“克隆”出来一份,随着你的鼠标移动——把它放到第一行指令的方向值里面即可:
这样,我们就完成了自制积木的功能,下面就可以把原来条件判断中的指令全部替换成“走路”指令了(从指令区拖过去,并且修改输入的方向),代码就变成了下面这样:
怎么样?代码是不是简洁了很多?这里走路这个积木的代码不多,所以还显不出它的优越性,但你可以想象如果代码很多,择取重复代码的操作就显得区别很大了——关键是你精简了代码,并没有影响程序的功能!好的程序员,一定是用最少的代码做最多的事情。象这样“在不改变代码功能的情况下对代码进行调整优化”的过程,在软件行业有一个专门的术语,叫做——重构。
指令小贴示
- 将大小设为【数值】:角色大小默认为100,相当于100%,原始大小,通过设置大小值,能改观角色外观;
- 将大小增加【数值】:如果想角色变大,就增加正数,想让角色变大可以增加一个负值,如-5;
- 按下【按键】键?:侦测是否按下键盘上的某个键,一般与如果...那么配合监视程序的键盘输入,注意搭配重复执行,否则只会执行一次;
- 碰到颜色【颜色】?:侦测角色是否碰到某个颜色,它比以前用过的“碰到角色”更灵活,即使是背景中的颜色也会生效,但要注意,侦测的目标区域最好是纯色,如果是渐变色可能会失灵;
- 自制积木:将重复性的代码放到自制积木里,就能像使用内置指令一样使用它。
课后思考
本节进一步复习了绘图编辑器的用法,Scratch 中的背景也是可以自定义的。除此之外,陌生的指令较少,但要重点掌握的是“重构”。使用自制积木的方式,将程序中重复出现的代码提取到“自制积木”中,能大大精简程序,让程序的结构更加清晰。
实际上,掌握重构,是一个程序员水平高低的标志之一哦!恭喜你今天已经接触到这一“秘技”!