洗牌发牌-第14届蓝桥杯STEMA测评Scratch真题精选

news2024/9/29 17:33:41

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

蓝桥杯选拔赛现已更名为STEMA,即STEM 能力测试,是蓝桥杯大赛组委会与美国普林斯顿多文化教育研究中心合作推出的考试项目。STEM能力测试致力于综合评价学生的 STEM 水平,对学生的科技素养、逻辑思维和编程能力等三方面进行客观科学的测试。

洗牌发牌,本题是2023年1月15日举行的第14届蓝桥杯STEMA考试Scratch图形化编程真题中级组编程部分第5题,也是最后一题。题目要求编程实现洗牌发牌游戏,当按下空格键时,五张纸牌牌面背朝上进行随机洗牌,1秒后在五张牌中随机抽取两张牌放到舞台下方边缘处,在按下A键时翻开牌面。

先来看看题目的要求吧。

一.题目要求

编程实现:

洗牌发牌。

具体要求:

1). 运行程序,角色、背景如图所示(五张草花牌面按照从小到大顺序排列);

2). 按下一次空格键,五张草花牌面背朝上进行随机洗牌(能看到牌面移动过程);

3). 等待1秒,在五张草花牌中随机抽取两张牌放到舞台下方边缘处(两张纸牌按照抽取的先后顺序排列);

4). 按下一次A按键,五张牌翻开牌面;

评判标准:

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

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

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

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

二.思路分析

本题只有一个角色,就是扑克牌,如图所示:

不过,角色包含6个造型,如图所示:

其中前面5张是牌面,分别是10、J、Q、K和A,最后一张是扑克牌背面。根据题目描述,本作品需要完成如下4个功能:

  • 初始化纸牌

  • 洗牌

  • 抽牌

  • 翻开牌面

其中初始化纸牌最简单,就是依次克隆5张纸牌并切换到不同的造型。

翻开牌面就是切换造型,但是每张牌的造型并不相同,如果知道自己是哪个造型呢?这就需要用到私有变量,在克隆的时候,将造型保存到私有变量中即可。

抽牌就是在5张纸牌中随机选取两张,最简单的思路就是给纸牌定义一个私有变量,表示编号,并将编号分别设置为1、2、3、4、5,然后在1~5之间随机选择两个数字,将对应的纸牌移到下方即可。

洗牌是这个作品的难点,怎么找到突破口呢?

超平老师建议你从变量入手,这里的变量是指哪些是变化的,哪些是不变的。很明显,在洗牌过程中,每张牌的编号和造型是不变的,真正变化的是位置,因此位置信息是我们关注的焦点。

进一步思考,可以发现5张牌的y坐标其实是固定不变的,只有x坐标是变化的,我们可以将5张牌的x坐标保存到一个列表中,如图:

其中,列表的编号可以直接对应于纸牌的编号,每张纸牌可以通过编号获取自己的x坐标信息。所谓洗牌就是将列表中的数据顺序打乱,然后将纸牌移到新的位置即可。

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

三. 编程实现

根据题目描述和思路分析,我们可以分4步来编写程序:

  • 初始化纸牌

  • 洗牌

  • 抽牌

  • 翻开牌面

1. 初始化纸牌

根据前面的思路分析,我们先创建好两个私有变量“_ID”和“造型”,其中“_ID”表示编号,再创建一个列表“x坐标”,并进行相应的初始化。

然后使用循环克隆5张纸牌,每克隆一次,就将本体右移一点,并切换造型,同时需要设置私有变量的值,并将纸牌的x坐标添加到列表中,对应的代码如下:

对应的,再将克隆体显示出来,代码非常简单:

运行程序,效果如下所示:

同时,每张纸牌的私有变量"_ID"分别被设置为1、2、3、4、5,私有变量“_造型”分别被设置为10、J、Q、K、A。

2. 洗牌

接下来就是洗牌了,在按下空格键后开始洗牌,按下空格键的写法通常有两种:

  • 使用“当按下空格键”指令

  • 使用“重复执行” + “如果...那么” + “按下空格键”指令

  • 使用“等待条件” + “按下空格键”指令

该选择哪一种呢?

第一种最为简单,它的特点就是所有的角色包括克隆体都会响应按键操作,所以在有克隆体的时候,要谨慎使用。

后面两种都可以,相对来说,第三种更好一些,不管是哪一种,都需要附带松开按键的判断,确保按下并松开按键算一次。

我们选择第3种,在上面的绿旗代码块下面添加如下代码:

这里定义了一个自制积木,专门用于洗牌操作,对应的代码如下:

洗牌的思路是这样的,在列表中随机选择一项,先删除,然后再重新插入到列表中。这里使用了两个变量“编号”和“temp”,编号是1~5之间的数字,temp则是对应的坐标值。

这里重复执行了5次,实际上,你可重复更多的次数,比如10次,20次。

执行这段代码,就可以将列表中的x坐标打乱,接下来,就需要移动纸牌了,所以这里发送了一个“洗牌”的广播消息,继续编写代码如下:

简单说明三点:

1). 首先将纸牌背面朝上,也就是换成扑克牌造型; 

2). 虽然列表中的坐标顺序打乱了,但是列表的编号是不变的,它对应着每张扑克牌的“ID”,所以可以通过“_ID”分别获取每张牌的x坐标,再使用滑行指令移到对应位置即可;

3). 一旦纸牌交换位置了,就会出现左边纸牌挡住右边纸牌的情况,这里做了一个简单的处理,就是利用纸牌的坐标数据,计算每张纸牌等待不同时间移到最前面,从而确保靠右的纸牌处在上面一层。

3. 抽牌

接下来就是抽牌了,抽牌的思路很简单,就是在数字1~5中,随机选择两个数字。不过我们需要考虑两个问题:

  • 写在哪个地方

  • 如何随机得到两个不同的数字

为什么有写在哪个地方的疑问呢,原因在于所有的克隆体都会执行“当作为克隆体启动时”代码块,而这里的随机两个数字只需要执行一次就行,尽量不要写在克隆体代码块中。

其实,我们可以写到“洗牌”的自制积木中,也就是在洗牌的同时,顺便随机两个数字,它是写在绿旗代码块中的,所以不会执行多次。

在“洗牌”自制积木中,增加代码如下:

简单说明两点:

1). 为了方便,这里使用了两个变量“牌1”和“牌2”,分别表示两张牌的编号;

2). 为了确保“牌1”和“牌2”不重复,这里通过循环来设置“牌2”的值。

对应的,在克隆体代码块中,增加代码如下:

代码非常简单,就是先找出第一张牌,移到下方左边,再找出第二张牌,移到下方右边。

4. 翻开牌面

由于前面已经将每张牌的造型保存到私有变量“_造型”中,我们只需要切换到对应的造型即可,代码非常简单,如下所示:

至此,我们的洗牌翻牌作品就创作好了,赶紧来试试效果吧。

四.总结与思考

本题是中级组最后一题,分数为30分,积木块数量72个左右 ,涉及到的知识点主要包括:

  • 克隆编程,重点是掌握克隆体的特点和一些陷阱;

  • 变量的使用,尤其是私有变量在克隆中的作用;

  • 列表的使用,重点是将列表数据打乱顺序;

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

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

作为中级组最后一题,本题难度较大,考察的重点是克隆编程及列表的使用,尤其是克隆体的编程技巧和特点,需要考生具备扎实的编程知识。

最后再留一个思考题,本作品中的洗牌只进行了一次,如果每按一次空格键就洗一次牌,该怎么做呢?

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

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

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

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

相关文章

docker从安装到部署一个项目

一.centos安装docker 参考博客:https://blog.csdn.net/m0_47010003/article/details/127775185 1.设置一下下载Docker的镜像源 设置下载的镜像源为国内的阿里云,如果不设置,会默认去Docker的官方下载 yum-config-manager --add-repo http…

飞桨携手Hugging Face共建开源社区,文图生成黑科技画你所想!

最近的 AIGC 有多火,你不会不知道吧? AI绘画收到越来越多关注的同时,你想不想自己试试?如何基于开源项目训练自己的趣味模型,开源出来被更多人看到? 在这个人人都是创作家的时代,你可以脑洞大开…

element ui 的滚动条,Element UI 文档中没有被提到的滚动条

element ui 的滚动条,Element UI 文档中被提到的滚动条 Element UI 官网中有用到自定义的滚动条组件&#xff0c;但是发布的所有版本中都不曾提及&#xff0c;个中原因我们不得而知&#xff0c;不过我们还是可以拿过来引用到自己的项目中。 使用的时候&#xff0c; 放在 <el…

【C++】关于C++模板的分离编译问题

文章目录1.阐述模板的实例化和重复定义问题2.分离编译可能出现的问题3.解决方法将函数模板的定义放到头文件中模板定义的位置显式实例化模板总结1.阐述模板的实例化和重复定义问题 C模板是一种非常强大的工具&#xff0c;可以为我们提供通用的代码实现方式。然鹅&#xff0c;在…

Ajax和JSON的基本用法

局部请求页面不会变化&#xff0c;返回的响应我们要动态获取&#xff0c;获取后选择数据更新区域。<body> <input id"btnLoad" type"button" value"加载"> <div id"divContent"></div> <script>//获取点…

三天吃透Kafka面试八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

前端开发者必备的Nginx知识

nginx在应用程序中的作用 解决跨域请求过滤配置gzip负载均衡静态资源服务器…nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个通用的TCP/UDP代理服务器&#xff0c;最初由俄罗斯人Igor Sysoev编写。 nginx现在几乎是众多大型网站的必用技术&#xff0c;大多数情…

好用的电脑录屏工具有哪些?电脑好用的录屏工具

现如今很多人都渐渐对录屏有了需求&#xff0c;尤其是网课老师和网络主播的从业者&#xff0c;录屏工具可以帮助他们减轻很多工作量。好用的电脑录屏工具有哪些&#xff1f; 平时在工作学习中&#xff0c;我们往往会有录制视频的需求&#xff0c;比如录制游戏视频、录制网课视频…

设计UI - Adobe xd画板及参考线

画板新建画板a. 使用预设画板大小或创建自定义画板。操作步骤&#xff1a;打开xd软件&#xff0c;点击需要建立的画板模版&#xff0c;没有则选择自定义大小。b. 使用画板工具创建其它画板。操作步骤&#xff1a;选中画板工具&#xff0c;选择需要建立的画板模版&#xff0c;没…

STM32启动模式讲解与ICP下载电路

一、官方提供的启动模式说明硬件BOOT引脚接法表格从表格可以看出有三种启动模式&#xff0c;然后对应这不同的存储器启动&#xff0c;那我们现在疑问为啥有三种不能只有一种就好&#xff0c;还有存储器启动区域怎么区分&#xff0c;有些乱&#xff0c;带着这些疑问&#xff0c;…

npm install报错unable to resolve dependency tree

一、问题背景npm install安装项目依赖时报错PS D:\test> npm install npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: vue-admin-template4.2.1 npm ERR! Found: webpack5.74.0 npm ERR! node_modules/we…

【WebSocket】在SSM项目中配置websocket

在SSM项目中配置websocket 最近在ssm项目中配置了websocket&#xff0c;踩了很多坑&#xff0c;来分享一下 本文暂不提供发送消息等内容的代码逻辑&#xff08;后续也许会补充&#xff09;&#xff0c;如果你直接复制这类可能会对配置造成更大的麻烦&#xff08;博主就是复制…

单元测试、反射、注解、动态代理

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 目录单元测试、反射、注解、动态代理单元测…

一篇文综合分析Fuse!

FUSE需求 究竟什么样的需求才能用到用户文件系统&#xff1f;来看一个小例子&#xff1a; 需求是这样的。在deepin的安装器中&#xff0c;安装器就会给多分出一个分区&#xff1a;数据盘。 数据盘的主要作用是让用户存放数据文件&#xff0c;也就是以前用Windows的时候D盘或者…

YoloV7

总体来说&#xff0c;YoLoV7主要可分为主干特征提取网络&#xff08;backbone&#xff09;&#xff0c;加强特征提取网络以及SPPCSPC三个部分&#xff0c;然后再加上RepConv和YoLoHead部分。输入图片640*640*3的RGB图片&#xff0c;然后卷积、标准化&#xff08;BN&#xff09;…

QT学习笔记-QT多项目系统中如何指定各项目的编译顺序

QT学习笔记-QT多项目系统中如何指定各项目的编译顺序背景环境解决思路具体操作背景 为了更好的复用程序功能以及更优雅的管理程序&#xff0c;有经验的程序员通常要对程序进行分层和模块化设计。在QT/C这个工具中同样可以通过创建子项目的方式对程序进行模块化&#xff0c;在这…

浅谈Linux下的shell--BASH

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;shell的概念与作用我们已经学习并知道了操作系统实际上就是一款软件&#xff0c;一款用来管理计算机软硬件资源&#xff0c;为用户提供良好的执行环境的…

擎创喜报 | 名单公布!恭喜入选!

前言&#xff1a;企业数字化转型作为一种经营策略&#xff0c;指的是利用数字技术和数字化流程来改变企业的运营、管理、销售和服务方式&#xff0c;以适应数字化时代的发展趋势。一般来说&#xff0c;企业进行数字化出于以下几点考虑。提高效率&#xff1a;数字化改进了业务流…

人口老龄化背景下家政服务网络平台【附源码】

1 毕业论文&#xff08;设计&#xff09;版权使用授权书 本毕业论文&#xff08;设计&#xff09;作者同意学校保留并向国家有关部门或机构送交论文&#xff08;设计&#xff09;的复印件和电子版&#xff0c;允许论文&#xff08;设计&#xff09;被查阅和借阅。本人授权广西…

JAVA中比较对象是否相等的方式是什么?为什么重写equals就一定要重写hashcode?百天百题(3/100)

目录 JAVA中比较对象是否相等的方式是什么&#xff1f; 为什么重写equals就一定要重写hashcode&#xff1f; JAVA中比较对象是否相等的方式是什么&#xff1f; 在了解这个问题之前需要先知道&#xff1a; 1.如果对象相同&#xff0c;那么hashcode是一定相同的。 2.对象不同的…