通过永恒之河,天色转暗,一轮明月冉冉升起。卡卡慢慢走进了密林深处。
月光下的一切很安静,只有卡卡自己的脚步声,以及远处不时传来的不知名动物的叫声。四周隐藏着一种莫名的危险气息。
卡卡的夜视能力不错。他瞪大眼睛,小心翼翼地向前走,想尽快走出这个令人不安的地方。
“哗啦啦……”前面忽然传来一阵异响。卡卡敏捷地向后跳了一步,抬头看去——不好!一大群黑色的蝙蝠象乌云一样飞快地向自己扑过来!
AI助手适时传来了提示——请使用飞镖消灭来袭的吸血蝙蝠。
卡卡发现手里出现了飞镖,他急忙甩了出去。
“嗖”!“嗖嗖!”
锋利的飞镖呼啸而去,被击中的蝙蝠纷纷惨叫着化为黑烟消失。
卡卡正想松口气,更多的蝙蝠黑压压地飞了过来……
本节学习目标
- 练习使用绘图编辑器画造型,进一步掌握绘图方法;
- 使用随机指令产生指定范围任意数字的方法;
- 用鼠标或其它角色作为目标,改变当前角色方向的方法;
- 使用侦测类指令,判断角色与其它角色或舞台的碰撞情况;
- 学会使用克隆指令快速创建同一个角色的副本。
编程实战
本节我们要开发的是一个射击小游戏,在这个游戏中你要用鼠标引导方向,空格键发射飞镖,击落飞来的蝙蝠。
第一步:建立游戏场景
新建 Scratch 项目后,保留小猫角色,添加一个角色库中的Bat(蝙蝠),并将背景设置为 Scratch 背景库中的 Wood(树林)。你可能觉得蝙蝠有点大,没关系,待会我们把程序写好后再调整大小,现在这样有利于查看动画效果。
01 添加背景和角色小猫、蝙蝠都有了,还差什么?小猫扔出的飞镖啊!使用“绘制”角色功能,打开绘图编辑器,自己画一支飞镖吧。
先用画方形工具画一个长方形,然后选中图中所示的变换工具:
02 绘图步骤一这个变换工具的神奇之处在于,你可以用它任意修改形状!比如,你可以用它在长方形左侧这条边中间位置点一下,这个位置就多出了一个节点,然后用鼠标拖动这个节点向左,这个长方形就会变成图中的样式:
03 绘图步骤二然后选中长方形右上方的节点,点击功能菜单区的“删除”,删除这个节点:
04 绘图步骤三.png节点消失后,用变换工具拖动最右侧的节点移动到垂直居中的位置,形状调整成这样:
05 绘图步骤四再画一个长方形的手柄,选中这个长方形后点击功能菜单区的“放最后面”:
06 绘图步骤五最后再画一个红色轮廓,无填充色的圆形到尾部。这个简易飞镖就完成了。尽管你可能觉得这个飞镖角色不是那么完美,但相信通过这几个简单的步骤,你能理解绘图中图形变换的方法。
07 绘图步骤六在飞镖角色的属性区把大小改成15或20,然后放到小猫前面。现在你的舞台区应该是这样:
08 场景布置第二步:为蝙蝠编写代码
运用前几节课掌握的知识,我们用重复执行指令,加上切换造型,让蝙蝠“动”起来。
09 蝙蝠飞行运行起来,这只蝙蝠就会开始不断地扇动翅膀。与此同时,我们还希望蝙蝠从右上角出现,然后向小猫逼近——这里面有一个问题,我们不希望它每次出现的位置都是固定的,而是在舞台右上角的一个区域范围内出现。从上一节的内容我们得知,可以用X、Y坐标确定角色位置,现在的问题是怎么让每次程序运行的时候,获得一个不一样的坐标呢?这要用到随机运算指令。你可以在“运算”类指令中找到它:
10 随机指令这条指令每次运行时,就能生成一个在指定范围内的数字,称为“随机数”,就像我们在买彩票的时候“机选”一样,由计算机选择的一个数。只要把X、Y坐标设置为随机数,就能控制蝙蝠出现的位置了。
掌握了随机指令,我们就可以编写另一段代码了,注意这段代码也使用绿旗启动。这里有一个重要的概念,即同一个事件会触发多段代码执行,它们是“同时”执行的,这在计算机编程中被称为“并行”。也就是说,蝙蝠在扇动翅膀的同时会执行这段代码,飞向小猫:
11 蝙蝠飞行代码新增的代码中我们用到了随机指令确定蝙蝠的坐标位置,然后用“面向”指令(这也是一条运动类指令,它可以让角色移动的方向朝向某一个角色或者鼠标指针)调整它的飞行方向,并调整旋转方式为左右旋转,接着我们使用了一条“重复执行直到”指令,这和以前我们使用的重复指令不同,它带有一个“结束条件”,当这个条件满足的时候就不再执行自己包含的代码,而是继续向下执行后续指令。
那么这个“结束条件”是什么呢?这是一条“侦测”类条件判断指令(湖蓝色),执行指令的时候如果当前角色碰到了指定的对象(可以是其它角色、舞台边缘或鼠标指针),条件就成立(判断结果为“真”),重复执行结束。对这段代码来说,就是蝙蝠不再移动,而是说“哈哈,你失败了”,中止全部脚本(中止全部脚本意味着所有角色的代码都会停止执行)。
第三步:创建一群蝙蝠
现在你执行程序,会看到蝙蝠直接飞向小猫。但故事中说的是一大群蝙蝠,怎么让创造出“一群”蝙蝠呢?你可以用鼠标右键点击蝙蝠,复制角色,复制出来的蝙蝠和原来的蝙蝠一样都具有同样的代码,你执行程序的时候,这两只蝙蝠都会飞向小猫:
12 复制蝙蝠那么是不是用这种方法就可以了呢?理论上是可行的,但是首先这种方法很麻烦,有多少只蝙蝠你就要复制多少次,还不能控制这些蝙蝠出现的时间,不过更致命的问题是——如果复制完发现程序有点问题,要调整蝙蝠的代码怎么办——你就需要把所有蝙蝠的代码全部给改一遍!是不是很痛苦!
还好,单调重复的事情应该由电脑而不是程序员去做。所以 Scratch 为我们提供了强大的“克隆”功能来应对这种场景。克隆这个词现在已经不新鲜了,就是以一个对象为“本体”复制出一个完全一模一样的“克隆体”来,它们具有一样的外观和执行逻辑——你一定对《西游记》中孙大圣拔下毫毛变成许多个一模一样的大圣这个情节记忆犹新吧?克隆就让Scratch中的角色具备了这种复制自己的能力,复制出来的角色和本体一模一样,而且受统一的指令控制!很强大吧?
Scratch 提供了三条克隆相关的指令来帮助我们进行克隆操作:
13 克隆相关的指令“当作为克隆体启动时” 是一个触发指令,和绿旗一样,意味着你每克隆出一个角色,就会触发后面的代码执行。它一般由下面“克隆”指令触发。“删除此克隆体”则是让克隆出来的角色把自己删除,比如克隆出来的蝙蝠如果被击中了,它就要被删除。让我们用这三条指令修改一下蝙蝠的代码。
首先,我们把蝙蝠的大小设置为30,拖动到右下角隐藏起来。然后添加下面的代码,让蝙蝠每一秒克隆一个自己。
14 克隆蝙蝠接着,把原来的两段绿旗触发的指令改为由克隆体执行的,因为本体被我们隐藏了,复制出来的本体也是不可见的,我们还需要添加一个“外观”类的“显示”指令把这个克隆体显示出来,现在蝙蝠的代码变成了这样:
15 修改后的蝙蝠代码现在点击绿旗,是不是从舞台右上角不断地冒出蝙蝠飞向小猫?现在你已经知道,那些其实是“克隆体”——也就是大圣身上的毫毛,真正的本体还在舞台右下角隐藏着睡大觉呢!
第四步:为飞镖编写代码
你可能已经迫不及待想赶紧写程序让小猫具备攻击能力了。不过我们不需要为小猫编写代码,而是直接为飞镖写代码。我们需要先把飞镖隐藏起来,然后拖动下列指令:
16 飞镖代码其实飞镖代码与蝙蝠的代码很相似,它们都会先克隆自己(这里有一个新的触发方式,按键触发。当按下键盘上指定键的时候后面的代码会执行),当作为克隆体启动时显示出来,移动到小猫身前位置,面向鼠标指标(你需要用鼠标移动来为飞镖引导方向)飞出去,直到——这里你注意到有什么不一样了吗?这个条件是由“碰到舞台边缘”和“碰到Bat”两个条件组成的,它们之间是“或”的关系,只要有一个条件成立,循环就会终止,去删除自己——所以我们使用了“运算”类指令(绿色)的“或”运算把这两个条件组合到了一起,你可以体会一下这个指令的用法。
第五步:完善蝙蝠代码
启动程序,按空格键并用鼠标移动来引导飞镖方向,你会看到一支又一支飞镖飞向了蝙蝠,碰到蝙蝠或者舞台边缘就消失了——且慢,这些蝙蝠怎么没事呢?明明被击中了啊——这是因为我们还没有编写代码让蝙蝠处理被击中的事件呢。切换到蝙蝠角色,在蝙蝠重复执行内部的移动2步指令后加一个“如果...那么”指令,我们加了一个侦测条件,如果碰到飞镖,这个克隆体就被删除。
蝙蝠完整的指令如下图:
17 蝙蝠的完整代码至此,你的第一个小游戏开发完成,你可以扮演卡卡,来一场痛快的“小猫大战吸血蝙蝠”了!
指令小贴示
- 在【数值】和【数值】之间取随机数:获得一个在两个数值范围之内的任意数值,这个指令往往用在需要感觉更“自然”的场合,比如游戏中敌人出现的位置,最好不是固定的,就用这个指令来生成坐标值;
- 面向【角色或鼠标】:利用这个指令可以立即调整角色面对的方向;
- 重复执行直到:它包括的代码会执行直到指定的条件成立,这实际上是重复执行指令和如果...那么指令的综合;
- 碰到【对象名称】:这个指令可以是侦测指令,如果碰到了指定的角色、舞台的边缘或者鼠标,这个指令就返回“真”,代表成立,也就可以作为如果...那么一类指令的条件。游戏中一般检测是否碰到子弹、敌人或超出舞台范围等;
- 当按下【按键】:用于用户和程序交互,按下键盘上指定的按键时,后面的代码会启动执行;
- 当作为克隆体启动时:这是和绿旗启动一类的指令,每一个克隆体产生后,会执行这个指令开头的代码;
- 克隆【对象】:在舞台上生成一个和指定的角色一模一样的对象,而且会执行“当作为克隆体启动时”指令的代码。在游戏中,屏幕上出现的敌人往往都是克隆体,便于创建和删除;
- 删除此克隆体:如果克隆体不再有效(比如被杀死的敌人),那就使用这条指令删除它。在Scratch中,同时存在的克隆体有300多个,一旦超过就不再执行克隆指令,所以用完的克隆体要及时删除而不是隐藏它。
课后思考
本节牵涉的内容牵涉随机指令、克隆指令、侦测指令、组合条件判断等,请你结合实际场景体会一下这些指令的用法。在编写游戏类程序的过程中,这些指令的运用是必不可少的。
本节我们还学习了新的触发程序执行的方式,比如当按下按键时、当作为克隆体启动时,这类指令只能作为一段代码的开始,当特定的条件满足时启动代码。这类“特定”条件,我们称之为“事件”。实际上,在编写角色代码的时候,也就是为角色编写 “事件”处理程序的过程。
你平时玩的射击类小游戏,原理和本节程序是类似的,只要学会了本节内容,开发同类小游戏就容易多了。
网友评论