Scratch全国少儿编程竞赛获奖作品《垃圾分类》解析下篇

admin 发表于 2019-09-17 12:44

Scratch全国少儿编程竞赛

获奖作品解析
《垃圾分类》

本文介绍的作品是全国青少年创意编程与智能设计大赛创意编程比赛一等奖获得者苏子麟同学的最新参赛作品。

作品说明

这个作品的目的是普及垃圾分类。使用游戏的方式,让大家更熟悉垃圾应该如何分类。游戏的目标就是正确识别垃圾类别,用正确的垃圾桶去打击更多的垃圾。

正文

在上篇文章的最后,当垃圾桶和标志完成了各自的动画之后,就会广播开始游戏。当然同学们如果觉得看动画太无聊了,也可以点击skip按钮,它的意思是跳过动画,立即开始游戏。

skip按钮的代码:

https://cdn.china-scratch.com/timg/190917/124425H45-0.jpg

开始游戏

广播开始游戏之后,就正式的进入游戏的操作环节了。

果冻老师先来说一说游戏的玩法:屏幕中不停的会有各种的垃圾出现,并且来回的移动,操作者要点击不同的垃圾桶发射子弹射击垃圾,每个垃圾都有自己的血量,如果垃圾桶与射击垃圾相匹配,垃圾就会减血消失;如果垃圾桶与射击垃圾不匹配,垃圾的血量会上升。

接收开始游戏广播的角色一共有九个:四个垃圾桶、四个子弹发射器和一个背景。

垃圾桶接收广播的代码非常简单:

https://cdn.china-scratch.com/timg/190917/12442524U-1.jpg

当我们用鼠标点击某个垃圾桶后,会广播备发绿(蓝/灰/红),意思是准备发射绿色子弹。

https://cdn.china-scratch.com/timg/190917/124425M91-2.jpg

然后呢,当然就是接收了,子弹发射器接收了备发的广播后会将发射武器类型这个变量设置为子弹发射器对应的值。

绿色子弹发射器对应的发射武器类型为1,蓝色对应为2,灰色对应为3,红色对应为4。

https://cdn.china-scratch.com/timg/190917/1244251V8-3.jpg

为了让我们射击时可以瞄准,子弹发射器还带有一个十字瞄准器:

https://cdn.china-scratch.com/timg/190917/1244251A1-4.jpg

它也会接收备发广播,然后改变不同的造型:

https://cdn.china-scratch.com/timg/190917/12442CV5-5.jpg

这样,不同颜色的垃圾桶准备发射不同颜色子弹的代码就写好了。

接下来,在子弹发射器的接收开始游戏的代码中,会不停的判断变量发射武器类型是否被设置了值,比如绿色子弹发射器的代码:

https://cdn.china-scratch.com/timg/190917/1244263962-6.jpg

上面的代码说明,当我们点击了绿色的垃圾桶,就会改变发射武器类型这个变量,然后判断这个变量的值,绿色的子弹发射器就会显示。

同学们有没有发现,发射武器类型这个变量其实是一个桥梁的作用,桥的一边呢是垃圾桶,一边是子弹发射器,它将这两个角色的代码连接了起来,因为在Scratch中没有是否点击垃圾桶这个侦测语句,所以通过发射武器类型这个中间变量模拟出是否点击垃圾桶的判断语句,这样才能实现点击垃圾桶出现对应发射器的效果。

上面的逻辑有点点难,同学们要看着代码仔细理解,这种变量的使用方式非常有用和常见,大家一定要掌握哦!

这时候的效果:

https://cdn.china-scratch.com/timg/190917/12442C0X-7.jpg

背景

接下来,我们要在屏幕上产生各种各样的垃圾,然后再消灭它们。产生垃圾的代码写在背景里面,就是它:

https://cdn.china-scratch.com/timg/190917/12442J951-8.jpg

那为什么要写在背景里面呢?同学们想一想,产生垃圾是不是不仅仅产生一种,有餐余垃圾、回收垃圾、有害垃圾等等,无论把代码写在哪种垃圾角色里都不太合适。因为果冻老师建议大家,在一个角色里不要写有关其它角色的代码,那就只能把生成垃圾的代码写在背景里了。这种思路在Python等代码编程中叫做类的封装或者面向对象的写法,同学们现在只需要知道有这个概念就可以了,不需要深入理解。

https://cdn.china-scratch.com/timg/190917/12442J601-9.jpg

上面呢就是不断产生垃圾的代码,它的作用是在不同的概率下产生不同的垃圾,在重复执行语句中,一种出现的概率嵌套在另一种出现概率的否则语句部分,第一个概率是在数字1到4之间随机取一个数,如果随机数是1,则出现厨余垃圾,否则在数字1到3之间随机取一个数,如果随机数是1,则出现其他垃圾,否则在1和2之间随机取一个数,如果随机数是1,则出现可回收垃圾。如果上面的概率都不满足,则最终出现有害垃圾。

代码中还用到了两个变量:子弹存在和垃圾存在,它们的作用是让舞台区中一次只能出现一个子弹和垃圾。

https://cdn.china-scratch.com/timg/190917/12442L044-10.jpg

自制积木

好了,现在实现子弹与垃圾的代码我们就写好了,最后,就剩下用子弹击中并消灭垃圾的功能了,写完这部分代码,垃圾分类的这个小游戏就完成了,那就让我们赶紧继续吧。

在接下来的内容中,果冻老师又要教同学们一个新的编程概念,叫做函数,也叫做方法。

那什么是函数呢?函数其实就是Scratch中的自制积木,函数中通常都会带有参数,参数就是Scratch自制积木中的输入项,函数名称就是积木名称:

https://cdn.china-scratch.com/timg/190917/12442W537-11.jpg

函数(自制积木)的作用就是将多个具有相同功能逻辑的代码块提炼出来写成一个,通过传递不同的参数(输入项)实现个性化的功能。

比如说,这里四个垃圾桶发射出子弹击中垃圾时,要么是加血要么是减血,都是操作垃圾血量的过程,只是一个是正数一个是负数,本来我们要在四个判断子弹是否击中垃圾的语句中分别写加血减血代码,但这样太麻烦了,于是,我们就可以将这部分的代码提炼出来,写成一个,通过传递一个参数(输入项)来区分到底是加血还是减血。

函数(自制积木)代码写出来是这样的:

https://cdn.china-scratch.com/timg/190917/12442T539-12.jpg

这里定义了一个名为子弹碰撞的自制积木,它带有一个名叫结果的参数(输入项)。这个子弹碰撞的自制积木的作用就是判断结果这个输入项是否大于0,如果大于0就减血,如果小于0就加血。

函数(自制积木)定义好了,下面就要使用这个自制积木,调用的代码是这样的:

https://cdn.china-scratch.com/timg/190917/12442S208-13.jpg

是不是非常简单,每个判断语句里面只需要写一行子弹碰撞的语句就可以了,减血直接就传递武器的变量值,加血呢给武器乘以-1变为负数再传递到自制积木中就可以了。

使用自制积木的优点有很多,它可以帮助我们简化代码量,而且后期的维护会变的非常方便,比如我们想让所有的垃圾被子弹击中减血的同时再切换一个造型,那么我们直接在自制的积木中添加一个下一个造型语句就可以了:

https://cdn.china-scratch.com/timg/190917/12442S130-14.jpg

如果不使用自制积木的话,我们就需要在每一个垃圾的每一个判断语句中都写一次下一个造型语句,那真是太麻烦了!

完成

好了,到这里,《垃圾分类》的代码解析我们就学习完了,由于游戏的源代码非常多,果冻老师在两篇文章中不可能全部都涉及到,所以剩下的代码还要同学们下载后自己阅读理解,有不懂的地方可以留言给果冻老师哦!

同学们有没有感受到这篇文章的内容要比上篇文章要难,上篇文章的内容如果算Scratch入门的话,这篇文章一下子就到Scratch进阶了,果冻老师又是讲类封装又是讲函数的,一个脑袋两个大,但是同学们千万不要心急哦,结合源代码反复阅读多练习,搞不懂也没关系,毕竟这是竞赛一等奖选手的作品哦,只要跟着果冻老师一个作品一个作品学习,相信慢慢的你会发现那些搞不懂的问题都不是事儿了!加油哦!

后记,小编朋友公司研发了一个游戏化的少儿编程在线课程(5-12岁),游戏化教学结合scratch(一款在线少儿编程工具,类似乐高的积木拼搭),我家娃娃学了几次课,非常喜欢(超预期),16次课才200多块钱,对锻炼孩子的思维能力和动手动力很有帮助。

感兴趣的朋友可以扫描二维码,关注一下,或微信搜索“大耳猴少儿编程”

https://www.china-scratch.com/Uploads/Editor/2018-04-22/5adca08bdc212.jpg