弹跳小球-第15届蓝桥杯第一次STEMA测评Scratch真题精选

2023-09-20 16:07:44

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

第15届蓝桥杯第1次STEMA测评已于2023年8月20日落下帷幕,编程题一共有6题,分别如下:

弹跳小球,本题是2023年8月20日举行的第15届蓝桥杯STEMA测评Scratch编程中级组编程第4题,题目要求编程实现一个弹跳小球游戏。游戏开始后,挡板跟随鼠标左右移动,小球碰到左右边缘或挡板就反弹,如果碰到上下舞台边缘则游戏结束。

先来看看题目的要求吧。

一.题目说明

编程实现:

弹跳小球。

具体要求:

1). 运行程序,角色、背景如图所示(变量“分数”初始值为0);

图片

2). 小球面向下方随机方向持续移动 (移动步数5 ~ 10,参照程序演示视频);

3). 上下两个挡板同时跟随鼠标左右水平移动;

图片

4). 当任意—个挡板接到小球后,小球进行反弹(参照程序演示视频);

5). 当任意一个挡板接到小球时,左上角分数加1;

图片

6). 当小球碰到舞台左右边缘时,发生反弹;

7). 当小球碰到舞台上下边缘时,游戏结束。

评判标准:

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

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

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

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

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

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

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

二.思路分析

本题包含3个角色,分别是上下挡板和弹球,如图所示:

图片

本题考查的知识点是运动编程,重难点是碰撞检测和反弹实现。

其中两个挡板角色的功能一样,只需要跟随鼠标左右移动即可,相对比较简单。

对于弹球角色来说,在舞台范围内来回运动,当碰到舞台左右边缘或者挡板时,反弹回来,如果碰到上下边缘则游戏结束。

这里的难点有两个:

  • 如何单独检测是否碰到舞台上下边缘;

  • 弹球碰到挡板是如何反弹的;

对于第一个问题,很多同学的第一反应是使用侦测模块中的“碰到舞台边缘”,如图:

图片

但是本题的情况有点特殊,上下边缘和左右边缘分属两种情况,不能使用这个指令,那该如何判断呢?

上下左右不就是描述位置的么,使用坐标就可以,将弹球的上边缘和舞台上边缘对齐,如图所示:

图片

此时弹球的y坐标是135,这就说明当y坐标 > 134时,弹球碰到上边缘了。同理,当y坐标< -134时,弹球就碰到下边缘了。只要出现其中一种情况,就结束游戏,两种情况是逻辑或的关系。

至于左右边缘,它是需要反弹的,我们直接使用“碰到边缘就反弹”指令即可。

对于第二个问题,通常有两种处理方式:

1). 直接旋转一个角度,从而让小球反弹回来;

2). 模拟碰到边缘就反弹指令,精确的实现反弹效果;

方式一比较简单,但效果不是很好。方式二效果一流,但很多同学不知道如何实现,今天,超平老师就来解读一下这其中的奥秘。

其实非常简单,使用一个篮球角色(其它角色也可以),设定一个角度,比如60度,撞向上边缘,如图:

图片

然后编写一段代码,让篮球移动起来,碰到边缘就反弹,代码如下:

图片

当篮球反弹回来时,方向变成了120,如图:

图片

你可以多尝试使用不同的角度,撞向上边缘和下边缘,下面的是超平老师测试的一组数据:

碰撞前:60,碰撞后:120碰撞前:75,碰撞后:105碰撞前:30,碰撞后:150碰撞前:135,碰撞后:45碰撞前:180,碰撞后:0

相信聪明的你,已经发现了这里面的规律。

规律就是碰撞前后的方向之和等于180度,所以我们可以使用如下代码就可以获取角色碰到上下边缘反弹的方向:

图片

关键问题解决了,接下来,我们进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分4步来编写程序:

  • 挡板的移动

  • 弹球的移动

  • 弹球反弹

  • 游戏结束

1. 挡板的移动

挡板相对比较简单,绿旗点击之后,让挡板重复跟随鼠标左右移动即可,以挡板1为例,对应的代码如下:

图片

简单说明3点:

1). 这里的”等待0.5秒“指令不是必须的,之所以写上,是想让点击绿旗之后,不会立刻跟随鼠标移动;

2). 由于挡板只在左右方向上跟随鼠标移动,所以我们只需要改变挡板的x坐标,使其保持和鼠标的x坐标一致即可;

3). 两个挡板的代码基本一样,写好挡板1的代码之后,直接复制到挡板2中,再修改其y坐标即可,代码如下:

图片

针对上面的第二点,还可以用另一种方法来实现,先让角色移动到鼠标指针,然后再将角色的x坐标设为-145,代码如下:

图片

当然,使用这种方法的时候,挡板2的代码也需要略作修改,将-145改为145,因为挡板2处于舞台下边缘,其y坐标为145。

2. 弹球的移动

首先,我们来实现弹球的移动,点击绿旗后,弹球面向下方移动,先不考虑挡板,实现球的反弹效果,这个我们可以直接使用”碰到边缘就反弹“指令,在弹球角色中,编写代码如下:

图片

需要说明的是,这里的方向设置,只要是在90到-90之间,确保面向下方即可,这里的255和-105其实是一样,但是我们不能写在105和-105之间,因为105到-105之间表示的是面向上方,比如随机出来的0,刚好是面向正上方。

3. 弹球反弹

当弹球碰到挡板后,会反弹回来,同时增加1分,根据上面的思路分析,只需要改变弹球的方向即可,在弹球角色中,新增加一个代码块,代码如下:

图片

注意,这里需要先将”分数“变量创建好。

4. 游戏结束

当弹球碰到舞台上下边缘时,游戏结束,根据前面的思路分析,我们可以通过角色的y坐标进行判断,在弹球角色中,再增加一个代码块,编写程序如下:

图片

需要注意的是,为了让代码结构更简单,我们单独使用了一个代码块用于判断是否碰到舞台上下边缘。同时对于这种满足一次条件就结束的情况,使用等待条件指令,是最简单的。

至此,整个作品就创作好了,一个简单有趣的弹球游戏就正式诞生了,可以好好体验一下咯。

四.总结与思考

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

  • 运动编程,重点是角色方向;

  • 如何完美实现角色的反弹效果;

  • 变量的使用;

  • 运算符,逻辑或和比较等

  • 随机数的使用;

  • 如何获取鼠标的坐标;

这是中级组的第4题,题目难度中等,完成时间在15分钟左右,重点是如何实现弹球碰到挡板反弹的效果。

角色反弹是Scratch编程中非常典型的一个场景,尤其是各类弹球游戏中,比如打砖块、乒乓球、篮球等。

除了直接使用“碰到边缘就反弹”指令外,针对碰到某个指定角色反弹的效果,我们也要能够快速实现,通过本教程的学习,相信你已经掌握了其原理和实现方式。

超平老师给你留一个思考题,角色碰到舞台左右边缘时,反弹前后的角度具备什么样的规律呢?

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

需要素材和源码的,可以移步至“超平的编程课”gzh。

更多推荐

Spring Cloud 负载平衡的意义什么?

目录一、什么是负载平衡二、为什么需要负载平衡三、SpringCloud如何实现负载平衡四、负载平衡的nginx配置一、什么是负载平衡负载平衡是指将网络流量在多个服务器之间分布,以达到提高系统性能、增强可靠性和提供更好用户体验的目的。在负载平衡的架构中,多个服务器被组织成一个集群,共同处理用户的请求。负载平衡的主要作用有

Hive的基本SQL操作(DDL篇)

目录​编辑一、数据库的基本操作1.1展示所有数据库1.2切换数据库1.3创建数据库1.4删除数据库1.5显示数据库信息1.5.1显示数据库信息1.5.2显示数据库详情二、数据库表的基本操作2.1创建表的操作2.1.1创建普通hive表(不包含行定义格式)2.1.2创建自定义行格式的hive表2.1.3创建默认分隔符的h

FPGA原理与结构(16)——时钟IP核的使用与测试

系列文章目录:FPGA原理与结构(0)——目录与传送门一、前言本文介绍xilinx的时钟IP核ClockingWizardv6.0的具体使用与测试过程,在学习一个IP核的使用之前,首先需要对于IP核的具体参数和原理有一个基本的了解,具体可以参考:FPGA原理与结构——时钟IP核原理学习https://blog.csdn

做题(1)

1.fileinclude打开发现提示flag在flag.php里边查看页面源代码$lan=$_COOKIE['language'];这句话是关键变量lan是用cookie传参的@include("english.php");这句话表明了文件包含include函数用php伪协议filer绕过@include($lan.

[ES6]模块

[ES6]模块特点export与import基本用法导入导出基本方式导入导出等价方式html导入别名导出默认导出基本用法默认导出对象复合使用import命令的特点只读属性单例模式静态执行特性在ES6前,实现模块化使用的是RequireJS或者seaJS(分别是基于AMD规范的模块化库,和基于CMD规范的模块化库)ES6

Java 类和对象

在面向对象语言中万物皆对象,一切都围绕对象来进行,找对象、建对象,用对象等。类:把具有相同特征和行为的一组对象抽象为类,类是抽象概念,如人类、车类等,无法具体到每个实体。对象:某个类的一个实体,当有了对象后,这些特征便有了相应的值,行为也就有了相应的意义。类是描述某一对象的统称,对象是这个类的一个实例而已。有类之后就能

商城系统开发,如何确保用户数据的安全性?

确保用户数据的安全性是商城系统开发中至关重要的一项任务。随着数字化时代的到来,用户的个人信息和交易数据已成为黑客和不法分子的重要目标,因此保护用户数据的安全性对于商城系统的成功运营至关重要。在开发商城系统时,以下几个方面是确保用户数据安全性的关键要素(仅供参考)。第一点,建立严格的访问控制和权限管理机制。商城系统应该采

基于Java电动车上牌管理系统计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题

基于Java电脑测评系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题

1、RocketMQ概述

第1章RocketMQ概述一、MQ概述1、MQ简介MQ,MessageQueue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。2、MQ用途从网上可以查看到很多的关于MQ用途的叙述,但总结起来其实就以下三点。限流削峰MQ可以

从一到无穷大 #16 ByteSeries,思考内存时序数据库的必要性

本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可。本作品(李兆龙博文,由李兆龙创作),由李兆龙确认,转载请注明版权。引言在[3]中我基于Gorilla讨论了时序数据库设置cache的可行性,最后得出结论:RAM去换实时查询的高效,显著增加成本的同时增加系统复杂性。但是如果换个思路,缓存即为内

热文推荐