• 贪吃蛇-第12届蓝桥杯Scratch选拔赛真题精选


    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第83讲。

    蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。

    第12届蓝桥杯青少年组第5次选拔赛于2021年1月23日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

    贪吃蛇,本题是2021年1月23日举行的第12届蓝桥杯Scratch选拔赛真题编程第5题,初级组和中级组都有此题,题目要求编程创作贪吃蛇游戏,玩家通过控制蛇头方向吃到食物,从而使得蛇身变得越来越长。

    先来看看题目的要求吧。

    一.题目说明

    编程实现:

    贪吃蛇游戏:通过控制蛇头方向吃到食物,从而使得蛇身变得越来越长。

    具体要求:

    1). 点击绿旗,舞台上出现面向右侧的蛇头,和随机位置格子里的苹果;

    2). 通过上下左右四个方向键,控制蛇头的上下左右移动;

    3). 蛇头碰到舞台边缘后,可以从另一侧的位置出来;

    4). 每次吃掉苹果(蛇头和苹果在同一格子内,苹果即消失),蛇头后增加一个正方形身体,同时苹果重新出现在随机位置格子内;

    5). 吃掉6次苹果,游戏结束。

    二.思路分析

    本题一共有3个角色,分别是苹果、蛇头和蛇身,如图所示:

    贪吃蛇是一款非常经典的小游戏,常规的实现方式就是使用列表来保存蛇头和蛇身的坐标,再利用列表操作(出栈和入栈)实现蛇的移动。

    在Scratch编程中,我们还有更简单的方式,这就是克隆。其基本思想是,蛇头每前进一步,就在刚才的蛇头位置克隆一节蛇身,同时删除最末端的蛇身,如图:

    为了对比,上图中画了两条蛇,其中下方的蛇是向右前进一步后的状态,注意,y轴方向上并没有真正的移动。

    我们只需要移动蛇头,蛇身不用移动,只需不停的克隆和删除即可,难点在于如何删除最后一节蛇身,咱又不知道哪一个克隆体是最后一节蛇身。

    其实,这里有一个非常简单的方法,假设贪吃蛇每隔1秒前进一步,当只有蛇头,即蛇身长度为0的时候,蛇身克隆后立刻删除,当蛇身长度为1的时候,蛇身克隆后等待1秒后删除,当蛇身长度为2的时候,蛇身克隆等待2秒后删除......,依此类推,也就是说,蛇身克隆体存在的时间和蛇身长度一一对应。

    看到这里,你可以稍停一下,仔细想想这个过程,如果觉得不好理解的话,可以试着画图帮助自己消化理解。

    三.编程实现

    根据题目描述和思路分析,我们可以分4步来编写程序:

    • 苹果随机位置

    • 蛇头的移动

    • 贪吃蛇吃到苹果

    • 克隆蛇身

    1. 苹果随机位置

    一提到随机位置,很多同学立刻会想到”移到随机位置“指令,但是要注意在本作品中,舞台被分成16 x 12的矩阵(水平方向上有16个小格子,垂直方向上有12个小格子),苹果要放到每个格子中才行。

    换一个思路,水平方向上有16个位置可选,垂直方向上有12个位置可选,每个格子的大小为30,根据舞台坐标分布,我们编写代码如下:

    舞台在x轴方向上的坐标范围为-240到240,所以这里将苹果x的取值范围设置为-7到8,y轴方向坐标范围为-18-到180,因此y的取值范围设置为-5到6。

    如果直接用”苹果x * 30“和”苹果y*30“,则苹果的位置如下:

    这跟角色造型有关,我们需要在这个基础上再移动半个格子的距离,所以x和y都相应的减去15。

    2. 蛇头的移动

    蛇头角色,可以出现在任意一个格子中,每隔一个固定时间,就前进一步,默认情况下,向右前进,按下↑、↓、←、→方向键,蛇头就会改变方向,如果碰到舞台边缘后,可以从另一侧的位置出来。

    为了方便,我们定义一个变量,将其命名为”间隔时间“,这样就可以随时改变贪吃蛇移动的速度,对应的编写代码如下:

    代码比较简单,需要注意的是确定好碰到边缘时的边界条件。

    现在贪吃蛇只能向右移动,玩家通过按下方向键改变蛇的移动方向,对应的代码如下:

    这样一来,就可以改变蛇的运动方向了。

    3. 贪吃蛇吃到苹果

    当贪吃蛇碰到苹果时,就吃掉苹果,重新出现一个苹果,蛇身增加一节。

    首先要创建好变量”蛇身长度“,将初始值设为0,然后判断蛇是否碰到苹果,如果碰到,则将蛇身长度增加1,同时需要判断蛇身长度是否等于6,如果等于则结束游戏,否则就重新出现一个苹果。

    这部分代码可以写在苹果角色中,也可以写在蛇头角色中,很显然,写在苹果角色中更简单一些,切换到苹果角色,增加代码如下:

    注意,这是一段新的代码,只不过和步骤1中的代码有相同的部分,如果你想简化的话,可以考虑使用自制积木或者广播消息,这里就不再列出了。

    4. 克隆蛇身

    最后就是克隆蛇身了,根据思路分析中的描述,在每次蛇头移动之前克隆蛇身即可,其位置就是蛇头所处位置。

    比较好的做法是在蛇头角色中克隆蛇身,因此,还需要创建两个变量用于记录克隆体的位置,定义两个变量,分别命名为”蛇身x“和”蛇身y“,然后在蛇头移动之前进行克隆。

    切换到蛇头角色中,增加代码如下:

    只有3行代码,非常简单,注意添加代码的位置。

    再切换到蛇身角色,编写代码如下:

    至此,整个作品就创作好了,你可以运行程序,好好欣赏一下自己的大作了。

    四.总结与思考

    本题难度系数为5,积木块数量94个左右 ,涉及到的知识点主要包括:

    • Scratch舞台坐标系;

    • 运动编程,重点是精确控制角色位置;

    • 随机数的使用;

    • 按键事件编程,这里主要是上下左右方向键;

    • 克隆的灵活运用,重点是理解克隆体的特性;

    • 循环和条件的嵌套编程。

    本题难度较大,重点是理解贪吃蛇的实现原理,这要求考生具备较强的分析能力,对贪吃蛇移动的过程进行分解,然后寻找蛇身的规律,再结合Scratch编程知识,找到最简单的解决方案。

    实际上,我们的游戏还有不少小bug,比如可以直接调转蛇头,如果多玩几次,还会出现这种情况,当吃掉一个苹果时,苹果出现的位置和贪吃蛇重合了。针对这些小bug,你知道如何解决吗,考验你的时候到了,赶紧试试吧。

    如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。

    需要素材和源码的,可以联系本人,或者移步至同名wx号。

  • 相关阅读:
    Kerberos认证
    让泛型的思维扎根在脑海——深刻理解泛型
    设计模式——原型模式
    湖北省制造业高质量发展专项资金政策!2022年各大类申报条件以及奖励补贴标准汇总
    机器学习——集成学习和梯度提升决策树
    vue3 element-plus 组件table表格 勾选框回显(初始化默认回显)完整静态代码
    pytorch数学操作
    linux升级openssh9
    12 c++版本的坦克大战
    超详细的Java基础面试题总结
  • 原文地址:https://blog.csdn.net/diamondwang2012/article/details/127996821