拼图游戏-第14届蓝桥杯国赛Scratch真题初中级组第5题

news2024/12/26 9:26:03

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

拼图游戏,本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第5题,题目要求编程创作一个拼图游戏 。游戏开始后,4块拼图随机在舞台内部交换位置,每隔1秒,其中两块拼图被两个蓝色框选中并完成自动相互交换位置,当成功复原所有拼图后,游戏结束。

先来看看题目的要求吧。

一.题目说明

编程实现:

拼图游戏。

具体要求:

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

2). 等待1秒后,4块拼图随机在舞台内部交换位置(拼图之间不能重叠);

3). 每隔1秒,其中两块拼图被两个蓝色框选中并完成自动相互交换位置;

例如:左下角拼图和右下角拼图上同时出现蓝色方框,再自动进行位置交换,交换后蓝色方框消失

4). 4秒内拼图自动交换位置后,成功复原拼图,程序结束。

评判标准:

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

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

  • 35分:满足"具体要求"中的3)。

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

二.思路分析

本题包含4个角色,分别是拼图1、拼图2、拼图3和拼图4,如图所示:

每张拼图都包含两个造型,分别表示未选中状态和选中状态,如图:

当4张拼图按照顺序依次摆放时,就可以拼出一幅完整的图片。4张拼图,4个角色,它们的操作都是相同的,就是从一个位置移到另一个位置。

这里的关键有两个:

1). 如何表示4张拼图的顺序;

2). 如何交换拼图位置;

在整个游戏过程中,我们时刻要知道每张图片所在的位置,这就需要将拼图的顺序保存起来,由于这里有4张图片,因此使用列表是最佳选择。

可以使用数字来表示拼图的顺序(也可以称之为位置),如图:

其中,编号1、2、3、4分别对应于4张拼图,而列表项则表示每张拼图所处的位置。上图中的列表数据表示,拼图1在第2个位置(舞台右上区域),拼图2在第3个位置(左下区域),拼图3在第1个位置(左上区域),拼图4在第4个位置(右下区域)。

有了这个列表,交换拼图位置也变得简单了。表面看起来是交换拼图位置,实际上是对列表中的数据项进行交换。

比如,要复原拼图1,实际上就是找到当前在第1个位置上的拼图3(列表的第3项)和拼图1(列表的第1项)进行交换。

我们可以先将列表中的第1项和第3项进行交换,交换后如图所示:

与此同时,我们按照列表中的位置重新设置好拼图1和拼图3的位置,就可以实现两张图片的交换了。

重复上述操作,当列表中的顺序变为1、2、3、4时,就表示整个拼图复原完毕。

需要注意,由于列表项的编号和值都是数字1、2、3、4,所以在理解上会有点抽象,要多思考一下,或者是结合画图来理解。

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

三.编程实现

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

  • 初始化设置

  • 随机摆放拼图

  • 自动复原拼图

1. 初始化设置

点击绿旗时,4张拼图按照1、2、3、4的顺序自左向右、自上向下依次排列,我们只需要设置它们的位置和造型即可。

切换到拼图1角色,编写代码如下:

再切换到拼图2角色,编写代码如下:

然后切换到拼图3角色,编写代码如下:

最后是拼图4角色,对应的代码为:

此时,呈现的是一幅完整的图片。

2. 随机摆放拼图

等待1秒后,4块拼图随机在舞台内部交换位置,根据前面的思路分析,我们创建一个列表”顺序“,然后将数字1、2、3、4以随机顺序插入列表中。

在这里,超平老师总结了一个”插队算法“,所谓插队算法就是模拟日常生活中排队时不文明的插队行为。

如果你是第一个来到窗口的,很显然,你就排在第一位,只有一个位置可以选择;

如果你前面已经有一个人了,你有两个位置可以选择,排在第一个人的前面,或者他的后面;

如果你前面已经有两个人了,你有3个位置可以选择,即1的前面、2的前面或者2的后面。

在Scratch编程中,可以结合“在列表的第1项前插入”和“在1和10之前取随机数”两个指令来实现插队算法。

由于4个拼图角色都是平等的,因此我们可以在舞台背景中来操作列表。切换到舞台背景中,编写代码如下:

相应的,4个拼图角色在接收到广播消息后,按照列表中的顺序来调整自己的位置。

以拼图1角色为例,编写代码如下:

代码不难理解,说明两点:

1). 角色1对应于列表的第一项,它有4个位置可选,需要分别判断并设置坐标;

2). 由于后面还需要交换位置,所以这里使用了自制积木,后续只需要直接调用即可。

其它3个拼图角色的代码基本相同,不同的是拼图2对应列表第2项,拼图3对应列表的第3项,拼图4对应列表的第4项,这里就不再列出代码了。

3. 自动复原拼图

接下来就要自动复原拼图了,根据题目的描述,每隔1秒自动交换一次,4秒内完成复原。

我们可以这样来考虑,先找到拼图1,将它和位置1的拼图交换,再找到拼图2,并和位置2的拼图交换,然后找到拼图3,和位置3的拼图交换,如此一来,最多3次就可以复原成功。

根据前面的思路分析,我们先对列表中的数据进行交换,然后再根据列表中的数据重新调整拼图的位置。

在舞台背景中,继续编写代码如下:

这段代码的信息量较大,重点说明4点:

1). 这里的i表示位置,先从第一个位置开始,找到拼图1和要交换的拼图,分别用变量“图1”和“图2”来表示;

2). 在交换两个列表项的值时,需要借助一个中间变量“temp”来保存其中的一项;

3). 当数据交换完毕,对应的两张拼图需要调整位置,可以通过发送广播消息来实现,实际上,只有两张拼图需要交换位置,所以我们只给需要交换的拼图发送广播;

4). 当列表的顺序变为“1234”时,停止交换,说明复原完毕。

这里的变量“图1”和“图2”,取值范围是1~4,表示4张拼图。因此,每张拼图只需要处理自己的广播消息即可,也就是说,拼图1只需要处理广播消息“1”,拼图2只需要处理广播消息“2”,以此类推。

切换到拼图1角色,编写代码如下:

再切换到拼图2角色,编写代码如下:

同理,拼图3和拼图4在接收到消息“3”和消息“4”时,都需要做相同的处理,这里就不列出代码了。

至此,我们的拼图游戏就创作完成了,赶紧来欣赏一下自动拼图的效果吧。

四.总结与思考

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

  • 列表的操作与应用;

  • 事件广播机制,尤其是使用变量来广播的技巧 ;

  • 自制积木的使用及作用;

  • 插队算法的编程技巧;

  • 列表项交换的算法技巧;

本题难度较大,建议完成时间20~25分钟,中级组考生20分钟,而初级组考生约为25分钟。

本题的逻辑并不复杂,关键是要利用列表这种数据结构来表示4张拼图的位置,在应用列表时,还用到了和列表操作的两个小算法,即“插队算法”和“交换算法”。

Pascal之父、图灵奖获得者尼古拉斯·威茨,瑞士计算机科学家,提出的著名公式“数据结构 + 算法 = 程序”。

这充分说明数据结构和算法的重要性,也为我们指明了学习编程的方向,从这个角度来讲,这是一道非常好的题目。

给你留两个思考题:

1). 为什么说本作品的自动复原最多只需要3次?

2). 如果要改成每次随机选两张拼图交换位置,是不是更有趣呢,那么程序又该如何实现呢?

你有什么好的想法和建议,也欢迎和超平老师交流。

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

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

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

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

相关文章

国产Gauss 分布式数据库概述

一、前言 GaussDB 是华为2023年6月7日发布新一代分布式数据库,采用share-nothing架构,数据自动分片,通过GTM-Lite技术实现事务强一致,无中心节点性能瓶颈,是华为基于openGauss自主创新研发的一款分布式关系型数据库&am…

spark的使用

国内源下载 https://mirrors.cloud.tencent.com/apache/spark/ 环境配置(三台机器都要配置) 修改/etc/profile export JAVA_HOME/export/server/jdk export HADOOP_HOME/export/server/hadoopexport SPARK_HOME/export/server/spark export PYSPARK_PYTHON/pythonenv/pyspark…

苹果MR Vision Pro将会带动哪些零部件出货?

苹果如何重新定义AR? 在如今以智能手机为主的消费电子市场下行阶段,市场急需开辟一个新的领域带来新的增长点,以往被寄予厚望的VR/AR等头显设备在经历了数年发展后,依旧难堪大任,业界都把希望寄托在苹果身上。 简单来说&#xf…

学习Java一年的程序员的Python学习记录(转行了,校招Java根本找不到工作)

文章目录 一 基础语法二 集合三 函数四 IO五 项目结构六 面向对象 一 基础语法 Python如果是部署在Linux上,是需要通过源码去编译安装的,在编译的过程中,会以来一些第三方的软件。所以这些软件需要提前安装一下。 yum install wget zlib-deve…

VS报错集锦 --- 出现:error LNK2005: _DllMain@12 已经在 *****.obj 中定义 错误

出现的问题: 1>mfcs140d.lib(dllmodul.obj) : error LNK2005: DllMain 已经在 DllMain.obj 中定义 解决方法: 项目 -- 属性 -- c/c -- 预处理器 -- 将预处理定义中的_USRDLL 删除即可

“大四在读生”都四面成功拿到字节跳动Offer了,你还有什么理由去摸鱼?

博主大四在读,投的是字节 Data 的软件测试岗位实习生,base 杭州。 时间线: 4.12 投递4.13 安排简历筛选4.14 安排面试4.19 16:00 一面4.22 16:00 二面 4.23 8:00 三面4.23 16:00 HR 面4.23 16:30 Offer 一面 你对字节跳动的了解和认知有哪…

Allegro16.6详细教程(四)

(2) PIN的定義 如果用第一種方式產生Netlist的話,就要對於一些Power pin加以定義。 1.滑鼠點選想定義的零件。 2.點選選單中Edit>Part。 3.用滑鼠點選想定義的Pin腳。 4.點選功能表中Edit>Properties,透過這些步驟就看到了下面的這個對話方塊了。 在這裏主要是把T…

Apache Flink 1.17

Apache Flink 1.17 1. Flink 1.17 Overview2. Flink 1.17 Overall Story3. Flink 1.17 Key Features4. Summary5. Q&A 1. Flink 1.17 Overview Flink 1.17 版本完成了 7 个 FLIP,累计贡献者 170,解决 600Issue 以及 1100Commits,整体来看…

ppt如何录屏?电脑怎么录制ppt文稿?

案例:在电脑上怎么录制PPT文稿,具体怎么操作? 【我工作的时候经常需要用到ppt文稿,有时还需要对PPT文稿进行录制,但我不知道如何操作。有小伙伴知道在电脑上如何录制ppt文稿吗?需要用到什么工具&#xff1…

热水器语音芯片,带有温度检测算法、数码管显示语音ic,WTV380

在现代科技不断进步的时代,智能家居产品成为越来越多消费者的选择,在热水器行业为了提供更智能、便捷的用户交互体验,一款带有数码管显示语音提示二合一,多功能语音芯片方案 —— WTV380 WTV380能够实现语音播报热水器的各种信息…

学PCB设计要精通模电吗?

PCB设计是电子工程师在电路设计领域中的重要一环,而模拟电路设计(简称:模电)是其中的核心内容之一,很多小白在初学PCB设计都会困惑,学PCB设计是否要精通模电?这篇文或许能解惑,本文将…

【LeetCode热题100】打卡第16天:组合总和

文章目录 组合总和⛅前言🔒题目🔑题解 组合总和 ⛅前言 大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数…

Vue.js 中的 $router 和 $route

Vue.js 中的 $router 和 $route 在 Vue.js 中,$router 和 $route 是两个常用的对象,用于处理路由相关的操作。在本文中,我们将介绍 $router 和 $route 的区别,并且演示如何使用它们。 $router 和 $route 的区别 在 Vue.js 中&am…

Windows 下挂载使用 CephFS

一、Ceph集群搭建和CephFS创建 参考上期文章 Centos stream 8 使用 cephadm 安装 Ceph (17.2.6 quincy)集群_阿波罗.2012的博客-CSDN博客 二、将CephFS挂载到Windows Server 2019下 1、准备Dokany 下载地址:Release 1.5.1.1000 dokan-dev/dokany GitHub 下载…

【数据分享】1929-2022年全球站点的逐年平均降水量(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,说到常用的降水数据,最详细的降水数据是具体到气象监测站点的降水数据! 之前我们分享过1929-2022年全球气象站点的逐年平均气温数据、逐年最高…

实用工具篇(三):一款 IntelliJ IDEA 神级插件Bito

目录 1、什么是Bito 2、为什么要使用Bito 3、如何安装Bito插件 4、如何使用Bito插件 1、什么是Bito Bito是一款在IntelliJ IDEA编辑器中的插件,Bito插件是由ChatGPT团队开发的,它是ChatGPT团队为了提高开发效率而开发的一款工具。 Bito插件的强大…

Clion开发STM32之ESP8266系列(一)

系列开篇说明 结合个人的开发经验以及实际情况,分享stm32结合esp8266的一个开发项目。从0开始构建项目程序。为了方便记录项目开发记录,此系列的每个篇章都在git上做一个节点。此系列也是作为一个个人的开发思路和经验本次开发选用的芯片为stm32f103vet…

GIT安装教程(入门)

目录 前言 Git作者 官网 GIT优点 GIT缺点 为什么要使用 Git 下载以及安装步骤 一、官网下载 二、GIT安装步骤 GIT习题 习题一 总结 前言 Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理 Git作…

lan区段

LAN区段相当于说模拟出一个交换机或者集线器出来,把不同虚拟机连接起来,与物理机不进行数据交流,与外网也不进行数据交流,构建一个独立的网络。没有DHCP功能,需要手工配置IP或者单独配置DHCP服务器。

AG-Grid JavaScript 29.3.5 企业版 注册版

世界上最好的 JavaScript 网格 开发人员构建企业应用程序的专业选择 开始吧 Javascript 数据网格 Javascript 反应数据网格 反应 角度数据网格 有角的 Vue 数据网格 视图 实体数据网格 坚硬的 有很多基于组件的表库,但我相信 AG Grid 是黄金标准,也是我最…