[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第87讲。
蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。
第12届蓝桥杯青少年组第3次选拔赛于2020年10月25日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
植树节种树,本题是2020年10月25日举行的第12届蓝桥杯Scratch选拔赛真题编程第5题,初级组和中级组都有此题,题目要求编程创作植树节种树作品,通过程序把树木种到对应位置。
先来看看题目的要求吧。
背景信息:
植物节是保护树木,并组织动员组织群众积极参加以植树造林为活动内容的节日,提倡通过这种活动,激发人们爱林造林的热情、意识到环保的重要性。每年3月12日为植树节。
编程实现:
通过程序把树木种到对应位置。
具体要求:
1). 点击绿旗,舞台上出现整齐排列的九块土地,右侧出现三种树木的列表。鼠标指针碰到其中一块土地时土地会改变颜色,鼠标离开时土地恢复成原来的颜色;
2). 在右侧选中一种树木用鼠标拖拽到指定的土地上,松开鼠标即为种下树木;
注意:
a. 必须移动土地上,才能种下,否则树消失;
b. 种下的树,必须在土地的正中央;
c. 已经种下的树不能再拖拽。
3). 每块土地上只能种一棵树,如果该块土地已经种树,第二次把树种在这块土地的时候拖拽出来的树会说:“这里已经有树了!”1秒,然后删除拖拽的树;
4). 当9块土地都种满了树,程序结束。
本题一共有4个角色,如图所示:
其中土地角色有两个造型,分别为橙色和红色,如图所示:
本题考察的重点是Scratch克隆编程,9块土地以3行3列方式在舞台左侧整齐排列,这是典型的克隆编程,只需要使用嵌套循环,逐行克隆即可。
当鼠标点击右侧的树木时,立刻克隆出一棵树木,并跟随鼠标移动,当鼠标移到指定土地上,松开鼠标时,需要判断是否在该土地上种下树木。因此,我们必须要获取如下三大信息:
1). 当前土地是哪一块土地;
2). 当前土地上,是否已经种下树木了;
3). 当前土地的坐标,也就是树木要种下的位置;
这里的9块土地都是克隆出来的,要区分不同的克隆体,需要使用私有变量,我们可以定义一个私有变量”_id“,然后在克隆的时候分别将变量设置为1-9,这样就可以通过id来区分每块土地了。
每块土地是否已经种树及坐标信息,可以使用列表来进行保存,如图所示:
列表的初始值,可以在生成克隆体的时候进行,其中土地状态为0表示当前土地上还没有种树,为1则表示已经种树。
如此一来,问题就变得简单了,当松开鼠标时,先获取当前土地的id,然后通过列表就可以获取其状态,如果已经种树就删除克隆体,否则就将克隆体移到对应的位置上。
根据题目描述和思路分析,我们可以分四步来编写程序:
变量和列表初始化设置
克隆土地角色
克隆树木并种树
种满土地结束程序
1. 变量和列表初始化
首先创建3个变量,分别命名为”_id“、”当前土地“和”种树数量“,如图:
其中,"_id"是土地角色的私有变量,添加下划线是为了区分全局变量和私有变量。“种树数量”是用来记录已经种下树木的数量。
接着创建3个列表,封面命名为”土地状态“、”x坐标“和”y坐标“,如图所示:
切换到土地角色,编写代码如下:
注意,在Scratch编程中,使用列表时一定要记得清空列表数据。
2. 克隆土地角色
这是一个3行3列的规则排列,我们只需要逐行克隆即可,在上面的初始化代码下面,增加代码如下:
这是一个典型的克隆代码,使用的是两层循环,内层循环解决的是如何在一行克隆3个土地,而外层循环解决的则是如何克隆3行。
每次克隆之前,将x和y坐标保存到列表中,同时将_id加1,根据克隆体在克隆时和本体特征完全一致的原理,每个克隆体就都有自己的id和坐标值,并存放到列表中了。
生成克隆体之后,需要显示出来,当鼠标移到克隆体上时,切换到绿色造型,松开时切换到橙色造型,代码如图:
这里还做了一个非常重要的动作,就是“将当前土地设为_id”,如此一来,我们就可以通过变量“当前土地”获知要在哪一块土地上种树了。
3. 克隆树木并种树
对于树木角色来说,这里的3个树木角色逻辑完全一样, 接下来我们就以“tree1”角色为例进行讲解。
当鼠标点击tree1角色时,立刻生成一个克隆体,对应的代码如下:
简要说明两点:
1). 这里并没有使用事件指令“当角色被点击”,是为了避免点击克隆体也会生成一个克隆体的情况;
2). 在“克隆自己”指令后面增加了一个“等待按下鼠标不成立”指令,是为了确保在松开鼠标之前只有一个克隆体。
一旦生成了克隆体,克隆体就需要跟随鼠标移动,直到松开鼠标为止,如果此时不在土地上,就立刻删除克隆体,否则就需要考虑是否种树,这部分的代码如下:
如果克隆体碰到了土地,此时就需要判断当前土地是否已经种树了,还记得前面的“土地状态”列表和“当前土地”变量吧。
将两个指令进行组合就可以获取当前土地的状态了,如果状态为1,表示已经种树了,就提示“这里已经有树了”,然后删除克隆体。否则就将克隆体移到该土地的位置,并将状态值更新为1,同时增加“种树数量”的值。
在上面的“否则”指令中,增加代码如下:
4. 种满土地结束程序
当9块土地全部种满之后,需要结束程序,在上面的程序中,每成功种下一棵树,变量“种树数量”就增加1,当变量为9时,就说明已经全部种满了。
很多同学会想,这还不简单嘛,直接判断当变量等于9时,停止全部脚本不就行了。你可以试一下,会发现,一旦停止全部脚本,所有的克隆体都消失了,这是Scratch的特点,一旦停止全部脚本,克隆体都会消失。
实际上,在上面的代码中,只有两个地方是无限重复执行的,即土地克隆体和tree1角色绿旗代码块中,所以,我们只需要将它们改成条件循环即可。
将土地角色的克隆体代码块修改如下:
同理,在tree1角色中,修改绿旗代码块如下:
这样一来,当所有土地都种满数后,代码就都停止下来了,关键是克隆体也不会消失。另外两个树角色的代码和tree1基本一样,只是位置稍有不同,这里就不再列出了。
至此,整个作品就创作完成了,一个简单有趣的植树作品就诞生了,^_^。
本题难度系数为5,积木块数量73个左右 ,涉及到的知识点主要包括:
克隆编程,重点是克隆按规则排列的克隆技巧;
变量的使用,尤其是私有变量在克隆体中的应用;
列表的应用;
拖拽角色的实现;
循环编程,包括循环嵌套和条件循环;
条件语句的嵌套。
本题难度较大,关键是要找到判断当前土地是否已经种树的方法,这里结合了全局变量、私有变量和列表。这需要考生熟练掌握私有变量在克隆编程中的用法,以及对列表有着敏锐的感觉。
同时,这道题在很大程度上考察了孩子的逻辑思维能力,可以说是一道非常好的考题。
如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。
有需要素材和源码的,可以联系本人。