美文网首页
趣学妙用Scratch编程11 趣学篇(七) 一场真正的终极对决

趣学妙用Scratch编程11 趣学篇(七) 一场真正的终极对决

作者: 妙林居士 | 来源:发表于2021-06-08 15:06 被阅读0次

“小明的BMI指数是28.73,属于肥胖范围”卡卡自信地说。

Griffin也不废话,将钥匙交给卡卡就消失了,卡卡走进了古堡。

空荡荡的大厅里放着一扇闪闪发光的传送门。卡卡把钥匙插入门锁,门自动打开了。

一阵强光闪过,照得卡卡睁不开眼睛。等他适应了周围的光线时,发现自己进入了一个空旷的房间里。靠近墙的阴影中站着一个人,背对着卡卡。

“你好?”卡卡试探地打招呼。

这个人没有吭声,许久才转过身来——看到对方的面孔,卡卡吃惊地张大了嘴,半天都合不上——这怎么可能呢?

“是的,我就是你,卡卡。”

“要通过这最后的关卡,你必须打败我。”

学习目标

  1. 使用消息协调多个角色的动作;
  2. 在程序中使用声音的方法;
  3. 使用计时器相关指令实现计时。

编程实战

本节我们要实现的是一个过关游戏。BOSS会向小猫发射火球,并召唤从天而降的怪兽攻击小猫,而小猫不具备攻击能力,只能通过跳跃和移动躲避攻击。如果小猫在BOSS的攻击下能够坚持30秒,就可通关。

这是迄今为止最复杂的一个程序,有了前几节内容的基础,相信你完全可以一步一步地把它实现出来。我们先分析一下游戏中角色相关的逻辑。

  • 小猫卡卡:程序开始后受键盘控制,左右键移动,空格键跳起,跳起后受到地球引力影响会慢慢落下。如果不小心碰到了BOSS发射的火球和怪物,会说“不好,被击中了”,游戏失败;如果到了30秒还没有被击中,会收到计时器发送的消息,说“我胜利啦”,结束程序;
  • 怪物:程序开始后每2秒克隆一个自己,克隆体从舞台上边缘的随机位置落下来,碰到地面后消失;
  • 火球:程序开始后,从BOSS身边每2秒向小猫卡卡发射一次,直到碰到舞台边缘消失;
  • 小猫BOSS:不执行任何代码
  • 背景:程序启动后开始计时,到30秒时发送游戏胜利的广播消息。

下面,让我们开始吧!

第一步:添加背景和角色

新建 Scratch 项目,将背景选择为内置的 “Castle 3”,添加内置的“Ladybug2”(虫子,用来充当怪物)和“Sun”(太阳,用作火球角色)到角色列表,然后用鼠标右键点击角色列表中的小猫,执行“复制”命令复制另一个小猫角色,并对角色做如下设置:

  • 角色1(小猫卡卡):大小设置为70,方向90,放在舞台左下角;
  • 角色2(小猫BOSS):大小70,方向-90,旋转方式为左右翻转,放在舞台右下角,与小猫面对面;
  • Ladybug2:大小设置为50,位置随意,设置为隐藏状态;
  • Sun:大小设置为30,放在角色2前面,设置为隐藏状态;

角色位置可参考下图:

01 场景布置

第二步:编写Sun角色(火球)代码

02 Sun角色代码

Sun角色的代码我们都很熟悉,就是不断克隆自己,飞向角色1小猫,碰到边缘后删除克隆体。这里只有一条指令没有使用过,就是播放声音,这条声音类指令(紫罗兰色)非常简单,就是播放你选择的声音。你可以切换到项目编辑区的“声音”标签查看当前程序中包括的声音,对现有的声音进行编辑,或者导入电脑上的声音文件(比如Mp3文件)。如果你的电脑有麦克风设备(一般笔记本电脑都内置麦克风,台式机需要另外配置外接设备),也可以通过录音方式新建一个声音。对于本例来说,就是播放Scratch内置的“Pop”音效,这是一种类似于气泡破裂的声音——“笃”。

03 声音处理界面

第三步: 编写Ladybug2角色代码

04 Ladybug2角色代码

Ladybug2角色的代码与Sun角色是相似的,都是在程序启动时克隆自己。克隆体会先把自己移动到舞台上边缘的任意位置(X坐标是-240至240的一个随机数,Y坐标固定为158),然后重复执行Y坐标减少的代码直到碰到舞台下边缘(当然如果碰到了角色,游戏就结束了)。

第四步:编写角色1小猫代码

05 小猫角色代码

与其它角色相比,小猫的代码稍微复杂一点,但也很容易理解。左边第一段代码就是响应键盘操作的,在程序开始后先把自己显示出来(因为如果游戏失败这个角色会隐藏,所以再次游戏时应该先显示),然后就重复检测键盘输入,左右方向键的处理代码是增加或减少X坐标,而空格键则先判断如果Y坐标小于-10,就将Y坐标增加80,增加80就让小猫有了跳起的效果,而先判断Y坐标是不是小于-10,是为了避免你连续按空格键,小猫就跳到舞台上边缘去了。

在前面的分析中,我们要求小猫跳起后要能做“自由落体”运动,也就是慢慢落向地面。这个怎么实现呢?我们右边这段代码在程序启动后会一直检测小猫的位置(Y坐标),如果Y坐标大于-125,说明小猫不在地面上,这个时候我们就让它的Y坐标增加-2(即减少2),重复执行下来,它就慢慢落向地面了。下面这段检测代码则是检测小猫是否碰到了BOSS发出的火球或Ladybug2角色,如果碰到了其中一个(它们之间是“或”的关系),就会停止小猫的动作,说出“不好,被击中了……”后隐藏,并终止全部脚本。

第五步:编写计时器代码

角色的指令编写完,我们还要实现一个计时器,当程序启动后就会开始计时,到30秒时,给各个角色发一条消息。Scratch自带的计时器指令比较少,在侦测类指令中有一条“计时器归零”指令和一个内置的“计时器”变量。从你打开Scratch开始,这个计时器变量就在不断增加,你可以试着勾选这个“计时器”变量前面的对勾,它会在舞台上显示出秒数并不断增加。如果你这时把“计时器归零”拖到代码区执行一下,会发现它又从0开始重新计时了。

06 计时器变量

那么怎么在舞台上显示程序开始后的秒数呢?直接用系统内置的计时器变量行不行呢?不行,因为第一这个计时器显示的是带小数点的秒数,不太美观;第二是游戏结束的时候我们需要停止计时器,可是Scratch 并没有提供“停止计时器”的指令,只能重新开始计时!这怎么办呢?我们可以换个思路,自己新建一个“秒数”变量,在程序启动时,把它置为0,同时让计时器开始计时,我们用重复执行的代码,不断设置这个变量等于系统计时器的整数部分(也就是小数点前的数字)。一旦检测到这个“秒数”大于30,我们就不再让这个变量与系统内置的计时器同步,而是给其它角色发消息终止游戏了。

按照这个逻辑,我们可以写代码了。由于这段代码是公共的,不属于任何角色,我们最好把它写在“背景”对象的代码区域,只要先在角色列表区域选中背景,编写的代码就是背景的代码。注意在编写代码之前,先在指令区新建一个变量并命名为“秒数”:

07 背景计时代码

这段代码的逻辑很简单,前面已经分析过,这里就不再赘述。

第六步:为各角色编写接收消息指令

我们通过上一步的代码广播了一条自建的“胜利”指令,其它角色收到这条消息后,需要终止自己的指令执行:

08 接收胜利消息

将上面的代码添加到小猫、Sun和Ladybug2三个角色中,其中小猫还要多加一条说话指令“我胜利了!”——程序就完成了。

本节内容完整的代码如下:

09 小猫角色完整代码 10 Ladybug2角色完整代码 11 Sun角色完整代码 12 背景计时代码

指令小贴示

  • 播放声音【名称】:播放指定的声音,声音可以是内置的,也可以上传或录制。注意,本指令播放声音不会等声音播放完才继续执行下面的指令,而是启动声音播放后马上就继续执行后面的代码。如果你想实现的是播放完成后再执行,可以用另一条指令“播放声音【名称】等待播完”;
  • 计时器归零:将 Scratch 内置的计时器变量归0。

课后思考

本节综合应用前面所学知识创作了一个完整的小游戏,角色较多,所以要理清头绪,弄清楚谁是“主角”,谁是“配角”,围绕主角要完成的工作,逐一梳理配角的行为,就会减少代码混乱的可能性。

本节作品中没有给小猫角色添加攻击BOSS的代码,也没有让BOSS移动位置,如果有兴趣的话,可以在本节内容的基础上,对各角色的代码进一步完善。

相关文章

网友评论

      本文标题:趣学妙用Scratch编程11 趣学篇(七) 一场真正的终极对决

      本文链接:https://www.haomeiwen.com/subject/ephtoctx.html