Scratch少儿编程第29讲:贪吃蛇(更新版)
想了解编程技巧,就请点击上面蓝字:跟我学Scratch编程,关注CC哥
之前做的贪吃蛇的游戏一直有两个问题,一直没有优化,一个是贪吃蛇碰到自己的情况处理有点复杂不好理解,一个是虫子出现的位置可能会在蛇身上,有学友也提过这两个问题,那么今天CC哥就把这两个问题优化一下。
游戏的展示视频没什么太多区别,CC哥主要讲之前的问题的解决方案:
如何侦测贪吃蛇碰到自己
之前讲座的碰撞检测是:
逻辑就是因为身体是一个一个克隆体组成,所以如果要用克隆体碰到蛇头来检测,那么就要避免有几个克隆体实际上一直都是跟蛇头连在一起,是处于一直碰撞的状态。所以为了区别这些克隆体,我们就引入了克隆编号这个私有变量,然后判断碰到蛇头的克隆体,是不是连接着蛇头部分的几个克隆体。这部分CC哥说起来都比较费劲,所以这部分代码对初学者来说有点难理解这个逻辑关系。
改进方法
增加一个侦测的角色,进行碰撞检测。
这个方法是我们最常用的碰撞检测方法,特别是在碰到形状不规则的角色的时候。
就是这么个探测角色,就一个小点,在程序执行的时候,它是看不到的,但是我们可以始终让它出现在蛇头的位置上,这样一旦出现碰撞,我们就可以直接检测出来,是不是非常好理解了?而且程序逻辑相对也简单了。也就不需要考虑克隆编号这类需要进行克隆体区别的内容了。
如果想免费获得CC哥的讲座中的程序代码以及游戏素材,可以通过扫描二维码关注《跟我学Scratch编程》,然后点击获取代码即可。
那么探测角色代码的部分我们看一下:
这部分代码的理解:
1:程序一开始就设成透明的,这样你就看不见它了。(不能用隐藏,因为隐藏的角色是没有办法进行碰撞检测的)
2:重复执行反复让这个侦测角色移动到蛇头的部分。
3:方向要跟蛇头保持一直,这样侦测角色才会始终出现在蛇头部分的前端,不论蛇头朝向哪个方向。
4:让侦测角色往前移动15步,保证侦测角色出现在蛇头的位置,而不是被蛇头覆盖掉。
5:碰到边缘的时候要隐藏起来。
第五步是最容易被忽略的地方,也是最容易形成bug的地方。让我们看一下如果没有这一步会出现什么结果。
看到没有,如果这个判断代码,贪吃蛇在碰到边缘时,没有从另一边出来,而是直接游戏结束了。
为什么会出现这种情况,这个也是Scratch编程里面经常碰到的问题,舞台边缘的问题,当一个角色碰到舞台边缘时,如果继续移动,并不会移出舞台的边缘,而是会停在舞台的边缘,这样跟着蛇头的克隆体就会直接碰上这个侦测变量,从而宣布游戏结束。所以我们通过碰到边缘的时候直接隐藏侦测角色,让它失去碰撞侦测的功能,然后当它出现另一边时,再通过显示功能,来恢复它的侦测能力,这样程序就没有bug了。
另外在蛇身这部分的碰撞检测就简单了,只需要检测碰到探测变量就OK了。
《跟我学Scratch编程》资源获取方式:(点击查看)《跟我学Scratch编程》前60讲程序汇总
第60讲~72讲进阶课程源代码获取方式
虫子不出现在蛇身上
这部分我们改成了用自定义积木来做,如果碰到了蛇头,那么就更换位置。大家注意看自定义积木的内部编程,在这部分内部程序里套用了自己。这个对初学者有点难理解,自己套用自己。为什么这样用?因为虫子出现在随机的位置,我们无法保证下一个随机位置就正好不在蛇身上,那只能不断的来尝试,直到下一个随机位置不在蛇身上为止。所以这有点递归的逻辑。对于不确定反复的次数,只有退出条件的循环,可以用这种方式,编程更简单一些。大家可以再去学习一下CC哥有关递归的课程。
另外CC哥重新做了个play的特效,效果不错吧,不过这不是CC哥这讲的教学内容,大家如果感兴趣可以自己做做,或者自己看代码吧。
这一讲的更新代码CC哥会打包到前60讲里面,作为大家的延展学习。当然原来的29讲代码还会保留。
另外,CC哥发现很多学员不从基础学起,上来就问问题,问的问题都是之前帖子里讲过的基础问题,所以CC哥再次强调,如果你是个初学者,请从第一讲学起,而且每个例子都要自己做一遍,不要当小说看,否则你是学不好编程的。
《跟我学Scratch编程》资源获取方式:(点击查看)《跟我学Scratch编程》前60讲程序汇总第60讲~72讲进阶课程源代码获取方式
如果觉得CC哥做的不错,请点击右下角的"好看",给CC哥一个鼓励!
·END·
跟我学Scratch编程不用花钱成为Scratch高手
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com