Scratch少儿编程第29讲:贪吃蛇(更新版)

网友投稿 2019-12-20 11:09

想了解编程技巧,就请点击上面蓝字:跟我学Scratch编程,关注CC哥



之前做的贪吃蛇的游戏一直有两个问题,一直没有优化,一个是贪吃蛇碰到自己的情况处理有点复杂不好理解,一个是虫子出现的位置可能会在蛇身上,有学友也提过这两个问题,那么今天CC哥就把这两个问题优化一下。

游戏的展示视频没什么太多区别,CC哥主要讲之前的问题的解决方案:

如何侦测贪吃蛇碰到自己

之前讲座的碰撞检测是:

https://cdn.china-scratch.com/timg/191222/1109514432-0.jpg

逻辑就是因为身体是一个一个克隆体组成,所以如果要用克隆体碰到蛇头来检测,那么就要避免有几个克隆体实际上一直都是跟蛇头连在一起,是处于一直碰撞的状态。所以为了区别这些克隆体,我们就引入了克隆编号这个私有变量,然后判断碰到蛇头的克隆体,是不是连接着蛇头部分的几个克隆体。这部分CC哥说起来都比较费劲,所以这部分代码对初学者来说有点难理解这个逻辑关系。

改进方法

增加一个侦测的角色,进行碰撞检测。

这个方法是我们最常用的碰撞检测方法,特别是在碰到形状不规则的角色的时候。

https://cdn.china-scratch.com/timg/191222/1109524235-1.jpg

https://cdn.china-scratch.com/timg/191222/1109521603-2.jpg

就是这么个探测角色,就一个小点,在程序执行的时候,它是看不到的,但是我们可以始终让它出现在蛇头的位置上,这样一旦出现碰撞,我们就可以直接检测出来,是不是非常好理解了?而且程序逻辑相对也简单了。也就不需要考虑克隆编号这类需要进行克隆体区别的内容了。

如果想免费获得CC哥的讲座中的程序代码以及游戏素材,可以通过扫描二维码关注《跟我学Scratch编程》,然后点击获取代码即可。

那么探测角色代码的部分我们看一下:

https://cdn.china-scratch.com/timg/191222/1109533192-3.jpg

这部分代码的理解:

1:程序一开始就设成透明的,这样你就看不见它了。(不能用隐藏,因为隐藏的角色是没有办法进行碰撞检测的)

2:重复执行反复让这个侦测角色移动到蛇头的部分。

3:方向要跟蛇头保持一直,这样侦测角色才会始终出现在蛇头部分的前端,不论蛇头朝向哪个方向。

4:让侦测角色往前移动15步,保证侦测角色出现在蛇头的位置,而不是被蛇头覆盖掉。

5:碰到边缘的时候要隐藏起来。

https://cdn.china-scratch.com/timg/191222/110953F35-4.jpg

第五步是最容易被忽略的地方,也是最容易形成bug的地方。让我们看一下如果没有这一步会出现什么结果。

https://cdn.china-scratch.com/timg/191222/110953O16-5.gif

看到没有,如果这个判断代码,贪吃蛇在碰到边缘时,没有从另一边出来,而是直接游戏结束了。

为什么会出现这种情况,这个也是Scratch编程里面经常碰到的问题,舞台边缘的问题,当一个角色碰到舞台边缘时,如果继续移动,并不会移出舞台的边缘,而是会停在舞台的边缘,这样跟着蛇头的克隆体就会直接碰上这个侦测变量,从而宣布游戏结束。所以我们通过碰到边缘的时候直接隐藏侦测角色,让它失去碰撞侦测的功能,然后当它出现另一边时,再通过显示功能,来恢复它的侦测能力,这样程序就没有bug了。

另外在蛇身这部分的碰撞检测就简单了,只需要检测碰到探测变量就OK了。

https://cdn.china-scratch.com/timg/191222/1109564547-6.jpg

《跟我学Scratch编程》资源获取方式:(点击查看)《跟我学Scratch编程》前60讲程序汇总
第60讲~72讲进阶课程源代码获取方式

虫子不出现在蛇身上

https://cdn.china-scratch.com/timg/191222/11095J231-7.jpg

这部分我们改成了用自定义积木来做,如果碰到了蛇头,那么就更换位置。大家注意看自定义积木的内部编程,在这部分内部程序里套用了自己。这个对初学者有点难理解,自己套用自己。为什么这样用?因为虫子出现在随机的位置,我们无法保证下一个随机位置就正好不在蛇身上,那只能不断的来尝试,直到下一个随机位置不在蛇身上为止。所以这有点递归的逻辑。对于不确定反复的次数,只有退出条件的循环,可以用这种方式,编程更简单一些。大家可以再去学习一下CC哥有关递归的课程。

另外CC哥重新做了个play的特效,效果不错吧,不过这不是CC哥这讲的教学内容,大家如果感兴趣可以自己做做,或者自己看代码吧。

https://cdn.china-scratch.com/timg/191222/11095K054-8.jpg

这一讲的更新代码CC哥会打包到前60讲里面,作为大家的延展学习。当然原来的29讲代码还会保留。


另外,CC哥发现很多学员不从基础学起,上来就问问题,问的问题都是之前帖子里讲过的基础问题,所以CC哥再次强调,如果你是个初学者,请从第一讲学起,而且每个例子都要自己做一遍,不要当小说看,否则你是学不好编程的。

《跟我学Scratch编程》资源获取方式:(点击查看)《跟我学Scratch编程》前60讲程序汇总
第60讲~72讲进阶课程源代码获取方式

如果觉得CC哥做的不错,请点击右下角的"好看",给CC哥一个鼓励!

·END·

跟我学Scratch编程

不用花钱成为Scratch高手

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com