• 飞驰的高铁-第15届蓝桥杯第一次STEMA测评Scratch真题精选


    [导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第150讲。

    飞驰的高铁,本题是2023年8月20日举行的第15届蓝桥杯STEMA测评Scratch编程中级组编程第2题,题目要求编程实现模拟高铁飞驰前进的效果。当按下数字1时,画面中的景色持续向左侧水平移动,再按下数字2,停止程序。

    先来看看题目的要求吧。

    一.题目说明

    编程实现:

    飞驰的高铁。

    具体要求:

    1). 点击绿旗,角色、背景如图所示;

    图片

    2). 按下一次数字1按键之后,画面中的景色持续向左侧水平移动(参照程序演示视频);

    3). 按下一次数字2按键之后,程序结束。

    图片

    评判标准:

    • 5分:满足"具体要求"中的1);

    • 25分:满足"具体要求"中的2);

    • 10分:满足"具体要求"中的3)。

    二.思路分析

    本题包含两个角色,分别是高铁和景色,如图所示:

    图片

    其中,景色角色的造型如下:

    图片

    本题考查的知识点是运动编程,具体来说是无限滚动效果。

    什么是无限滚动呢,在Scratch中通常是指一个角色沿着某个方向移动,永不停止。其关键在于,该角色在运动方向上始终占满舞台,角色的长度好像是无限长一样。

    如果你仔细观察作品效果的话,会发现高铁角色自始至终都是不动的,真正移动的是景色。景色从右至左无限滚动,看起来就好像是高铁一直向右运动,这就是物理学中的相对运动。

    针对无限滚动,我们通常可以使用如下两种解决方案:

    • 复制方案

    • 克隆方案

    为了方便描述,以本题的效果为例,分别介绍两种方案的实现思路。

    复制方案的思路是:先确保一个景色角色(角色1)重复向左移动,当移动到舞台的最左边时,立刻回到舞台的最右边。然后再复制一个景色角色(角色2),只需要调整其初始位置,使其紧紧跟随在角色1的后面即可。

    克隆方案的思路则是:景色的本体向左移动,当本体的最右侧即将露白(右侧即将离开舞台右边缘)时,立刻克隆一个景色,让其跟随在本体的后面向左移动。克隆体的最右侧即将露白时,再次克隆一个景色。同时需要注意,当本体到达舞台左边缘后需要隐藏起来,克隆体达到舞台左边缘后则需要删除,然后不停地重复此过程即可。

    接下来,我们进入具体的编程实现环节。

    三.编程实现

    根据上面的思路分析,我们分别使用两种方案来编写程序:

    • 复制方案

    • 克隆方案

    1. 复制方案

    我们可以分角色来编写代码。

    1). 高铁角色

    首先来编写高铁角色的程序,高铁角色需要设置好坐标和层次关系,这一步非常简单,代码如下:

    图片

    其次,运动是在按下数字1后才开始,按下数字2则结束程序。需要注意的是,这里的按键只需要按下1次,不需要反复按下,针对这种情况, 最好的方法是使用“等待条件”指令。

    为了方便控制,可以将这部分代码写在高铁角色中,增加代码如下:

    图片

    代码比较简单,当按下数字1键后,发送了一个“开始”的广播消息,在按下数字2键后,直接停止全部脚本。

    连续使用两个“等待条件“的好处还在于,可以精确控制按键的顺序,必须是先按1键让景色动起来,然后才能按2键停止运动。

    2). 景色角色

    绿旗点击时,景色是静止的,需要设置好其位置,注意要确保覆盖整个舞台,代码如下:

    图片

    当接收到“开始”广播后,重复执行向左移动,当移动到最左边时,立刻又回到舞台的最右边,代码如下:

    图片

    需要注意,不同的角色大小,到达舞台左边时的左边也不相同,角色越大,到达舞台最左边时的x坐标就越小,那怎么确定这个最小坐标呢?

    超平老师告诉你一个小技巧,将上面代码中的如果部分先不写,执行代码,当角色停下来时的那个坐标就是最小坐标了,简单吧。

    3). 复制角色

    接下来,只需要再复制一个景色角色即可,如图:

    图片

    然后修改角色的起始x坐标即可,代码如下:

    图片

    温馨提示:很多同学喜欢一上来就复制景色,然后再分别写代码,这是可以的,但很显然效率不高,而且容易出错。最好的方式是先写好一个角色,然后再复制角色,此时,只需要修改一个地方即可,又快又好。


    2. 克隆方案

    对于克隆方案,高铁角色和复制方案的代码基本一样,可以先不动。重点在于景色景色,需要分两步来编写。

    1). 景色本体

    绿旗点击时,我们设置好景色本体的位置如下:

    图片

    注意,这里的x值为118,刚好是角色左边盖住舞台左边缘的位置,由于后续需要隐藏本体,所以必须使用”显示“指令,将其显示出来。

    当按下数字1键,也就是接收到”开始“的广播消息后,本体开始向左移动,直到最左边隐藏起来。同时需要判断,当本体右侧即将露白时,需要克隆一个景色,代码如下:

    图片

    代码中的难点在于克隆的时机判断,这里使用的是”x坐标 = -122“,这里有两个关键点:

    ①. 由于只能克隆一个,所以不能使用 "<" 指令,否则就会克隆大量的景色;

    ②. 这里的-122和x坐标增加的值有关系,必须确保x坐标的值在变化过程中,能等于-122,所以不同的移动速度,其值也相应的有所不同,你需要自己计算并测试。

    2). 景色克隆体

    一旦生成了克隆体,就需要让克隆体从舞台的最右方开始向左移动,左移的逻辑和本体基本一致,代码如下:

    图片

    由于使用的是克隆体,一旦停止全部脚本,克隆体就会删除,会出现露白的效果,如下:

    图片

    所以,这里需要改变结束程序的方式,不能直接使用暴力的”停止全部脚本“了,而是改为广播消息,将高铁角色的角色修改如下:

    图片

    相应的,在景色角色中,添加代码如下:

    图片

    如此一来,既可以确保结束程序,又不会出现露白的尴尬场景,岂不妙哉。实际上,在平时的Scratch创作中,经常会出现这种情形,我们要学会使用广播结合”停止该角色的其他脚本“指令来实现,而不是直接使用”全部结束“指令暴力解决。

    这样就可以实现无限滚动的效果了,你可以简单的理解为,一张景色图片从右向左移动直到舞台最左边缘(不是碰到舞台边缘,而是最右侧到达舞台最左边缘)消失,然后又出来一张景色图片重复这个过程,有点前赴后继的味道。

    至此,整个作品就创作好了,赶紧乘坐我们的高铁,体验一下飞驰的感觉,欣赏一路的风景吧。

    四.总结与思考

    本题是中级组编程部分第2题,分数为40分,积木块数量30个左右,涉及到的知识点主要包括:

    • 运动编程,重点是坐标的灵活运用;

    • 循环编程,包括无限循环和条件循环;

    • 按键的判断和灵活处理;

    • 事件广播机制;

    • 克隆编程;

    • 停止脚本的不同方式及其区别;

    这是中级组的第2题,题目难度中等,完成时间在15分钟左右,难点在于如何实现景色的无限滚动。

    无限滚动是Scratch编程中常用的编程技巧,很多经典游戏中都运用了无限滚动,比如飞扬的小鸟、飞机大战和极速赛车等。

    留给你一个小小的思考题,本作品中提到的两种方案,哪一种效果更好,为什么呢?

    如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

    需要素材和源码的,可以移步至“超平的编程课”gzh,或者私信本人。

  • 相关阅读:
    tomcat8.5处理get请求时,控制台输出中文乱码问题的解决
    解决:win10有提示音,但是播视频没有声音
    ORA-00257: Archiver error. Connect AS SYSDBA only until resolved错误解决
    11:STM32---spl通信
    textfsm 案例分享
    4. Java并发编程-管程
    力扣刷题day47|392判断子序列、115不同的子序列
    Clickhouse冷热配置
    腾讯出来的3年测试经验小伙来面试,他这情况要求18K我该给吗?
    3396: [Usaco2009 Jan]Total flow 水流 (最大流)
  • 原文地址:https://blog.csdn.net/diamondwang2012/article/details/132902624