矿工挖宝-第14届蓝桥杯国赛Scratch真题初中级组第4题

news2025/2/24 18:18:11

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

矿工挖宝,本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第4题,题目要求编程创作矿工挖宝游戏 。玩家使用鼠标点击地面以下位置,夹子就慢慢移到点击位置,如果碰到金块或钻石就拾取起来,金块和钻石都拾取后,结束游戏。

先来看看题目的要求吧。

一.题目说明

编程实现:

矿工挖宝。

具体要求:

1). 点击绿旗,角色、背景如图所示(变量“数量”初始值为0);

2). 等待1秒,地面以下随机位置生成2个金块,2颗钻石,且金块与钻石大小随机(大小范围:50 ~ 150),金块和钻石都不重叠,也不能接触舞台边缘;

3). 夹子时刻面朝鼠标方向,鼠标点击地面以下任意位置时,1秒内夹子移动到所点击位置;

4). 绳索同时跟随夹子移动伸长或缩短(绳索使用画笔绘制);

5). 夹子到达的点击位置如果有金块或钻石,立即拾取(拾取时夹子切换成夹取造型);

6). 夹子1秒内原路返回;

7). 当金块或钻石跟随夹子回到矿工位置后消失,数量加1(夹子造型切换成张开造型);

8). 重复执行3)、4)、5)、6)、7)步骤,2个金块和2颗钻石都被夹子拾取成功后,程序结束。

评判标准:

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

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

  • 9分:满足"具体要求"中的3);

  • 10分:满足"具体要求"中的4);

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

  • 10分:满足"具体要求"中的6);

  • 6分:满足"具体要求"中的7);

  • 6分:满足"具体要求"中的8)。

二.思路分析

本题包含3个角色,分别是宝物、夹子和矿工,如图所示:

其中矿工角色是最简单的,只需要设置好其位置即可。

宝物角色可以分为一静一动两个部分,一静是指在舞台下方生成2颗钻石和2个金块,一动则是指当碰到夹子时跟随夹子移动。

动相对比较简单,我们重点来分析静,对于静而言,可以使用克隆分别生成2颗钻石和2个金块,这里的难点在于如何确保4个克隆体不能重叠。如果直接使用移动随机位置,肯定会出现重叠情况,如何避免出现重叠情形呢?

超平老师给你提供如下两种思路:

  • 分段克隆,将舞台从左到右分成4段,然后在各自的范围内随机位置克隆宝物;

  • 碰撞检测,在舞台上指定范围内克隆宝物,然后检测是否碰到宝物了,如果碰到宝物,则重新移到随机位置;

这里有一个很重要的编程技巧,就是在如何在角色中如何检测碰到自己,只需要如下两步:

1). 第一步,先切换到其它角色中,找到碰到角色指令,选择角色为宝物;

2). 第二步,将碰撞指令复制到宝物角色中;

夹子角色看起来比较简单,当使用鼠标点击某个位置,让夹子滑行到该位置,然后原路返回(同样是滑行)即可。

但是要考虑一种情况,就是一旦夹子碰到宝物,它是继续滑行到鼠标位置还是立刻返回呢?如果是立刻返回,又该如何实现呢?

在夹子移动的过程中, 还有一根绳索,这个是需要使用画笔来绘制的。思路相对比较简单,就是在夹子和矿工两点之间重复绘制线段即可,每次绘制之前需要先擦除之前的线段,当然,这需要再增加一个画笔角色。

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

三.编程实现

根据题目描述和思路分析,我们分5个步骤来编写程序:

  • 初始化设置

  • 克隆宝物

  • 夹子前进和返回

  • 绳索效果

  • 拾取宝物

1. 初始化设置

这里的初始化包括矿工角色和夹子角色,切换到矿工角色,编写代码如下:

再切换到夹子角色,编写代码如下:

都是一些常见的设置,这里就不再解释了。

2. 克隆宝物

在前面的思路分析中,提供了两种思路,分别是分段克隆和碰撞检测。其中分段克隆实现起来比较简单,只是随机性不够,这里重点介绍碰撞检测的实现方式。

切换到宝物角色,编写代码如下:

代码比较好理解,说明两点:

1). 之所以分两次重复执行,是确保克隆2颗钻石和2个金块;

2). 注意x和y坐标的范围,自己多测试两次,确保宝物没有碰到舞台边缘,同时在地面以下位置。

按照这种方式克隆出来的宝物,很容易出现重叠情况,所以对于每个克隆体,都做一个判断,只要碰到宝物,就重新随机位置, 对应的代码如下所示:

再强调一遍,在宝物角色中,是无法使用“碰到宝物”指令的, 如图:

但是,在其它角色中是可以的,比如在夹子角色中,如图:

然后,将该指令复制到宝物角色中即可,这样就可以确保宝物角色不会重叠了。执行程序,效果如下:

3. 夹子前进和返回

我们先不考虑夹子拾取宝物的情况,这也是一个很重要的编程技巧,就是将复杂的问题拆多个简单的问题。

对于本题而言,就是先实现夹子角色独立的功能,然后再考虑夹子碰到宝物的情况。具体来说,有如下3点:

  • 夹子时刻面向鼠标方向;

  • 在地面以下点击鼠标才有效;

  • 先滑行到鼠标位置,再滑行到起点位置;

在夹子角色中的绿旗代码块中,继续编写如下代码:

在两个滑行指令中间,增加了一个“等待0.5秒”指令,这个并不是必须的,你也可以设置为其它数字。

4. 绳索效果

在夹子滑行的过程中,绳索同时跟随夹子移动伸长或缩短,这个需要借助画笔角色来实现,首先增加一个画笔角色,如图:

其次,要明确画图的时机,一旦夹子移动了,就需要绳索,所以在夹子角色中的滑行指令之前,发送一个广播消息。

切换到夹子角色中,在刚才的代码块中,增加广播指令,如图:

接下来切换到画笔角色,当绿旗点击时,设置好画笔的颜色、粗细,代码如下:

当接收到广播消息时,开始重复擦除和绘制,继续编写代码如下:

代码不难,简单说明两点:

1). 由于滑行的时间是1秒,所以重复绘制的持续时间也是1秒,这里利用了计时器,先将计时器归零,当计时器> 1时,就不再绘制了;

2). 这里使用了自制积木,主要是为了简化代码结构。

执行程序,可以看到绳索随夹子伸缩,如图:

5. 拾取宝物

这是最后一步,也是最关键的一步了,所谓拾取宝物,是指当夹子碰到宝物时,宝物跟随夹子回到矿工位置然后消失的效果。

这会涉及到宝物和夹子两个角色,对于宝物克隆体来说,需要检测是否碰到夹子,如果碰到夹子,就跟随夹子移动,当碰到矿工时,删除克隆体即可。

同时,还需要考虑两个问题,一是要使用变量记录拾取宝物的数量,二是当抓到宝物时,需要告知夹子,你可以返回了。

切换到宝物角色,编写代码如下:

简单说明两点:

1). 这里使用了一个单独的代码块,只是为了方便讲解,实际上完全可以直接写在之前的“当作为克隆体启动时”代码块的后面;

2). 这里的变量需要进行初始化,一般是放在绿旗代码块中,这里就不单独列出了。

当夹子抓到宝物时,夹子是继续前进到鼠标点击位置,还是立刻原路返回呢?

题目其实并没有要求这一点,所以在比赛的时候,可以忽略这一点,毕竟时间非常紧张,如果是这样的话,上面代码中的广播指令就可以不用写。

如果考虑到游戏的完整性和可玩性,肯定是立刻原路返回才更加合理,你说是吧。

如此一来,夹子角色在接收到“返回”广播时,应该立刻终止之前的滑行指令,然后立即滑行到起点位置。

这就需要对夹子角色的代码结构进行改造,改用事件广播机制来实现循环,这样就可以确保在停止其它脚本后,通过广播重新执行代码。

首先,在绿旗代码块中,发送一个“开始”的广播消息,代码如下:

当接收到“开始”广播消息后,重复执行没有抓到宝物时的前进和返回,代码如下:

这里将原来的无限循环改成了条件循环,是因为当所有宝物都抓取完毕,游戏就结束了。

当接收到”返回“消息时,就意味着抓到宝物了,此时应该停止正在滑行的动作,立刻滑行到起点位置,对应的代码如下:

简单说明3点:

1). 滑行之前需要发送“画线”的广播,重新绘制绳索;

2). 在抓到宝物时,夹子需要切换成拾取造型,完成后又恢复到张开造型;

3). 宝物抓取完毕,又发送了一个”开始“的广播,原来停止下来的代码又可以重新执行。

至此,一个完美的矿工挖宝游戏就完成了,赶紧来体验一下吧。

四.总结与思考

本题是编程部分第4题,分数为60分,积木块数量80个左右,涉及到的知识点主要包括:

  • 克隆编程,重点是控制克隆体的位置;

  • 运动编程,重点是滑行指令的应用及其特点;

  • Scratch画笔;

  • 事件广播机制;

本题难度不小,涉及的知识点比较多,综合性较强,建议完成时间15~20分钟,中级组考生15分钟,而初级组考生约为20分钟。但是对大部分同学来说,要在这个时间内完成,还是挺有挑战性的。

在本作品中,有3个非常重要的编程技巧,再次强调一下:

1). 角色可以检测是否碰到自己(通常是有克隆体的情况),实现方法就是从别的角色中复制一个碰到角色指令;

2). 对于循环结构,除了使用重复指令之外,还可以使用事件广播机制来实现,这样还可以随时在需要的时候终止循环,然后再重新循环;

3). 在创作游戏的时候,针对一些特殊的场景,可以使用画笔巧妙的实现,比如本作品中的绳索,再比如小猫钓鱼作品中的钓鱼线,愤怒的小鸟作品中的弹弓效果等待。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL(进阶篇3.0)

锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算机资源(CPU、RAM、I/O)的争用之外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&…

十五、实例化

第一部分 概念: 1)引入 OpenGL ES 实例化(Instancing)是一种只调用一次渲染函数就能绘制出很多物体的技术,可以实现将数据一次性发送给 GPU ,告诉 OpenGL ES 使用一个绘制函数,将这些数据绘制…

练习:有限状态机测试

练习:有限状态机测试 1 FSM 示例 在练习中,我们将使用两个 FSM。 两者都有输入字母 X {a, b} 和输出字母 Y {0,1}。 第一个 FSM 将称为 M1 并由以下有向图表示。 对于上面给出的每个 FSM Mi: 1.确定以下值,显示您的工作。 (a…

[MySQL]不就是SQL语句

前言 本期主要的学习目标是SQl语句中的DDL和DML实现对数据库的操作和增删改功能,学习完本章节之后需要对SQL语句手到擒来。 1.SQL语句基本介绍 SQL(Structured Query Language)是一种用于管理关系型数据库的编程语言。它允许用户在数据库中存…

AngularJs学习笔记--unit-testing

javascript是一门动态类型语言,这给她带来了很强的表现能力,但同时也使编译器几乎不能给开发者提供任何帮助。因为这个原因,我们感受到编写任何javascript代码都必须有一套强大完整的测试。angular拥有许多功能,让我们更加容易地测…

如何编写接口测试用例?测试工程师必备技能!

自动化始终只是辅助测试工作的一个手段,对于测试人员而言,测试基础和测试用例的设计才是核心。如果测试用例的覆盖率或者质量不高,那将这部分用例实现为自动化用例的意义也就不大了。 那么,接口测试用例应该怎么编写呢&#xff1f…

基于SpringBoot实现的分页查询(分分钟钟上手)

这里是使用的hibernate(不需要写sql)和springboot 也可使用 MyBatis&#xff08;推荐使用&#xff09; 下面是使用Spring Boot实现分页查询的示例&#xff1a; 在pom.xml文件中添加依赖项&#xff1a; <dependency><groupId>org.projectlombok</groupId>&l…

阿里面经最新分享:Java 面试指南 / 成长笔记(程序员面试必备)

写在前面 又到了收割 Offer 的季节&#xff0c;你准备好了吗&#xff1f;曾经的我&#xff0c;横扫各个大厂的 Offer。还是那句话&#xff1a;进大厂临时抱佛脚是肯定不行的&#xff0c;一定要注重平时的总结和积累&#xff0c;多思考&#xff0c;多积累&#xff0c;多总结&am…

2023年牛客网互联网高级架构师Java面试八股汇总(附答案整理)

此文包含 Java 面试的各个方面&#xff0c;史上最全&#xff0c;苦心整理最全 Java 面试题目整理包括基础JVM算法数据库优化算法数据结构分布式并发编程缓存等&#xff0c;使用层面广&#xff0c;知识量大&#xff0c;涉及你的知识盲点。要想在面试者中出类拔萃就要比人付出更多…

【动态规划】-最小路径和(java)

最小路劲和--动态规划和内存压缩 最小路径和题目描述 动态规划解题思路&#xff1a;代码演示动态规划的内存压缩动态规划专题 最小路径和 题目描述 给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角 沿途只可以向下或者向右走&#xff0c…

用了7年的 source insight 3.5 背景色及字体配置(提升code效率)

文章目录 背景目的背景护眼色配置字体与编辑选项配置全局配置的保存与加载 背景 今天突然source insight3.5抽风&#xff0c;配置重置了&#xff0c;默认配置很难看。 找了一会儿才找到之前的备份配置&#xff0c;load后舒服了。 目的 在此记录并share用了7年的 source insi…

300页幻灯片图解数据安全风险评估(附下载)

为指导网络数据安全风险评估工作&#xff0c;发现数据安全隐患&#xff0c;防范数据安全风险,依据《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等法律法规&#xff0c;参照数据安全相关国家标准&#xff0c;全国信息安全标准化技…

ChatGPT与VBA:Excel操作一键搞定的全能助手

摘要 Excel是一款广泛应用于数据处理和分析的工具&#xff0c;而VBA&#xff08;Visual Basic for Applications&#xff09;是一种用于编程自动化Excel操作的语言。然而&#xff0c;对于非专业的Excel用户来说&#xff0c;VBA编程可能具有一定的难度。本文将探讨如何利用Chat…

不同规格的磁场线圈适用领域

磁场线圈基于毕奥-萨法尔定律&#xff0c;以绕组中通电流的形式复现磁场的线圈&#xff0c;用于复现标准磁场&#xff0c;是弱磁场计量测试领域最主要的标准器具之一。按所复现的磁场类型可分为恒定磁场线圈、交变磁场线圈、梯度磁场线圈、脉冲磁场线圈等&#xff0c;按结构可分…

AIX5.3安装Python3遇到的坑

最近在折腾AIX5.3&#xff0c;这是一款非常古老的power架构的服务器&#xff0c;目前IBM官方已经不维护&#xff0c;但是仍然在很多银行里跑着比较核心的业务&#xff0c;由于我们的客户大部分是面向银行&#xff0c;少不了要做AIX5.3上的应用软件适配。本文记录在AIX5.3上编译…

51单片机——DS18B20 温度传感器实验,小白讲解,相互学习

DS18B20 介绍 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线&#xff08;单总线&#xff09;”接 口的温度传感器。与传统的热敏电阻等测温元件相比&#xff0c;它是一种新型的体积小、 适用电压宽、与微处理器接口简单的数字化温度传感器。 DS18B20 温度传感器具有如…

linuxOPS基础_linux常用自有服务(ntp,firewalld,crond)

linux常用自有服务 服务名含义ntpd用于同步计算机的系统时间的服务firewalld防火墙服务crond计划任务服务 ntp时间同步服务 NTP是网络时间协议(Network Time Protocol)&#xff0c;它是用来同步网络中各个计算机的时间的协议。 工作场景&#xff1a; ​ 公司开发了一个电商…

Jmeter教程 —— 简单的压力测试

Jmeter是一个非常好用的压力测试工具&#xff0c;可以用来做轻量级的压力测试&#xff0c;非常合适&#xff0c;只需要十几分钟&#xff0c;就能把压力测试需要的脚本写好。 什么是压力测试 顾名思义&#xff1a;压力测试&#xff0c;就是 被测试的系统&#xff0c;在一定的…

Android Studio查看第三方库依赖树

在Android开发过程中&#xff0c;我们或多或少都会引入第三方库&#xff0c;引入的库越多&#xff0c;越容易产生库之间的依赖冲突&#xff0c;所以我们今天一起来了解Android Studio查看第三方库依赖树。 下面就拿我遇到的问题还原一下&#xff1a; 之前接人容联客服系统的时候…

工作小技巧,封装if和Exception

在我们的工作中&#xff0c;经常会有这样的逻辑&#xff0c;就是判断一个参数是否合法&#xff0c;不合法就抛出异常&#xff0c;再由全局异常捕获后返回。 本文使用我编写的springboot日记本系统作为蓝本&#xff0c;&#xff0c;在已有项目的基础上改&#xff0c;源码下载地…