• 自动驾驶-第10届蓝桥杯Scratch省赛真题第5题


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

    第10届蓝桥杯青少年组省赛于2019年3月24日举行,形式为线下考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

    自动驾驶,本题是第10届蓝桥杯Scratch省赛真题编程第5题,初级组和中级组都有此题,题目要求考生使用Scratch编程模拟小汽车自动停车效果,小车从舞台左侧向右行驶。当小车快要碰到小猫时,小车能自动停止移动,而小猫被吓到了。

    先来看看题目的要求吧。

    一.题目说明

    编程实现:

    将舞台背景改为“blue-sky”背景,在舞台上设置 1 个小车“Car-Bug”角色,并保留默认的小猫角色。

    小车从舞台左侧向右行驶。当小车快要碰到小猫时,小车能自动停止移动,而小猫被吓到了。

    具体要求:

    1、每次点击绿旗后,舞台背景和小车角色的初始位置都要如下图所示,小猫角色的 x 坐标值为从 100 到200 范围内的一个随机数值,y 坐标参考图中位置来大致设置;

    2、小车开始自动向右行驶。小猫的位置则始终保持不动;

    3、小车在行驶到车头距离小猫一个车身范围以内时,小车能自动停止。视觉观察时,小车不能碰到小猫,两者之间留有一段距离。如下图所示:

    4、在小车停下后,小猫说“哇!!!”2 秒钟,程序结束。

    将程序保存到桌面,命名为“5.sb2”。

    评判标准:

    • 10 分:每一次点击绿旗后,小车在舞台左边,而小猫的位置则是随机的(需要多次点击绿旗来验证随机位置);

    • 40 分:在 10 分的基础上,小车在行驶到距离小猫一个车身范围内停止。但是,以下两种情况均不符合要求:

     1)小车碰到小猫,如下图所示:

    2)小车停下时,车头距离小猫的距离明显大于一个车身宽度,或者不论小猫的位置如何变化,车停下的位置都相同(即小车停下的位置并没有根据小猫的位置随机变化而变化),如下图所示:

    • 50 分:完全符合题意,即在 40 分的基础上,实现了小车停下后,小猫说“哇!!!”2 秒钟。

    二.思路分析

    本题只有两个角色,分别是小猫和小汽车,小猫的效果比较简单,一是设置好位置,二是在小汽车停下来后,说一声”好!!!“。

    这里的重点是小汽车,小汽车从舞台左边向右移动,当移到距离小猫一定位置时自动停止。由于小猫的位置是随机的,所以小汽车停下来的位置也是随之变化的,那如何确定小猫的位置呢?

    我们可以换一个思维,小汽车停止的位置随小猫位置的变化而变化,那有没有不变的量呢?仔细想想,可以发现它们二者之间的距离是不变的,这个距离是小汽车的一个车身长度。

    在Scratch中的侦测模块中,有一个指令”到xx的距离“可以获取当前角色到某个角色的距离,如图:

    如此一来,问题就变简单了,当小汽车到小猫的距离小于某个值时,停止移动即可。 

    三.编程实现

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

    • 小猫随机位置

    • 小汽车行驶并自动停车

    • 小猫说哇

    1. 小猫随机位置

    根据题目描述,小猫角色的 x 坐标值为从 100 到200 范围内的一个随机数值,我们使用随机数指令设置其位置即可,代码如下:

    由于舞台较小,这里将小猫的大小设置为75,这个不是必须的,你可以设置任意大小。

    2. 小汽车行驶并自动停车

    小汽车从舞台左边开始向右移动,需要先设置好初始位置,然后重复执行右移,很明显,此处使用直到循环最为简单,代码如下:

    简单说明一下,这里将小车设置为50,此时一个车身的距离大概是120步,你可以根据实际情况来确定这个距离。当小车自动停止后,给小猫角色发送了一个”停车“的广播消息。

    3. 小猫说哇

    小猫在接收到”停车“广播消息后,说了一声哇,切换到小猫角色,编写代码如下:

    至此,整个代码就编写完毕,你可以反复执行程序,测试一下自动驾驶功能,是不是还挺智能的。

    四.总结与思考

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

    • 熟悉Scratch舞台坐标系,并快速确定角色的坐标;

    • 随机数指令的运用;

    • 外观编程,包括设置大小和说话指令;

    • 重复直到循环;

    • 侦测角色到另一个角色之间的距离;

    • 事件广播机制。

    本题的代码并不多,难点在于如何在变化的量中找到不变的量,换句话说,就是要抓住问题的本质,这是一个非常重要的思维模型,在编程时会经常用到这种思维,这也是为什么说编程可以提升逻辑思维能力的原因之一。

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

  • 相关阅读:
    vue项目引入微信sdk: npm install weixin-js-sdk --save报错
    【无标题】
    在线问题反馈模块实战(十五)​:实现在线更新反馈状态功能
    绘画系统(01):【纲】Paint System[官翻]
    【C++】STL——string的使用
    【Leetcode】152. 乘积最大子数组
    【六袆 - Framework】Angular-framework;前端框架Angular发展的由来0001;
    我的Qt作品(15)使用Qt+OpenCV实现一个卡尺工具,具备找线和找圆的功能
    回归与聚类算法系列⑤:逻辑回归
    对比Excel,轻松学习Python数据分析》读书笔记------Pandas入门
  • 原文地址:https://blog.csdn.net/diamondwang2012/article/details/127652474