[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第189讲。
第15届蓝桥杯省赛已于2024年8月24日落下帷幕,中级组编程题一共有6题,分别如下:
收集松果,本题是2024年8月24日举行的第15届蓝桥省赛Scratch中级组编程第4题,题目要求编程创作收集松果游戏。松鼠和松果出现在随机的两个方格中,然后松鼠经过最少的方格到达松果所在方格,然后松果又重新随机到一个新的方格,不断重复这个过程。
具体要求:
1). 点击绿旗,瞬间呈现 6行8列的绿色方格铺满整个舞台区域,如图所示;
2). 1秒后,松果和松鼠出现在随机的两个方格中,如图所示;
3). 然后,每隔0.5 秒松鼠会向上下左右四个方向选择一个方向走一格,并经过最少的方格到达松果所在方格,如图所示;4). 松鼠到达松果所在方格后,松鼠停下来,松果消失,1 秒后松果再次出现在随机的一个方格中,如图所示;
5). 重复执行“具体要求”3)、4)。
评判标准:
10分:满足"具体要求"中的1);
15分:满足"具体要求"中的2);
20分:满足"具体要求"中的3);
10分:满足"具体要求"中的4);
在编程之前,先来看一下作品的完整效果吧:
本题有3个角色,分别是方格,松果和松鼠,如图所示:
本题考查的知识点主要包括克隆技巧、变量、舞台坐标系、事件广播机制和自制积木等。这是一个典型的克隆场景,可以直接套用超平老师总结的“克隆4兄弟”模型,又快又好。松鼠和松果要出现在随机的方格中,这就说明我们不能直接使用“移到随机位置”指令。正确的做法是在6行8列的矩阵中随机选择一个方格,并计算出对应的坐标,然后使用“移到x,y”指令。以松鼠为例进行说明,我们可以定义两个变量“松鼠行“和”松鼠列“,用来表示松鼠所处的行和列,然后分别将它们设置为随机数字,“松鼠行“的范围是0~5,”松鼠列“的范围是0~7。为了方便计算,我们规定列从左到右,行从下到上,并且都是从0开始,如下:比如,这里的松果位于第1行第2列,松鼠位于第3行第5列,那怎么其坐标是多少呢?首先要确定好位于第0行第0列的格子坐标,即最左下角的方格,其坐标为(-210,-150),如图所示:由于这是一个6行8列的矩阵,所以方格是正方形的,边长为60。我们可以将(-210,-150)作为起点,然后使用偏移量来计算每个方格的坐标。对于上图的松鼠来说,它处在第2行第2列,所以其x坐标是在-210的基础上偏移两个格子的长度,即 -210 + 2 * 60 = -90;而y坐标是在-150的基础上偏移两个格子的长度,即 -150 + 2 * 60 = -30。
需要注意的是,x坐标和列偏移相关,而y坐标则和行偏移有关。在随机方格的时候,还需要确保松鼠和松果不在同一个方格中,这个题目是有明确说明的。这是本题的难点,很多同学都有这样的疑问,我怎么知道哪个是最短路径呢?其实没那么复杂,我们直接看图说话,假定松果位于第1行第2列,松鼠位于第4行第4列,如图:
第三种走法,按照左下左下的阶梯走法,还是5步,如图:
第四种走法,按照下左下左的阶梯走法,仍然是5步,如图:
相信聪明的你已经看明白了,只要确定了松鼠和松果的相对位置,它们的最短路径长度是固定的,尽管路径不唯一。所以,只需要在众多的路径(不止上面列出的四种)选择一条路径就可以了,为了简单,可以选择先行后列,或者先列后行。如此一来,思路就非常清晰了,我们只需要判断松鼠和松果所处的行和列,根据他们的位置关系,让松鼠逐渐向松果靠近,同时要更新当前所在的行和列,当二者处在同行同列,说明松鼠吃到松果,重新随机松果位置。直接使用克隆4兄弟模型克隆6行8列的方格,在方格角色中定义自制积木如下:1). 定义自制积木时,一定要勾选”运行时不刷新屏幕“选项;
1). 这里对角色做了一些初始化设置,包括旋转方式和面向,是为后面改变角色方向做准备;2). 这里定义的两个变量”松鼠行“和”松鼠列“要提前创建好;3). 根据松鼠所在的行和列,计算好松鼠的x和y坐标,然后显示出来;4). 确定好松鼠的位置,发送一个”出现松果“的广播消息;
1). 使用自制积木是为了重用代码,后面需要多次使用这个自制积木;2). 随机位置的方式和松鼠一样,但是要确保不和松鼠重叠,所以需要使用”重复执行直到“代码块;3). 这里使用了两个变量”松果行“和”松果列“,需要提前创建好;然后,在接收到”出现松果“广播中调用自制积木,继续编写代码如下:
根据前面的分析,我们可以根据松鼠和松果所处的位置来移动松鼠,为了方便组织代码,在松鼠角色中定义自制积木如下:
1). 处理上下左右的逻辑基本是一样的,每个“如果...那么”指令处理一个方向;
2). 在修改x和y坐标的同时,也要更新变量的值,确保“松鼠行”、“松鼠列”、“松果行”和“松果列”4个变量和当前所在位置始终一一对应;
3). 在每个如果指令的结尾有一个“停止这个脚本”指令,这可以确保每次只能移动1格;4). 左移和右移时,分别设置了松鼠的方向,这个题目没有要求,不写也是可以的;1). 每隔0.5秒,调用自制积木,让松鼠自动移动1格;2). 重复执行前进一格,直到碰到松果,说明松鼠吃到松果了,此时发送”吃掉“的广播消息给松果角色;3). 这里使用的是”广播并等待“指令,可以确保松果的位置重新设置完之后再进行下一次移动;代码非常简单,先将松果隐藏起来,等待1秒后,调用自制积木重新随机松果位置。至此,一个自动版本的松鼠追逐松果作品就创作好啦。
本题是中级组编程部分第4题,分数为60分,积木块数量100个左右,涉及到的知识点主要包括:
克隆编程;
自制积木;
变量;
事件广播机制;
舞台坐标系;
作为本次中级组省赛的第4题,难度中等,完成时间30分钟左右。本题的难点有两个,一是在随机松鼠和松果位置时,如何确保放到格子中间,二是如何让松鼠自动追逐松果,同时确保路径长度最小。
实际上,类似的场景在第12届选拔赛中出现过,题目要求在16 * 12的方格矩阵中实现贪吃蛇游戏, 如图所示:
具体可以参考《贪吃蛇-第12届蓝桥杯Scratch选拔赛真题精选》这篇教程。怎么样,是不是一模一样,所以超平老师常说,最好的备考资料就是历届真题。
如何让松鼠沿着最短路径追逐松果,看起来有些难度,但是你仔细一分析,也就那么回事。最好的分析方法就是画图列出各种不同的行走路径,找到其中的规律。
实际上,这个最短路径问题在数学和编程中十分常见,数学里面叫做标数法,编程里则是动态规划,一定要熟练掌握哦。
超平老师给你留3个思考题:
1). 为何要先随机松鼠位置,再随机松果位置呢?
2). 如何让松鼠的移动是随机的,假定松果在松鼠的右上方,当松鼠在移动的时候,第一次向右,第二次向上,第三次向上,第四次向右...;
3). 如何更好地设置松鼠的方向,确保松鼠的方向一开始就是正确的,如果松果在右方,松鼠一开始就要面向右方,否则一开始就面向左方。
你还有什么好的方法吗,非常欢迎您和超平老师交流分享。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄需要素材和源码的,可以添加本人微信。
另外,超平老师创建了一个蓝桥杯备考交流群,这是专门为老师和家长打造的免费社群,您可以与来自全国各地的老师、家长共同交流经验,分享学习心得。
超平老师也会给大家带来及时的赛事动态,备考攻略,真题资源分享,帮助各位更好地备考第15届蓝桥杯赛事,力争取得优异的成绩。
扫码或长按加入微信群