打地鼠游戏-第14届蓝桥杯STEMA测评Scratch真题精选

news2024/11/26 10:48:03

 [导读]:超平老师的《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个左右 ,涉及到的知识点主要包括:

  • 事件广播机制,尤其是使用广播实现循环和代码并行的编程技巧;

  • 变量的使用;

  • 列表的使用,包括插入数据和获取数据;

  • 随机数的灵活运用;

  • 判断按下鼠标操作的实现方法;

  • 等待条件指令的灵活运用。

作为初级组最后一题,本题还是有一定难度的,考察的知识点非常多,这需要考生具备扎实的编程基础,能够灵活运用各知识点,根据题目要求,完成作品的创作。

打地鼠是一个非常经典的游戏,也有各种不同的游戏版本,你完全可以充分发挥自己的创意,对作品进行改造和升级,要不要尝试一下呢?

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

需要素材和源码的,可以移步至“超平的编程课”公众号,或者联系本人。

 

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

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

相关文章

外贸建站多少钱?不同预算对应的建站方案!

外贸建站多少钱? 答案是:3000左右。 作为一个外贸企业的经营者,我们深知一个优质的外贸网站对于企业的重要性。 然而,建立一个优质的外贸网站需要耗费大量的时间和资金,因此我们需要在预算有限的情况下,…

代码随想录算法训练营第三天| 203. 移除链表、707. 设计链表、206.反转链表

977 有序数组的平方题目链接:203 移除链表元素介绍给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。思路一如果要被删除的元素是非头节点,只需要找到前一个节点&…

MySQL之幻读问题

MySQL之幻读问题 导读 在进入今天的主题之前必须先了解事务的四大特性ACID、MVCC、事务隔离级别(具体的自行查询),其中I(Isolation)隔离性所产生的问题涉及到的事务隔离分为不同级别,包括读未提交&#x…

python+pytest接口自动化(7)-cookie绕过登录(保持登录状态)

在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理;再者&#xff0c…

Java多线程——线程安全、synchronized、volatile关键字以及多线程案例

文章目录前言一、线程安全—多线程不可避免的风险!1、线程不安全的示例2、线程不安全的原因二、synchronized关键字1.synchronized的特性1)互斥2)刷新内存3)可重入2、synchronized使用示例3、Java标准库中的线程安全类三、volatil…

【巨人的肩膀】JAVA面试总结(四)

💪、JVM 目录💪、JVM1、说一下JVM的主要组成部分及其作用2、什么是JVM内存结构(谈谈对运行时数据区的理解)3、堆和栈的区别是什么4、堆中存什么?栈中存什么?5、为什么不把基本类型放堆中呢?6、为…

理论上BI软件适配任何行业,但为什么有些行业做不了?

BI商业智能是一种通用的数据类技术解决方案。理论上来说,BI商业智能的核心是数据。只要企业有数据累积,就可以在BI软件上展开一系列的数据开发,获取决策所需的数据依据。但在现实中,却会发现有些BI软件对特定的行业束手无策&#…

【站外SEO】如何利用外部链接来提高你的网站排名

随着互联网的快速发展,越来越多的企业开始注重SEO优化,以提升自己的网站排名,增加流量和曝光度。 而站外SEO作为SEO的重要组成部分,对于提升网站排名具有不可忽视的作用。 站外SEO主要是通过外部链接来提高网站的排名。而GPB外链…

4EVERLAND 的 IPFS Pinning 服务:4EVER Pin

我们很高兴地宣布 4EVERLAND Storage 的一个令人兴奋的补充,即 4EVER Pin。什么是 4EVER Pin?您可能已经知道星际文件系统或IPFS是一个分布式存储网络,来自世界各地的计算机组成节点共享数据。通常,在IPFS中获取一条数据时&#x…

3/3操作系统作业

目录 1.前趋图和程序执行 (1)前驱图 (2)程序的顺序执行 (3)程序的并发执行 2.进程的描述 (1)进程的定义与特征 ​编辑​编辑(2)进程控制块​编辑 &…

ESP32设备驱动-GUVA-S12SD紫外线检测传感器驱动

GUVA-S12SD紫外线检测传感器驱动 文章目录 GUVA-S12SD紫外线检测传感器驱动1、GUVA-S12SD介绍2、硬件准备3、软件准备4、驱动实现1、GUVA-S12SD介绍 GUVA-S12SD 紫外线传感器芯片适用于检测太阳光中的紫外线辐射。 它可用于任何需要监控紫外线量的应用,并且可以简单地连接到任…

DebugView在Vs + Qt 应用程序中的使用

1.准备头文件mylog.h #pragma once #ifndef _MYLOG_H_ #define _MYLOG_H_#include <windows.h> #include <tchar.h>#define DP0(fmt) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt));OutputDebugString(sOut);} #define DP1(fmt,var) {TCHAR sOut[256];_stprintf_s(…

【Java】CompletableFuture 并发顺序调度

前言 Java CompletableFuture 提供了一种异步编程的方式&#xff0c;可以在一个线程中执行长时间的任务&#xff0c;而不会堵塞主线程。 和Future相比&#xff0c;CompletableFuture不仅实现了Future接口&#xff0c;也实现了 CompletionStage接口。Future接口不用多说&#…

react renderProps学习记录

react renderProps学习记录1.引入2.改一下呢3.再改一下呢4.总结一下如何向组件内部动态传入带内容的结构(标签)?children propsrender props1.引入 上代码&#xff1a; import React, { Component } from react import ./index.css export default class Parent extends Com…

【云原生】K8S调度约束

一、调度约束 Kubernetes 是通过 List-Watch&#xff08;监控&#xff09; 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件&#xff0c;向 APIServer 发送命令&#xff0c;在 Node 节点上面…

ANR系列(二)——ANR监听方案之SyncBarrier

前言 在项目中经常遇到了手机假死问题&#xff0c;无规律的偶现问题&#xff0c;大量频繁随机操作后&#xff0c;便会出现假死&#xff0c;整个应用无法操作&#xff0c;不会响应事件&#xff0c;会发生各种奇怪的ANR&#xff0c;且trace不固定。而SyncBarrier是其中的罪魁祸首…

RabbitMq(具体怎么用,看这一篇即可)

RabbitMq汇总1.RabbitMq的传统实现方式2.SpringAMQP简化RabbitMq开发2.1 基本消息队列&#xff08;BasicQueue&#xff09;2.2 工作消息队列&#xff08;WorkQueue&#xff09;2.3 发布订阅 -- 广播&#xff08;Fanout&#xff09;2.4 发布订阅 -- 路由&#xff08;Direct&…

2024级浙江大学MBA提面申请流程参考

近年来浙大MBA项目的招生一直都有提前批面试的环节&#xff0c;而且每年在申请政策方面也会做出一些微调&#xff0c;但大的方面不会做调整&#xff0c;2024年MBA提面申请即将开始&#xff0c;对此杭州达立易考教育结合2023年的情况为大家梳理出来基本的申请流程和批次参考&…

【Spring Boot】Spring Boot以Repository方式整合Redis

1 简介 Redis是高性能的NoSQL数据库&#xff0c;经常作为缓存流行于各大互联网架构中。本文将介绍如何在Springboot中整合Spring Data Redis&#xff0c;使用Repository的方式操作。 代码结构如下&#xff1a; 2 整合过程 2.1 安装Redis数据库 为了节省时间&#xff0c;就直…

为什么很多计算机专业大学生毕业后还会参加培训?

基于IT互联网行业越来越卷的现状&#xff0c;就算是科班出身&#xff0c;很多也是达不到用人单位的要求。面对这样的现实情况&#xff0c;有的同学会选择继续深造&#xff0c;比如考个研&#xff0c;去年考研人数457万人次&#xff0c;可见越来越的同学是倾向考研提升学历来达到…