接到指挥部的最新消息。为了让地球上的小伙伴对我们的防御炮台放心,现在要我们对已经观测到的三个小行星,发射炮弹,予以摧毁。
课前回顾
通过观测三个小行星,训练师应该可以熟练运用如下知识了:
- 面向积木的作用与使用用方法;
- 通过变换造型,从而制造“视觉暂留”动画效果;
- 通过修改移动积木的移动步数,从而达到改变角色前进速度的效果。
课前准备
1、点击下方按钮,下载“地球保卫战5.bcm”源码文件。
2、在谷歌浏览器地址栏输入 https://vipcode.fun/kitten编辑器 网址进入源码编辑器,或者直接点击前面的链接进入。
3、导入“地球保卫战5.bcm”源码文件。
课程目标
今天的训练内容是发射炮弹,摧毁小行星。训练师要准备好哦,前方高能,看下面的程序执行效果。
思考
请训练师描述程序开始后,炮弹摧毁小行星的过程;
训练师仔细观察后,是否认同我说的呢?
- 点击开始按钮启动程序;
- 移动鼠标,让炮口瞄准来袭小行星;
- 点击鼠标,发射炮弹;
- 炮弹如果击中小行星,就发出爆炸声,然后小行星就被炸毁消失了。
前面3个步骤,我们在之前的训练任务中已经完成。所以我们只要规划第4步就可以了。我们来确定一下这次编程任务的对象是谁?“炮弹”还是“小行星”。我们来看。炮弹和小行星碰撞之后,炮弹除了继续飞行以外,还有其他任务需要执行吗?通过程序效果可知,炮弹没有其他任务了。而小行星被击中后,还要执行发出爆炸声,消失的任务。所以我们今天的编程对象应该就是小行星。
接着有个关键问题。炮弹在什么情况下才能判定为击中了小行星。训练师一定想这还不简单么?只要判断炮弹是否撞上小行星,如果撞上,就算击中小行星啦。是的,不过这就引出了我们一直在用,但是还没重点提出的,程序的第三种执行方式“条件判断执行”,又称“分支执行”。举一个生活中的例子。小明的妈妈对小明说:“如果你能把自己的衣服洗完,就奖励你一个小礼物”。这就是“条件判断执行”。妈妈说的“如果能够把自己衣服洗完”就是“判断条件”。妈妈就会以“判断条件”作为标准进行判断,如果小明把自己的衣服洗完了,也就满足了妈妈给出的判断条件,在编程中,这种满足判断条件的结果,我们称之为“判断成立”也可称为“是”。小明依据“判断成立”的结果就可以获取妈妈奖励的礼物。如果小明没有把自己的衣服洗完,也就没有满足妈妈给出的判断条件,在编程中,这种没有满足判断条件的结果,我们称之为“判断不成立”也可称为“否”,小明依据“判断不成立”的结果,就没办法获取妈妈的礼物了。
接下来我们来看上个小行星目前的程序流程图。
用来判断小行星和炮弹是否相撞的判断节点应该放在上图中每个小行星所执行任务的哪个位置呢?在小行星从舞台上方开始向下移动的过程中,是不是一直都有可能被炮弹打中?所以在小行星移动的过程中是不是一直都要判断是否与炮弹相撞呢?我们之前说过,凡是一直要执行某个任务,马上就要想到重复执行。这里已经有了一个重复执行,所以这个判断节点可以放在这个重复执行里面。好了我们来修改一下流程图。
我们的流程图是不是越来越复杂了。其实我们只要按运行逻辑来看,就好了。程序由点击开始按钮启动。然后沿着左、中、右三个执行路径同时去执行各自的下一个任务“面向舞台下方”。我们拿最左边也就是飞行速度最慢的小行星来看。面向舞台下方以后,就会沿着程序执行路径去执行“重复执行”节点,然后就开始执行向前移动的任务了,接着,会执行“是否撞上炮弹”这个判断节点,如果这时炮弹还没撞上小行星,依据“撞上炮弹”的判断条件会得出“判断不成立”的结果,就是按照“否”这个路径去执行切换造型的任务,实现动画效果。然后去执行“按下停止按钮”这个判断节点,如果没有按下停止按钮,依据“按下停止按钮”的条件就会得出“判断不成立”的结果,就按照“否”这个路径去执行“向前移动最慢”这个任务,实现继续向下移动的效果,再执行“是否撞上炮弹”判断节点。如果这时撞上炮弹了,依据“撞上炮弹”的判断条件会得出“判断成立”的结果,就按“是”这个路径去执行发出“爆炸声”任务,然后去执行“消失”的任务。中间和右边这两个小行星的任务一样。训练师你明白了吗?
那么在实际编程中,我们该用什么积木来表示“如果满足***条件,就去干***事情”呢?还记得我们的自定义鼠标点击的事件积木吗?在实际编程中,判断形式与条件各式各样,没有办法做成固定的积木,所以我们就要组合符合实际情况的判断积木。今天我们可以用控制盒子里的“如果”积木来表示“如果满足***条件,就去干***事情”。如下图
这个积木后面有个六边形的凹槽,我们可以将用于获取判断结果是否成立的积木放在这个凹槽里。如下图。假如判断条件得到了满足,也就是六边形凹槽内的积木得出“判断成立”的结果,就把如果积木内部的积木按照从上到下的顺序来执行。假如没有满足条件,也就是六边形凹槽内的积木得出“判断不成立”的结果,则不执行如果积木内部的积木。
那如何用积木获取小行星与炮弹相撞是否成立的判断结果呢?还记得侦测盒子里的积木可以用来获取程序执行过程中的各种信息吗?在这个盒子里有个“碰到”积木,就是用来获角色间是否相撞信息的。如下图,这积木左边和右边各有一个下拉箭头,通过这两个下拉箭头,选定左边和右边需要判断的角色后,这个积木就可以用于得出这两个角色是否碰到一起的判断结果了。如果左边和右边两个角色碰到了一起,通过这积木判断后就会得出“判断成立”的结果。如果左右两个角色没有碰到一起,通过这个积木判断后就会得出“判断不成立”的结果。
我们当前是给小行星编程,所以碰到积木左边的下拉箭头选中“自己”,右边的下拉箭头选中“炮弹”。这样就可以获取小行星与炮弹碰撞是否成立的结果了。
还记得之前我们如果组合自定义事件积木吗?我们也可以把碰到积木放入如果积木后面的六边形凹槽内,如下图,这样就执行,如果小行星碰到炮弹这个条件成立时,就将如果积木内部的积木从上到下依次执行;
让小行星发出爆炸声,这个可以用声音盒子里的“播放声音”积木就可以了。
让角色消失,我们可以使用外观盒子里的“隐藏”积木,这个积木就可以让角色隐藏,如下图所示。
好了,接下来我们只要按照流程图,在上个任务中,小行星重复执行向下移动的积木中加入判断就可以了。
好了。我们点击开始,看看是不是开炮击毁三个小行星呢。
课后回顾
1、了解了程序除了“顺序执行”、“重复执行”之外,还有第三种执行方式“条件判断执行”或称“分支执行”。依据判断条件进行判断,从而获取判断结果,并依据判断结果是否成立决定执行不同的任务。
2、了解“如果”积木的作用与使用方法,当满足如果积木后面六边形方框的条件,就将如果积木内部的积木从上到下依次执行,没有满足的话,就不执行。
3、了解“碰到”积木的作用与使用方法,用来判断左右两个角色是否碰到一起,如果左右两个角色没有碰到,这个积木就得出不成立的结果。如果左右两个角色碰到一起,这个积木就得出成立的结果。
4、了解“隐藏”积木可以让角色消失不见。
样例程序
作品代码文件下载
点击下方按钮,可以下载老师完成的代码,导入之后,可以对比一下,咱们互相进步。编程没有绝对的标准答案,只有更加优化的方案!
加油哦,训练师!
举一反三
1、今天我的程序,并不是最优解,在某些情况下,会出现就算击中了小行星,但是小行星还是会向前移动。你知道为什么吗?
2、小行星被摧毁消失之后,又去了哪里,你能指出流程图上的问题吗?