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

拼图游戏,本题是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). 如果要改成每次随机选两张拼图交换位置,是不是更有趣呢,那么程序又该如何实现呢?你有什么好的想法和建议,也欢迎和超平老师交流。

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

给TA赞助
共{{data.count}}人
人已赞助
综合资讯

scratch矿工挖宝,第十四届蓝桥杯国赛scratch中级真题

2023-6-8 10:51:42

综合资讯

Scratch的考级与竞赛(干货)

2023-6-8 11:53:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索