第13届蓝桥杯Scratch选拔赛真题集锦
编程题
第 1 题问答题
跳舞机游戏
题目说明
编程实现
跳舞机游戏。
具体要求:
1).点击绿旗,舞台左上角显示得分0代表玩家分数,在得分右侧倒计时10代表游戏时长(10s)
2).游戏开始倒数计时,在舞台上随机显示上、下、左、右四个箭头中的一个,等待1秒后变化其它方向箭头(箭头方向、颜色都是随机改变);
3).玩家观察复台上出现的箭头,按下错盘上对应的方向钱,箭头方向和按下的方向镜一致则分数加1,并目箭头说“正确",同时显示出箭头出现时到找下对应方向键时的反应时间,
4).箭头方向和按下的方向键不一致则分数减1,并且箭头说“错误”;
5).当倒计时为0时,游戏结束,用一个列表“积分榜”来记录每轮游戏的得分;
6).“积分榜”中每轮分数进行比较,其中最高分呈现在舞台上方最高分中;
7). 点击小绿旗,下一轮游戏重新开始 (积分榜中数据不变)
查看答案
答案
编程实现
根据题目描述和思路分析,我们可以分4步来编写程序:倒计时10秒钟
箭头每隔1秒钟切换一次造型
等待玩家按键并判断对错
计分系统
1.倒计时10秒钟
首先创建一个变量“倒计时”,将初始值设为10,然后每隔1秒减1,直到减为0,代码如下:
代码非常简单,很多同学喜欢直接使用”重复执行10次“指令,也是可以的。使用“重复执行直到“指令则更加灵活,你可以将倒计时设置为任何其它数字,而不需要修改重复的次数。
2.切换箭头造型
箭头每隔1秒要切换一次造型,切换方式则是随机的,将切换造型指令和随机数指令结合起来就可以了,同时颜色也会随机变化,对应
代码如下:
一旦切换完造型之后,就需要处理用户按键事件,为了简化代码,这里使用了广播机制,将判断按键处理的代码单独拎出来。3.等待玩家按键并判断对错
判断的逐辑也比较简单,首先需要判断是否按下了上下左右4个方向键,其次要确定按下的方向键和箭头指向是否一致,如果一致则提示正确,加分并显示反应时间,否则提示错误并减分。
对应的代码如下:
简要说明四点:
1)在接收到“判断”的广播消息之后,使用了等待条件指令,其作用是用来监测用户是否按下了4个方向键,如果没有按键,则什么都不用做,如果按下方向键了,则接着判断按键是否正确,
2).由于箭头角色的上、下、左、右四个造型的编号依次为1、2、3、4,因此这里是通过按键和角色的造型绵号是否相等来判断按键的对错,
3).这里有4种不同的情况,为了避免玩家同时按下多个键,使用了条件嵌套的编程技巧;
4).对于正确与错误的处理,这里使用了自制积木,其目的是简化代码。接下来就需要完成自制积木的定义,代码如下:
这里使用了两个变量“反应时间“和“得分",需要做初始化处理。对于反应时间,我们可以通过Scratch提供的“计时器“指令来实现,但是必须要对计时器进行清零操作,什么时候清零呢? 当然是在箭头切换造型之后,在绿旗代码中增加如下指令:
还有一点需要注意,这里对反应时间做了一个简单的处理,默认情况下,计时器的值都是保留3位小数的,而题目要求反应时间保留两位小数 (没有文字说明,但是图中显示的是小数点后面保留两位)。处理方式也比较简单,就是将计时器·100,然后去掉小数部分,再除以100就可以了。比如计时器的数字是0.678,乘以100之后则变成67.8,经过四舍五入之后变成68,再除以100,结果就是0.68了。
4.计分系统
除了显示本局的得分外,还需要记录最高分以及积分榜,最高得分直接使用变量即可,而积分榜则需要通过列表来实现。我们是通过点击绿旗来开启下一轮游戏的,因此,这里的最高分和积分榜不需要做初始化处理。不能将最高分设为0或者将列表清空否则每次记录的就只有当前这一局的分数了。
当倒计时变为0时,一局游戏结束了,此时需要完成两个任务,一是将本局的得分添加到列表中,二是判断本局得分是否大于最高分如果大于则更新最高分,在绿旗代码块中,添加代码如下:
第 2 题 问答题
潜艇游戏
题目说明
编程实现
潜艇游戏。
具体要求:
1).角色、背景如图所示;
2).点击绿旗,潜水艇询问:“下潜到多少米?”,
3).输入对应刻度数字(40,80,120,160) 潜水艇移动到左侧对应刻度的位置;
4).等待1秒,潜水艇询问:“选择前进速度1-5?”(数字越大速度越快,速度5最快);
5).输入1到5之间的数字,潜水艇以此速度水平向右移动到舞台右侧边缘
查看答案
答案
编程实现
根据题目描述和思路分析,我们可以分2步来编写程序:
潜艇下潜到指定位置
潜艇前进
1.潜艇下潜到指定位置
当绿旗被点击时,潜艇位于舞台中心位置,坐标大概是(0.30),然后开始询问“下潜到多少米?",当玩家输入对应数字后,就将潜艇瞬间移到相应的位置,这部分的代码如下:
需要注意的是,舞台上标注的四个刻度 (40、80、120、160)并不是角色的y坐标,潜艇角色的y坐标需要我们自己来确定。确定的方法也比较简单,就是三步定位法,一拖二看三找,一拖是将角色拖到目标位置,二看是看复台下方的坐标信息,包括x坐标和y坐标,三找则是找到对应的运动指令,比如这里的”移到x,y“指令。
2.潜艇前进
当潜艇移到指定位置后,先等待1秒,接着开始询问“选择前进速度1-5”,当玩家输入速度后,潜艇就向右运动直到舞台右边缘,对应的代码如下:
需要注意的是这里的判断条件,270是一个大概的坐标,你可以设置得大一点或小一点。如何确定这个坐标,超平老师告诉你一个小技
巧,就是先不添加条件指令,如图:
执行程序,看看角色停止移动时的x坐标,比如我这里潜艇停下来时x坐标为272,所以我将条件设置为“x坐标>270",是不是很方便
呢。
将两段代码连在一起,整个程序就编写完成了。
第3题
问答题
豌豆射手
题目说明
编程实现
在舞台上放置晚豆射手,并实现发射子弹的效果
具体要求:
1).点击绿旗,角色、背景如图所示;
2.在左上角魏豆射手位置,按下凰标左键,会生成一个新貌豆射手、拖动鼠标新酸豆射手跟油里标移动,移动到新的位置松开剧标左镜,新税豆射手会被放置在这个新位置,新的豆射手不会再跟随围标移动,
3).豌豆射手只能放置在黄色土地上,如果放置在灰色石砖上,豌豆射手会在0.1秒后消失;
4).在黄色士地上放下豌豆射手之后,貌豆射手就开始持续变化造型(造型间的切换间隔0.1秒),每当切换到最后一个造型时,貌豆射手会发射子弹
(如图所示) ;
5).子弹水平向右侧飞行,在右侧边缘消失 (每个豌豆射手都可以持续发射子弹)
查看答案
答案
编程实现
根据题目描述和思路分析,我们可以分3步来编写程序:
克隆豌豆射手
放置豆射手
克隆子弹并发射
1.克隆豌豆射手
当绿旗被点击时,将貌豆射手移到舞台左上角,如果鼠标移到貌豆射手位置,并按下保标,就克隆一个貌豆射手。代码如下
需要注意,为了避免重复克隆,这里增加了一个限制条件,即等待松开鼠标后才能进行下一次循环。
2.放置豌豆射手
晚豆射手克隆体在启动时,会一直跟随鼠标移动直到松开鼠标,代码如下:
当松开鼠标后,可以放置晚豆射手了吗?
非也,我们还需要判断貌豆射手是不是放在了黄色士地上,前面的思路分析中提到使用颜色碰撞来检测,但是这里的砖块比较小,而豌豆射手角色有点大,直接进行颜色碰撞检测肯定会出现较大的误差。因此,我们要将豌豆射手角色变小,最好是变成一个小点点,可以给角色再增加一个造型,如图:
有了这个小点点造型,判断就非常精确了,先将角色换成点造型,再判断是否碰到灰色。如果是则等待0.1秒后删除克隆体,否则就每
隔0.1秒切换到下一个造型,代码如下:
简要说明两点:
1).这里的灰色有深有浅,所以这里选择了两种灰色;
2).在切换下一个造型的时候,或出现小点点造型,所以这里增加了一个条件判断,当切换到小点点造型时,立刻换成第一个造型,从
而避免出现小点点造型,
3.克隆子弹并发射
克隆子弹是本题的难点,根据思路分析,需要先创建好两个列表“x”和“y”,如图:
当点击绿旗时,需要将列表清空,代码如下:
你可以将这个绿旗代码块和前面的绿旗代码块合并起来。
在Scratch中克隆角色,通常有两种方式,一是在当前角色中克隆自己,二是在别的角色中克隆自己。很多同学都喜欢使用第一种方式,大多数情况下是没有问题的,但是要避免通过发送广播消息,然后克隆自己。这是因为克隆体也会接收到广播消息,这会导致克隆体爆炸式增长。
本题正是这种情况,所以我们应该毫不犹豫的选择第二种方式,在貌豆射手角色中克隆子弹,根据题目描述,当切换到第4个造型时就发射一颗子弹,对应的增加代码如下:
重点来了,在克隆子弹之前,我们需要将当前豌豆克隆体的坐标存放到列表x和列表y中。对于子弹角色来说,只需要编写“当作为克隆体启动时“代码块就可以了,先设置好克隆体的位置,然后立刻删除列表中的数据,再让子弹向右移动直到舞台右边缘。
切换到子弹角色,编写代码如下:
第4题问答题
拼图游戏
题目说明
编程实现:
拼图游戏。
具体要求:
1).点击绿旗,角色、背景如图所示;
2).指针在碎片上,按下鼠标拖拽碎片在舞台上移动(松开鼠标碎片停止移动)
3).碎片移动到对应背景上,按下空格键碎片与背景重合 (不对应就不能重合)
4).四张碎片成功拼出如图所示的图片后,程序结束
查看答案
答案
编程实现
根据题目描述和思路分析,我们可以分4步来编写程序:
设置碎片初始位置
拖拽碎片
拼合图片
效果优化
1.设置碎片初始位置
当绿旗被点击时,4个小碎片分别放置在舞台右侧,以碎片1为例,设置好其位置和大小即可,如图:
这里的“将拖动模式设为不可拖动”是为了避免直接拖动角色,不过要注意它只在全屏展示模式下才生效.
其余3个碎片的代码基本一样,不同的是它们的坐标值。
2.拖拽碎片
按下鼠标不松开就可以拖动碎片,根据思路分析给出的经典代码,以碎片1为例,编写程序如下:
点击角色就意味着鼠标按下了,只要鼠标不松开,碎片就会一直跟随鼠标移动,松鼠鼠标,碎片就放好了。
3.拼合图片
碎片拖到合适位置后,按下空格镜就可以和背景重合,此时需要对碎片的位置进行判断,如果位置正确,则将碎片移动对应的位置并放
大,以碎片1为例,编写代码如下:
判断是否按下空格镜,此处使用了“等待条件”指令,这个比直接使用“当按下空格键”指令要更符合逻辑。如果和背景重合,说明该碎片已拼接成功,此时将变量“已拼接数量”增加1。其它3个碎片的代码基本类似,不同的是各自区域的坐标范围和图片移到的位置,这里就不再列出来了接下来,需要判断游戏是否成功了,这个可以写在任何角色中,不妨将它写到舞台背景中,代码如下:
绿旗点击时,将变量的初始值设为0,然后等待“已拼接数量=4”,就表示游戏成功,停止全部脚本。很多同学喜欢使用如下代码:
这个当然没有问题,效果一样,但是前者更简单。实际上,使用循环通常是针对多次判断,即每次满足条件都要执行某个代码,而“等待条件”指令则是针对一次判断,满足某个条件就执行一次代码。很显然,本题是后一种情况,所以使用“等待条件“指令更为简单。4.效果优化
运行程序,效果基本没问题,但是有一个小bug,就是碎片和图片重合后,再按下凰标,图片还会跟着鼠标走,这显然不合理,该如何处理呢?
常用的解决方案是给碎片角色添加一个状态,当图片拼接好后,更新一下状态,每次点击角色时都来判断一下状态,如果图片已经拼接好,就不再跟随围标移动了。
以碎片1为例,添加一个私有变量“已拼接?”,并将初始值设为0,如图:
这里的变量名称前面增加了一个下划线“_”,是为了区分全局变量和私有变量。在点击角色时,判断变量是否为0,如果为0,则可以拖拽,当图片和背景重合后,将变量更新为1,新增代码如下
第 5 题 问答题
病毒消灭战
题目说明
背景信息:
机体内具有吞噬功能的细胞统称为吞噬细跑,吞噬纽胞对体内衰老死亡纽跑和外来异物有吞噬和消化的功能,是机体天然防御的重要机制之一。
编程实现:
用键盘按键控制吞噬细胞去消灭人体中随机出现的病毒
具体要求:
1).运行程序,吞嘘细胞(白色吞噬细胞为防御状态)在舞台左侧边终随机位置出现,三种病毒(蓝色、紫色、绿色)在舞台右侧边缘随机位置出现并且以不同速度水平向左移动 (如图所示) ,
2).按上、下、左、右按键,控制防御的吞噬细胞上、下、左、右移动;
3).按空格键,吞噬细胞进行挥剑,松开空格按键,吞噬细胞开始防御;
4).病毒在移动的过程中碰到挥剑的吞噬细胞时,病毒消失且“消灭”值+1;
5.当病毒移到舞台最左边时,病毒消失并且“感染”值+1;
6).当“消灭”值大于等于 10 时,所有病毒消失,吞噬细胞说:“我胜利了!”;
7).当“感染”值大于等于5时,所有病毒消失,吞噬细胞说:“我还要努力!”
查看答案
答案
编程实现
根据题目描述和思路分析,我们可以分4步来编写程序:
吞噬细胞移动和防御
病毒角色向左移动
吞噬细胞消灭病毒
胜利和失败
1.吞噬细胞移动和防御绿旗点击时,吞噬细胞在复台左边缘随机位置出现,并呈现防御造型,当玩家按方向镜时,细胞分别向上下左右运动,按下空格镜开始挥剑防御,在细胞角色中编写代码如下:
2.病毒角色向左移动
绿旗点击时,病毒角色在舞台右侧边缘随机位置出现,然后以某个随机速度向左移动直到舞台左边缘消失,同时感染值加1。这里需要添加两个变量,其一是“速度”,用来表示病毒向左移动的速度,其二是“感染”,表示感染值。其中“速度”需要做成私有变量,因为这里有3个病毒角色,它们都有各自的速度。
以蓝色病毒角色为例,编写代码如下:
需要注意两点:
1).判断病毒角色是否到达舞台左边缘,此处使用的是“x坐标<-240”,而不是“碰到舞台边缘”,原因在于Scratch舞台有4个边缘,角色刚开始就出现在舞台右边缘,如果使用后者,病毒角色就永远停留在舞台右边缘,
2).这里的“感染”变量还没有进行初始化设置,稍后会在细胞角色中设置。
3.吞噬细胞消灭病毒
细胞角色和病毒角色各自独立的效果已经实现了,接下来就要考虑两个角色之间的交互了,即吞噬细胞挥创防御时碰到病毒,病毒就被消灭了。
代码是写在细跑角色中呢,还是病毒角色中呢?这里有一个原则,就是谁的状态发生了变化,就写在哪个角色中。很明显,碰撞后的结果是病毒被消灭,也就是说病毒角色的状态发生了变化、因此代码要写在病毒角色中。在病毒角色的重复执行中,增加如下代码:
病毒消失需要同时满足两个条件,一是碰到细胞角色,二是细胞角色刚好是挥剑防御造型,二者是迈辑与的关系。
这里的“消灭”变量用来表示病毒被消灭的数量,它也需要初始化,稍后会在细胞角色中进行设置。
4.胜利和失败
最后就是游戏胜利和失败机制了,当“消灭"值大于等于 10 时,所有病毒消失,吞噬细胞说:“我胜利了!”,在细胞角色中编写代码如
第 6题 问答题
嫦娥奔月
题目说明
背景信息:
中秋是中国民间的传统节日,中秋以月之圆寓意人之团圆,为寄托思念故乡,思念亲人之情、祈盼丰收、幸福,成为丰富多彩、弥足珍费的文化遗产
编程实现:
嫦娥奔月,
具体要求:
1).运行程序,等待1秒出现嫦娥角色;
2). 点击嫦娥,嫦娥询问“请输入我飞行的时间5-10”
3).输入数字后嫦娥开始向月亮移动,飞行过程中嫦娥越来越小;
4).左上角显示输入的数值后开始倒计时 (5代表5秒,6代表6秒以此类推)
5).倒计时为0停止计数,嫦娥在月亮上停止移动
6).等待1秒,出现节日祝福。
第 7 题 问答题
闺年计算
题目说明
背景信息:
每年的 1、3、5、7、8、10、12 月都有 31 天;4、6、9、11 月都有 30 天; 2月比较特殊,公历年份能被4除的是国年,其他是平年,例为I2020年是闰年,2021年是平年。平年的2月有28天,闰年的2月有29天
编程实现:
运行程序,在对话框输入年份与月份,并说出输入年份为平年还是闰年,输入月份有多少天。
具体要求:
1).点击绿旗,询问请输入年份并出现对话框;
2).说出输入年份为平年还是闺年 (年份大于2001,小于2040)
3).询问请输入月份并出现对话框 (1-12) ;
4).说出输入月份有多少天;
5).完整说出刚才输入年份为平年或闺年,输入月份一共有多少天
第 8 题 问答题
红绿灯记忆游戏
题目说明
编程实现:
记忆游戏,红绿灯三盏灯亮起后分别为红灯、黄灯和绿灯, 观察并记忆三盏灯随机亮起熄灭的先后顺序。
具体要求:
1).运行程序,小朋友说:“3秒后开始程序,请观察红绿灯亮起的先后顺序”;
2).红绿灯的三盏灯按照随机顺序,分别亮起和熄灭一次,每盏灯亮起同时说出灯的颜色,1秒后熄灭,间隔1秒后下一盏灯亮起;
3).小朋友说:“请按照三盏灯的亮灭顺序依次点击舞台右下角的3个按钮”,
4).如果点击按钮的顺序与三盏灯的亮起熄灭顺序一致,则正确次数加1,小朋友说:“对了”;
5).如果顺序不一致,小朋友说:“错了”;
6).完成五次游戏后,左上角显示正确次数,小朋友说出:“正确次数为”(表示正确次数》,2秒后游戏结束.
第 9 题 问答题
绘制花朵
题目说明
编程实现
运行程序,围标点击屏幕,会自下而上画出一条枝干和一朵花,花朵是由五片花摊组成,每片花摊为五边形图案,每次画出枝干和花朵的颜色随机。
具体要求:1.在舞台上的任意一点,点击鼠标,会从点击处的舞台正下方画出一条枝干到达鼠标点击位置(枝干的颜色随机);