太空大战-第14届蓝桥杯国赛Scratch真题中级组第6题

news2024/11/8 3:07:55

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

太空大战,本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程中级组真题第6题,题目要求编程实现太空大战游戏 。游戏开始后,在舞台上方出现飞碟阵列,每隔2秒阵列下降一行并增加一行飞碟,每隔1秒派出一架飞碟出击,玩家按下空格键发射炮弹,飞碟碰到战机游戏失败,当战机连续消灭10架飞碟时游戏成功。

先来看看题目的要求吧。

一.题目说明

编程实现:

太空大战。

具体要求:

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

2). 战机一直跟随鼠标左右水平移动;

3). 按下一次空格键,战机发射一颗炮弹,炮弹竖直向上移动,当碰到飞碟时,炮弹和飞碟同时消失,如果炮弹移动过程中没有碰到飞碟,炮弹碰到舞台边缘消失;

4). 程序运行后,每隔1秒都会在现有的飞碟群中随机派出一个飞碟,竖直向下移动,当移动中的飞碟碰到炮弹,或碰到底部边缘飞碟消失;

5). 每隔2秒,飞碟阵列会自动下降一行,空出的部分添加一行新的飞碟,第一次增加的飞碟数量为4,第二次增加的飞碟数量为5,以此类推;

6). 当飞碟碰到战机时,此飞碟和战机同时消失,其他飞碟停止出动,游戏结束;

7). 当战机连续消灭10架飞碟后,程序结束。

评判标准:

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

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

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

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

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

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

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

二.思路分析

本题包含3个角色,分别是战机、飞碟和炮弹,如图所示:

飞机大战是一个经典的游戏,不过本作品有一个特殊的地方,就是飞碟要呈现倒金字塔的阵列效果。

这里一共有3个角色,我们可以分角色来进行分析,分析的时候遵循一个原则---单一职责,就是首先只考虑每个角色单独的功能,然后再考虑角色之间的关系和功能

其中战机角色最为简单,游戏开始后随鼠标左右移动即可。

炮弹角色次之,当按下空格键时,发射一枚炮弹,这可以通过克隆实现,生成的炮弹克隆体从战机位置开始向上移动,直到碰到舞台上边缘消失。

不过,在进行克隆编程时,要避免克隆陷阱,不要在事件指令下克隆炮弹,因为克隆体也会响应按键事件。

最后是飞碟,这是本题的重难点,其功能可以拆分成如下3个部分:

1). 按照倒金字塔排列克隆飞碟;

2). 每隔2秒自动下降一行;

3). 每隔1秒随机派出一架飞碟进攻;

对于第一部分,克隆倒金字塔阵列,需要确定好每一行飞碟的个数和起点位置(包括x和y坐标),我们可以通过自制积木来实现指定行的飞碟克隆,同时还可以通过勾选“运行时不刷新屏幕”,瞬间完成克隆。

对于第二部分,每隔2秒自动下降一行,就意味着所有的飞碟每隔两秒,下移一行的距离,同时需要在舞台顶部再克隆一排新的飞碟,当飞碟碰到舞台下边缘就消失。

对于第三部分,每隔1秒随机派出一架飞碟进攻,如何从剩余的飞碟阵列中随机选取一架飞碟呢?

这就需要区分不同的飞碟,通常的做法就是使用私有变量,对飞碟进行编号,然后将所有的编号保存到列表中。每隔一秒,就从列表中随机选择一项,作为要派出的飞碟,同时将该项从列表中删除。

当三个角色的独立功能完成后,就可以考虑角色之间的功能了,主要包括两个方面:

1). 飞碟碰到战机,游戏结束;

2). 炮弹击中飞碟,二者都消失;

第一点比较简单,重点是第二点,炮弹和飞碟都是克隆体,克隆体碰撞后都消失,这是一个典型的游戏场景,我们需要确保双方克隆体都能够删除,你知道怎么做吗?

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

三.编程实现

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

  • 战机左右移动

  • 发射炮弹

  • 呈现飞碟阵列

  • 飞碟出击

  • 游戏结束

1. 战机左右移动

点击绿旗时,战机位于舞台底部中间位置,然后跟随鼠标左右移动,对应的代码如下:

简单说明两点:

1). 增加“等待1秒”指令,是为了避免点击绿旗时战机出现在舞台左边;

2). 战机只是左右移动,因此y坐标设置为固定值-150,当然,还可以使用“移到鼠标指针” + “将y坐标设为-150”两个指令的组合,效果一样。

2. 发射炮弹

按下一次空格键,战机发射一颗炮弹,我们先来实现发射炮弹效果。

切换到炮弹角色,编写代码如下:

代码看似非常简单,但需要注意两点:

1). 不要使用事件指令“按下空格键”来实现克隆,因为克隆体也会响应按键操作,这会导致克隆体也进行克隆;

2). 增加了“等待按下空格键不成立”指令,是避免当按下空格键不松开时出现连续发射的情况。

所有的炮弹都是从战机发射出去的,竖直向上移动,直到碰到舞台上边缘消失,继续编写代码如下:

代码比较简单,说明两点:

1). 将炮弹移到最后面,确保炮弹是从战机下方发射出去的,更符合实际情况;

2). 暂时还没有处理碰到飞碟的情况,稍后再单独处理。

3. 呈现飞碟阵列

这里的飞碟阵列呈现的是倒金字塔结构,第一排有1架飞碟,第二排有2架飞碟,第三排有3架飞碟...,以此类推。

由于飞碟是分批克隆出来的,为方便起见,可以创建一个自制积木用于克隆指定行的飞碟,切换到飞碟角色,创建自制积木如下:

简单说明3点:

1). 这里的参数n表示第几行,行数为几,就克隆多少个飞碟;

2). 这里有两个变量,其中“起点x”是全局变量,表示每一行克隆第一个飞碟的x坐标,而“_ID”是私有变量,用来给每个飞碟进行编号;

3). 创建自制积木的时候,记得要勾选“运行时不刷新屏幕”,确保瞬间克隆好一行飞碟。

点击绿旗时,立刻呈现3排飞碟阵列,我们可以利用上面的自制积木快速完成克隆,继续编写代码如下:

代码不难,还是说明两点:

1). 将私有变量"_ID"初始值设为0,在每次克隆之前增加1,就可以确保飞碟克隆体ID从1开始,依次进行编号;

2). 两个飞碟之间的距离是60步,每克隆一排,飞碟数量增加1,对应的x坐标需要左移30步,y坐标则增加30步。

执行程序,就立刻呈现如图所示的阵列效果:

每隔2秒,新增一行飞碟,在上面的代码块下面,继续编写代码如下:

需要注意,从第4行开始,每一行飞碟出现的y坐标都是固定的,所以这里并没有改变y坐标的值。

当飞碟出现后,每隔2秒就自动下降一行,在不考虑碰到战机的情况下,飞碟碰到舞台下边缘消失。

针对飞碟克隆体,编写代码如下:

需要注意,这里将每一架飞碟的ID保存到列表“飞碟”中了,后续就可以从列表中随机取出一个ID,作为派出飞碟的依据,相应地,要先创建好列表“飞碟”。

4. 飞碟出击

游戏开始后,每隔1秒都会在现有的飞碟群中随机派出一个飞碟。具体做法就是从“飞碟”列表中随机选择一个ID,然后让对应飞碟出击即可,我们可以分两步来实现。

第一步,先获取随机编号,在飞碟角色中编写代码如下:

第二步,找到要出击的飞碟,向下移动,对应的代码如下:

如此一来,我们的飞碟出击效果就ok了。

目前,我们还没有处理飞碟碰到炮弹和战机的情况,这部分在下面的第5步中详细讲解。

5. 游戏结束

游戏结束分为如下两种情况:

  • 飞碟碰到战机;

  • 消灭10架飞碟;

其中第一种情况,可以认为是失败的情形,第二种情况则可以认为是成功的情形。

先来处理第一种情况,直接在飞碟角色中编写如下代码:

代码比较简单,巧妙的运用了“等待条件”指令,需要说明的是,结束的时候并没有使用“停止全部脚本”,而是分别停止本体和克隆体的其它脚本。

如果直接使用“停止全部脚本”指令,则所有的克隆体都会被删除,而使用“停止该角色的其它脚本”则可以保留所有的克隆体。

相应的,在战机和炮弹角色中,也需要增加结束的代码,如图:

接下来,我们来处理第二种情况,也就是消灭10架飞碟。这里有一个关键点,就是当炮弹碰到飞碟时,双方都要消失,这是典型的克隆体碰撞消失的场景。

常见的处理方式有如下两种:

1). 分别判断是否碰到对方,如果碰到,则延迟删除克隆体,之所以要延迟,是确保一方在删除之前能被对方检测到;

2). 使用“广播并等待”指令,等待对方克隆体删除后再删除自己。

超平老师在这里使用第二种方式,先切换到炮弹角色,编写代码如下:

这里的变量“消灭”表示消灭飞碟的数量,则绿旗指令下,需要将初始值设为0,这里就不再单独列出了,如果消灭 = 10,则发送一个“结束”的广播消息,游戏结束。

对应的,在飞碟角色中,编写代码如下:

由于所有的飞碟克隆体都能接收到广播消息,但是只有被炮弹命中的飞碟才需要删除,所以这里增加了一个碰撞检测。

至此,一个完整的太空大战游戏就创作好了,赶紧来体验一下吧。

四.总结与思考

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

  • 克隆编程,重点是倒金字塔阵列的克隆技巧;

  • 运动编程,注意终点的判断技巧 ;

  • 事件广播机制;

  • 变量,包括全局变量和私有变量;

  • 列表的应用和操作;

  • 自制积木的使用;

本题是中级组的最后一题,初级组没有此题,作为压轴大题,难度不小,建议完成时间25分钟。

本题综合性较强,要在25分钟的时间内完成本作品,是很有挑战性的,这就要求我们有足够多的刻意练习。

有些同学之前是做过飞机大战游戏的,但是本题中要求飞碟呈现阵列效果,于是有些同学就被难住了,这说明还是练习的不够,思考的不够。

在平常的学习过程中,我们不仅要创作各种不同类型的作品,同时还要尽可能对作品进行各种改造和创新,唯有如此,你才能应对各种场景,在有限的时间内完成创作。

说到这里,请你思考一个问题,针对本作品,你还可以进行怎样的改编和创新呢,欢迎和超平老师交流。

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

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

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

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

相关文章

Flume学习---3、自定义Interceptor、自定义Source、自定义Sink

1、自定义Interceptor 1、案例需求 使用 Flume 采集服务器本地日志,需要按照日志类型的不同,将不同种类的日志发往不同的分析系统。 2、需求分析 在实际的开发中,一台服务器产生的日志类型可能有很多种,不同类型的日志可能需要发…

【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例

1、微信接口说明: 2、调用示例 /*** 上传图文消息内的图片获取URL** param image* return*/PostMapping("uploadImg")public String uploadImg(MultipartFile image) {return wechatOpenService.uploadImg(image);}/*** 上传图文消息内的图片获取URL* htt…

css魔法:伪元素content内容竟然可以用css函数!

🌻 前言 CSS 伪元素用于设置元素指定部分的样式。伪元素中 ::before 和 ::after 是最常用的,它们分别用于在dom元素前/后插入内容,本文内容就是关于 ::before 和 ::after 的 content 内容的一些冷门用法展开的。 一般我们在使用伪元素时&…

基于Java+jsp+servlet的养老院管理系统设计和实现《收藏版》

基于Javajspservlet的养老院管理系统设计和实现《收藏版》 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方…

大麦生成链接 大麦生成订单截图 抢票成功截图

一键生成购票链接 一键生成订单截图 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

微服务工程搭建过程中的注意点

1、父工程pom.xml文件 1:父工程的maven坐标; 2:packaging使用pom; 原因:在Spring Cloud微服务工程中,通常会采用多模块的方式进行开发,父工程的pom文件中的packaging标签设置为pom,是…

操作系统 | 知识梳理 | 复习(上)

目录 📚操作系统概述 🐇操作系统中的抽象概念 📚准备知识 🐇中断输入输出 🐇软件中断 🐇处理器特权级 🐇操作系统的结构 📚程序的结构 🐇运行时视图简介 &…

SQL语句中EXISTS的详细用法大全

SQL语句中EXISTS的详细用法大全 前言一、建表1.在MySQL数据库建表语句2.在ORACLE数据库建表语句 二、在SELECT语句中使用EXISTS1.在SQL中使用EXISTS2.在SQL中使用NOT EXISTS3.在SQL中使用多个NOT EXISTS4.在SQL中使用多个EXISTS5.在SQL中使用NOT EXISTS和EXISTS 三、在DELETE语…

jmeter非gui运行,jtl生成了,但是html报告没有生成

jmeter非gui运行,jtl生成了,但是html报告没有生成,查看log,内容如下: 22:45:00,913 ERROR o.a.j.JMeter: Error generating dashboard: org.apache.jmeter.report.dashboard.GenerationException: Error while proces…

谷歌的passkey是什么?

谷歌的passkey是什么? 谷歌正在研发一种名为“Passkey”的新技术,它将用于用户身份验证。Passkey不同于传统的密码,它采用了硬件加密密钥(如安全密钥或生物识别方式)以及双因素身份验证等技术,可以更好地保…

微信:把元宇宙装进小程序

作为月活13.09亿的国民级应用,微信的每次小升级都很容易形成现象级。2023开年,微信放大招,试图把元宇宙装进小程序。 微信小程序 XR-FRAME 不久前,微信官方在开放社区贴出了“XR-FRAME”开发指南,这是一套为小程序定制…

RocketMQ 快速入门教程,手把手教教你干代码

目录 RocketMQ定义为什么要用消息中间件?应用解耦流量削峰数据分发 RocketMQ各部分角色介绍NameServer主机(Broker)生产者(Producer)消费者(Consumer)消息(Message) 使用RocketMQ的核心概念主题(Topic)消息队列(Message Queue)分组(Group)标签(Tag)偏移量(Offset) 普…

企业级信息系统开发讲课笔记4.11 Spring Boot中Spring MVC的整合支持

文章目录 零、学习目标一、Spring MVC 自动配置(一)自动配置概述(二)Spring Boot整合Spring MVC 的自动化配置功能特性 二、Spring MVC 功能拓展实现(一)创建Spring Boot项目 - SpringMvcDemo2021&#xff…

老胡的周刊(第094期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 qrbtf[2] 艺术二维码生成器: qrb…

某学院校园网站的设计与实现(论文+源码)_kaic

摘 要 使用旧方法对冀中工程技师学院网站的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在冀中工程技师学院网站的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次…

ajax--XML、AJAX简介、express框架使用、AJAX操作的基本步骤

一、XML(可扩展标记语言) XML与HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标签,全都是自定义标签,用来表示一些数据。 比如有一个学生数据:name“孙悟空”;age18;gender“男”&a…

数字图像处理期末复习习题 SCUEC part3 形态学图像处理专项

1.关于膨胀,腐蚀,开操作,闭操作的证明题 2.腐蚀和膨胀的定义 3.开操作与闭操作的定义 4.击中击不中变换

ubuntu驱动重装

卸载 进入命令行模式 sudo NVIDIA-Linux-x86_64-495.46.run --uninstall安装 进入命令行模式 sudo ./NVIDIA-Linux-x86_64-460.67.run –no-opengl-files –no-x-check –no-nouveau-check选continue installation。 ② 选 NO。 选NO。

源氏木语获得多少个奖项?答案 2023年天猫618淘宝大赢家今日答案与618天猫超级红包怎么领取?

2023年6月12日天猫618淘宝大赢家今日答案 问题:源氏木语获得多少个奖项? 答案:15 2023年淘宝天猫618超级红包怎么领取? 从2023年5月29日开始持续到6月20日,每天都可以打开手机淘宝或天猫,在首页搜索框内…

Open Inventor 2023.1.1 Crack 2022-06-08

Open Inventor 是一组高性能的三维软件开发包(SDK),用于医学、计算机辅助设计与工程、石油、天然气和采矿业这些领域中的专业应用。 其面向对象的应用程序编程接口、可拓展架构以及一整套先进庞大的组件为软件开发者提供一个完美的高级平台&…