打地鼠游戏-第14届蓝桥杯STEMA测评Scratch真题精选
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第102讲。
蓝桥杯选拔赛现已更名为STEMA,即STEM 能力测试,是蓝桥杯大赛组委会与美国普林斯顿多文化教育研究中心合作推出的考试项目。STEM能力测试致力于综合评价学生的 STEM 水平,对学生的科技素养、逻辑思维和编程能力等三方面进行客观科学的测试。
打地鼠游戏,本题是2023年1月15日举行的第14届蓝桥杯STEMA考试Scratch图形化编程真题初/中级组编程部分第4题。题目要求编程实现打地鼠游戏,通过鼠标控制锤子移动,在出现地鼠的地洞处点击锤子,被锤子砸中的地鼠出现眩晕后消失。
先来看看题目的要求吧。
一.题目说明
编程实现:
打地鼠游戏:通过鼠标控制锤子移动,在出现地鼠的地洞处点击锤子,被锤子砸中的地鼠出现眩晕后消失。
具体要求:
1). 运行程序,角色、背景如图所示(变量"分数”初始值0);
2). 鼠标点击右下角的“START”,进入游戏操作界面;
3). 等待1秒后,锤子持续跟随鼠标指针移动,按下一次鼠标左键,锤子砸下后拾起;
4). 一个地鼠在1-2秒的随机时间内在任意一个地洞中出现,如果地鼠未被锤子砸中,它会在1-2秒时间后消失;
5). 地鼠如果被锤子砸中,此时地鼠切换造型0.2秒,当它消失后分数+1;
6). 重复持续4)、5)步骤。
评判标准:
-
2分:满足“具体要求”中的1);
-
2分:满足“具体要求”中的2);
-
5分:满足“具体要求”中的3);
-
8分:满足“具体要求”中的4);
-
5分:满足“具体要求”中的5);
-
3分:满足“具体要求”中的6)。
二.思路分析
本题包含两张背景图片,如图所示:
对于背景而言,当点击绿旗时,切换到带有标题的背景1,当点击开始按钮后,切换到背景2。
角色则有3个,分别是开始按钮、锤子和地鼠,如图所示:
其中锤子角色和地鼠角色都有两个造型,从功能方面来考虑,开始按钮角色最为简单,绿旗点击时,显示在右下角,点击按钮后,按钮消失。
锤子角色的功能有如下两点:
-
跟随鼠标移动
-
点击鼠标时切换造型
相对来说,地鼠角色是本作品的重难点,其功能有如下两点:
-
随机在8个洞口出现
-
被锤子砸中时消失并增加分数
乍一看,好像挺简单的,但是真正到编写代码的环节,才发现有些棘手。
主要有如下3个问题需要考虑:
-
地鼠需要克隆吗?
-
如何随机一个洞口?
-
被锤子砸到或者1-2秒后地鼠都要消失,如果同时对这两个场景进行判断?
第一个问题比较简单,是否需要克隆的判断依据是在同一时刻,舞台上是否会出现多个角色,如果是就需要克隆,如果不是,则无需克隆。根据题目描述,在同一时刻,舞台上的地鼠只有一个,所以无需克隆,当然,你用克隆也是可以实现的。
针对第二个问题,仔细观察这里的8个洞口,呈椭圆形分布,并不是一个非常规则的排列,因而无法通过简单的计算获取坐标。不过,我们可以换一个思路,先用3步定位法获取每个洞口的x、y坐标,并使用列表保存起来,然后就可以结合随机数指令随机一个洞口。
第三个问题相对要麻烦一点,我们不妨这样分析,先不考虑锤子打地鼠的情况。当地鼠出现后1-2秒就消失,这个比较简单,在这个过程中,还需要判断地鼠被锤子砸到的情形,如何在等待的同时进行判断呢?
可以使用广播事件机制,让等待和判断并行执行,同时需要确保当一方条件满足时,另一方需要停止执行代码。比如当锤子砸到地鼠时,地鼠消失并增加分数,同时要停止等待1-2秒隐藏的代码,然后重新出现地鼠。
接下来,我们就进入具体的编程实现环节。
三.编程实现
根据题目描述和思路分析,我们可以分4步来编写程序:
-
初始化设置
-
点击开始按钮启动游戏
-
锤子角色
-
地鼠角色
1. 初始化设置
初始化设置包括如下3个方面:
-
背景及各个角色的位置和状态(显示和隐藏)
-
分数变量
-
列表,用于保存洞口坐标
我们从开始角色入手,在开始角色中,编写代码如下:
关于背景的设置,可以放在舞台背景中,也可以放在任何一个角色中,为了简单起见,直接写在开始角色中。
然后是锤子角色,设置一下位置、方向和造型,并隐藏起来,切换到锤子角色,编写代码如下:
最后是地鼠角色,将其隐藏起来即可,由于分数和洞口位置都是和地鼠角色相关的,因此我们将变量和列表的初始化也放在地鼠角色中。
创建一个”分数“变量,再创建两个列表,分别命名为”坐标x“和”坐标y“,并使用3步定位法的编程技巧快速确定好每个洞口的x、y坐标,并通过代码将坐标值分别存入列表中,在地鼠角色中,编写代码如下:
别忘了清空列表,一共有8个洞口,从上到下自左至右依次添加,每次添加一组,添加后的列表数据如下:
如此一来,初始化工作就全部完成了。
2. 点击开始按钮启动游戏
当点击开始按钮角色时,启动游戏,进入游戏界面,首先是开始角色,它需要隐藏,同时需要切换舞台背景,对应的代码如下:
锤子角色和地鼠角色怎么知道你点击开始按钮了呢?打个电话通知一下呗,所以这里使用了”广播开始“指令。
3. 锤子角色
启动游戏后,锤子角色切换到显示状态,1秒后跟随鼠标移动,如果按下鼠标,则切换两次造型,表示锤子砸下的效果。
切换到锤子角色,编写代码如下:
代码不难理解,但有一个细节需要注意,在Scratch中,编写按下鼠标的操作时,通常有一个固定的写法,如下:
之所以增加了一个”等待按下鼠标不成立“指令,是为了避免按下鼠标时重复执行多次的奇怪效果,一般来说,从鼠标按下到松开才算是一次完整的按键操作,这是一个非常重要的编程技巧,一定要理解并掌握好。
4. 地鼠角色
接下来就是地鼠角色了,根据前面的思路分析,我们需要使用事件广播机制实现代码并行执行。
为了达到更好的效果,我们需要使用两次广播机制,第一次是启动游戏时的广播,第二次是在地鼠出现后。
当地鼠接收到”开始“广播后,先发送一个”出现地鼠“的广播,代码如下:
为什么要这么写呢,你可能会觉得有点多此一举了,我们暂且先放一下,稍后再说明原因。
当接收到”出现地鼠“的广播消息时,地鼠会随机一个洞口出现,出现之后有两种情况会消失,一是被锤子砸到,二是等待1-2秒之后,对应的代码如下:
简单说明3点:
1). 由于在列表中保存的x、y坐标是成组的,需要通过相同的编号随机获取一组坐标,因此我们需要先得到一个1-8之间的随机数作为编号,所以这里使用了变量”洞口编号“;
2). 当地鼠显示之后,如果不考虑被砸中的话,1-2秒后会隐藏,然后再次出现,怎么再次出现呢,直接给自己再发送一个”出现地鼠“的广播即可,这其实间接的实现了循环效果,但为什么不是有循环呢,稍后揭晓谜底;
3). 在等待的过程中,需要判断是否被砸中,这是一个并行场景,因此发送了一个”判断是否被砸中“的广播消息;
如何判断地鼠是否被砸中了,有两种方案,如下:
-
使用”重复执行“ + ”如果...那么“指令
-
使用”等待条件“指令
你觉得哪一个更简单呢,显然是后者,在地鼠角色中继续编写代码如下:
代码不难,重点说明两点:
1). 判断是否被砸中,除了地鼠碰到锤子外,同时还要确保按下鼠标,即砸下锤子;
2). 如果被砸中了,切换造型,等待0.2秒并隐藏,同时增加分数,还有一点非常重要的是要停止该角色的其他脚本。这样一来,前面的代码块就终止了,从而确保了逻辑的正确性,最后再发送一个”出现地鼠“的广播,重复这个过程;
我们再来揭晓之前的谜底,为什么使用广播来实现循环,而不是直接使用重复指令。原因很简单,就是因为这里使用了”停止该角色的其他脚本“,如果是重复执行的话,一旦停止脚本,就无法再次出现地鼠了,这下你应该彻底明白了吧^_^。
至此,整个作品就创作好了,一个有趣的打地鼠游戏就创作好了,赶紧抡起你的大锤,狠狠地砸向地鼠吧
四.总结与思考
本题是初级组最后一题,分数为25分,积木块数量80个左右 ,涉及到的知识点主要包括:
-
事件广播机制,尤其是使用广播实现循环和代码并行的编程技巧;
-
变量的使用;
-
列表的使用,包括插入数据和获取数据;
-
随机数的灵活运用;
-
判断按下鼠标操作的实现方法;
-
等待条件指令的灵活运用。
作为初级组最后一题,本题还是有一定难度的,考察的知识点非常多,这需要考生具备扎实的编程基础,能够灵活运用各知识点,根据题目要求,完成作品的创作。
打地鼠是一个非常经典的游戏,也有各种不同的游戏版本,你完全可以充分发挥自己的创意,对作品进行改造和升级,要不要尝试一下呢?
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要素材和源码的,可以移步至“超平的编程课”公众号,或者联系本人。
相关文章:
打地鼠游戏-第14届蓝桥杯STEMA测评Scratch真题精选
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第102讲。 蓝桥杯选拔赛现已更名为STEMA,即STEM 能力测试,是蓝桥杯大赛组委会与美国普林斯顿多…...
链表经典刷题--快慢指针与双指针
本篇总结链表解题思路----快慢指针,其实也就是双指针,这个快慢并不单纯指“快慢”,它更多的可以表示,速度快慢,距离长度,时间大小等等,用法很有趣也很独特,理解它的思想,…...
【Java集合框架】篇四:Set接口
1. Set及主要实现类特点 Set:无序、不可重复(去重)、存储value HashSet:底层使用HashMap,即使用 数组单项链表红黑树 结构进行存储。(jkd8中) LinkedHashSet:是HashSet的子类&…...
Python 数据库连接 + 创建库表+ 插入【内含代码实例】
人生苦短 我用python Python其他实用资料:点击此处跳转文末名片获取 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB.在TESTDB数据库中您已经创建了表 EMPLOYEEEMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。连…...
DSS 部署环境需求清单
文章目录 DSS系统需求项目地址计算资源计算基准:计算引擎程序硬件需求表 :DSS计算及存储资源需求计算资源计算基准:计算程序硬件需求表:DSS系统需求 项目地址 https://github.com/WeBankFinTech/DataSphereStudio 计算资源计算基准: 1.日活用户10万。 2.单用户单日总…...
Python的面向对象,详细讲解Python之用处等基本常识
目录 Python 面向对象 面向对象技术简介 创建类 实例 实例 self代表类的实例,而非类 实例 创建实例对象 访问属性 实例 Python内置类属性 实例 python对象销毁(垃圾回收) 实例 实例 类的继承 实例 方法重写 实例 基础重载方法 运算符重载 实例…...
如何使用固态继电器为恒温器供电
恒温器有两种电源:电池和 24VAC。恒温器需要电池才能不间断地运行。电池消耗的能量尽可能低非常重要,但即使您最大限度地减少消耗,这仍然不是一个用户友好的选择,因为电池会不时需要更换。要降低更换频率,可以使用 24V…...
【LeetCode】剑指 Offer(14)
目录 题目:剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 32…...
Rman单实例迁移到单实例
关于同平台同版本数据库之间的迁移操作的实验 ---Source DB[rootoracle-db-19cs ~]# cat /etc/redhat-release CentOS Stream release 8 [rootoracle-db-19cs ~]# --- Target DB[rootoracle-db-19ct ~]# cat /etc/redhat-release CentOS Stream release 8 [rootoracle-db-19ct…...
毕业设计 基于stm32舞台彩灯控制器设计app控制系统
基于stm32舞台彩灯控制器设计app控制1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STM32F103C8T6核心系统电路设计2.2 WS2812RGB彩灯电路设计3、部分代码展示3.1 控制WS2812显示颜色3.2 设置RGB灯的颜色,角度,亮度实物图1、项目简介 选题指导…...
【MyBatis】篇一.
文章目录1、MyBatis概述2、环境搭建1、MyBatis概述 认识: JavaEE开发的一个套件SSM,即: MyBatis是一个持久层的框架,是对JDBC的一个封装,是一个半自动的ORM框架。 ORM即实体类对象和数据库中的数据的一个映射关系&am…...
【JavaScript速成之路】JavaScript流程控制
📃个人主页:「小杨」的csdn博客 🔥系列专栏:【JavaScript速成之路】 🐳希望大家多多支持🥰一起进步呀! 文章目录前言1,流程控制2,分支结构2.1,if语句2.2&…...
18、基准测试,sysbench
基准测试,sysbench 1. sysbench1.1 用途1.2 安装1.3 版本1.4 查看帮助1.5 测试过程阶段2 CPU 性能测试2.1 测试原理2.2 查看帮助2.3 测试3. 内存性能测试3.1 查看帮助信息3.2 测试过程4.磁盘性能基准测试4.1 查看帮助4.2 生成文件(prepare)4.3 测试文件io(run)4.4 结果分析4.5…...
3D,点云拼接2
文章目录 点云配准方法自动配准技术PCL实现的配准算法两两配准1.关键点提取2.特征描述符3. 对应关系估计4. 对应关系去除5. 变换矩阵估算在上篇文章中对于拼接的概念、拼接精度的评价做了详细的介绍。本文是对拼接(配准)的进一步介绍,涉及更多原理层面的东西。 主要围绕以下三…...
jmeter学习笔记一(http基础知识)
HTTP请求:客户端同通过发送http请求向服务器请求资源的访问。http请求由三部分组成:请求行、请求头、请求正文 请求行包括:请求方法 URI 协议/版本 请求头:Content-type、Cookie、Authorization、User-Agent、Accept、Acc…...
【Java】CompletableFuture 并发顺序调度
前言 Java CompletableFuture 提供了一种异步编程的方式,可以在一个线程中执行长时间的任务,而不会堵塞主线程。 和Future相比,CompletableFuture不仅实现了Future接口,也实现了 CompletionStage接口。Future接口不用多说&#…...
职场人必备的6款实用办公app,每一款都是心头爱
打工人不容易啊,不提高工作效率怕是要被淘汰了。今天给大家分享6款职场人必备的实用办公APP,免费效率神器让工作事半功倍。这些APP每一款都是我的心头爱,肯定会让人大开眼界的,超级实用,直接往下看吧。1、向日葵远程控…...
小丑改造计划之复习一
1.函数重载 根据参数个数 参数顺序 参数类型 的不同 可以在同一个域存在多个同名函数 但是不可以根据返回值 缺省参数的不同去重载函数 2.指针和引用的区别 第一点 指针是内存地址,会开辟内存空间,而引用和它所引用的变量共享同一块内存 第二点 引用必须…...
final修饰符使用中遇到的一些问题
文章目录final修饰符1. final不能用来修饰构造方法2. final修饰变量的一些注意问题2.1 final修饰成员变量2.2 final修饰引用类型2.2.1 演示代码中lombok链式编程介绍final修饰符 final具有“不可改变”的含义,它可以修饰非抽象类、非抽象成员方法和变量。 用final…...
好记又实用的获取电脑型号方法
个人常用的方法 方法二最好记又好用。 方法一 dxdiag命令 按下键盘WINR调出运行在输入框输入dxdiag命令后,按下回车;进入DirectX诊断工具,便可查看系统型号等信息。 这里就会显示系统型号。 方法二 设备和打印机 控制面板-查看方式-小图…...
@Transactional配置详解
一:事务注解Transactional,属性propagation的7个配置 PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。,默认配置,也是常用的选择。 PROPAGATION_SUPPORTS -- 支持当前事务&#…...
性能测试面试题汇总
稳定性测试的怎么挑选的接口? 1、频繁使用的接口:选择那些被频繁使用的接口,因为这些接口可能会面临更大的负载和并发访问,从而可能导致性能问题。 2、核心功能接口:选择那些实现系统核心功能的接口,因为这…...
vue权限控制和动态路由
思路 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个token,拿到token之后(我会将这个token存贮到localStore中,保证刷新页面后能记住用户登录状态)…...
利用正则表达式删掉代码中的所有注释-pycharm为例
首先删除注释 打开您想要删除注释的Python文件。 使用快捷键 Ctrl Shift R 打开 "Replace in Files"(在文件中替换)对话框。 在 "Find"(查找)框中输入以下正则表达式,以查找所有行中的注释内容…...
【java基础】内部类、局部内部类、匿名内部类、静态内部类
内部类 内部类就是定义在另一个类中的类。我们使用内部类的原因主要有以下两点 内部类可以对同一个包中的其他类隐藏内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据 public class A {class B {} }我们使用内部类可以访问外部类的所有属性&…...
react renderProps学习记录
react renderProps学习记录1.引入2.改一下呢3.再改一下呢4.总结一下如何向组件内部动态传入带内容的结构(标签)?children propsrender props1.引入 上代码: import React, { Component } from react import ./index.css export default class Parent extends Com…...
关于tf.gather函数batch_dims参数用法的理解
关于tf.gather函数batch_dims参数用法的理解0 前言1. 不考虑batch_dims2. 批处理(考虑batch_dims)2.1 batch_dims12.2 batch_dims02.3 batch_dims>22.4 batch_dims再降为12.5 再将axis降为12.6 batch_dims<02.7 batch_dims总结3. 补充4. 参数和返回值5. 其他相关论述6. 附…...
日常操作linux常用命令
cd /mnt/opt/cqstt/logs/stt-erp docker logs -f --tail1000 stt-erp # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq # 查看逻辑CPU的…...
【Java集合框架】篇二:Collection接口方法
JDK不提供此接口的任何直接实现类,而是提供更具体的子接口(如:Set和List)去实现。 Collection 接口是 List和Set接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 集合。方法如下…...
PHP入门指南:简单易学的语法和丰富的调试工具与安全性最佳实践
PHP是一种非常流行的服务器端编程语言,它被广泛地应用于Web开发中。如果您想学习Web开发,那么PHP是一个非常好的选择。在本文中,我将介绍PHP的一些基础知识,包括语法、变量、函数、数组、数据库连接、调试和安全性等。PHP的语法PH…...
怎么用网页源码做网站/seo入门教程seo入门
ItemParamItem itemParamItem MAPPER.readValue(jsonData,ItemParamItem.class); 此ItemParamItem没有添加 构造函数转载于:https://www.cnblogs.com/javaxs/p/6366318.html...
网站不能访问的原因/重庆黄埔seo整站优化
大致情况:我用TP5.1和ajax想要实现图片上传的需求,开始我是把ajax写在html模板中的图片上传没有问题,后来考虑到代码规范的问题,不想把代码都写在一起,而是单独写在一个js文件中去引入,结果图片上传失败。a…...
wordpress 图片 并排/下载百度语音导航地图安装
1. 安装 gensim source activate python362 conda install -n python362 gensim2. 实操 2.1 基本数据(语料) 语料文件可以一行一行 ,也可以使用分词后的空格分割的文本 (python362) zjfzhangjifeideMBP ~/Downloads cat ./tags 迷…...
b2b网站整合营销/长春seo排名
资源 完全参照状态模式|菜鸟教程但不包括IOS代码 介绍 意图: 允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 主要解决: 对象的行为依赖于它的状态(属性),并且可以根据它的状态…...
手机微网站制作/免费优化
哎,曾几何时 想当年,其实我也特别钟情于 if/else连环写法,上来就是一顿SAO操作,比如举个好理解的简单栗子:一般来说我们正常的后台管理系统都有所谓的角色的概念,不同管理员权限不一样,能够行使…...
建立网站的模板/百度云搜索引擎网站
如上边这样一张图片,底部有一个按钮 这个按钮固定在底部(fixed定位); 看似很简单的一个效果实现,然而在百度浏览器却出现了问题:这个底部固定定位按钮会闪现之后就不见了,其他浏览器上正常显示&…...