病毒消灭战-第13届蓝桥杯Scratch选拔赛真题精选

[导读]:蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。

第13届蓝桥杯青少年组第2次选拔赛于2021年10月23日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

病毒消灭战,本题是2021年10月23日举行的第13届蓝桥杯Scratch选拔赛真题编程第4题,初级组和中级组都有此题,题目要求编程实现键盘按键控制吞噬细胞去消灭人体中随机出现的病毒。

先来看看题目的要求吧。

一.题目说明

背景信息:

机体内具有吞噬功能的细胞统称为吞噬细胞,吞噬细胞对体内衰老死亡细胞和外来异物有吞噬和消化的功能,是机体天然防御的重要机制之一。

编程实现:

用键盘按键控制吞噬细胞去消灭人体中随机出现的病毒。具体要求:

1). 运行程序,吞噬细胞(白色吞噬细胞为防御状态)在舞台左侧边缘随机位置出现,三种病毒(蓝色、紫色、绿色)在舞台右侧边缘随机位置出现,并且以不同速度水平向左移动(如图所示);

 

2). 按上、下、左、右按键,控制防御的吞噬细胞上、下、左、右移动;

3). 按空格键,吞噬细胞进行挥剑,松开空格按键,吞噬细胞开始防御;

 

4). 病毒在移动的过程中碰到挥剑的吞噬细胞时,病毒消失且“消灭”值+1;

5). 当病毒移到舞台最左边时,病毒消失并且“感染”值+1;

6). 当“消灭”值大于等于 10 时,所有病毒消失,吞噬细胞说:“我胜利了!”;

7). 当“感染”值大于等于5时,所有病毒消失,吞噬细胞说:“我还要努力!”。

评分标准:

  • 5分:满足要求1);
  • 3分:满足要求2);
  • 3分:满足要求3);
  • 4分:满足要求4);
  • 5分:满足要求5);
  • 5分:满足要求6);
  • 5分:满足要求7)。

二.作品效果

在编程之前,先来看看作品的完整效果吧:

三.思路分析

本题包含4个角色,分别是吞噬细胞、蓝色病毒、绿色病毒和紫色病毒,如图所示:

 

其中,3个病毒角色的效果是一样的,都是从舞台右边缘随机位置出现,然后向左移动,直到舞台左边缘消失,如果碰到挥剑的吞噬细胞则消失。而吞噬细胞角色则在玩家按方向键时上下左右移动,在按下空格键时挥剑防御。代码实现并不复杂,超平老师想说的是,如何提升编写程序的效率和质量。在Scratch中,按职责划分,可以把每个角色的代码分成两部分,一是角色自己的代码,二是和其它角色交互的代码。在编写程序的时候,我们可以先实现每个角色自己独立的功能,进而再考虑和其它角色之间的交互。这样可以极大地降低编程的难度,同时会减少很多不必要的错误。

四.编程实现

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

  • 吞噬细胞移动和防御
  • 病毒角色向左移动
  • 吞噬细胞消灭病毒
  • 胜利和失败

1. 吞噬细胞移动和防御

绿旗点击时,吞噬细胞在舞台左边缘随机位置出现,并呈现防御造型,当玩家按方向键时,细胞分别向上下左右运动,按下空格键开始挥剑防御,在细胞角色中编写代码如下:

2. 病毒角色向左移动

绿旗点击时,病毒角色在舞台右侧边缘随机位置出现,然后以某个随机速度向左移动直到舞台左边缘消失,同时感染值加1。

这里需要添加两个变量,其一是“速度”,用来表示病毒向左移动的速度,其二是“感染”,表示感染值。其中“速度”需要做成私有变量,因为这里有3个病毒角色,它们都有各自的速度。

以蓝色病毒角色为例,编写代码如下:

需要注意两点:

1). 判断病毒角色是否到达舞台左边缘,此处使用的是“x坐标<-240”,而不是“碰到舞台边缘”,原因在于Scratch舞台有4个边缘,角色刚开始就出现在舞台右边缘,如果使用后者,病毒角色就永远停留在舞台右边缘;

2). 这里的“感染”变量还没有进行初始化设置,稍后会在细胞角色中设置。

3. 吞噬细胞消灭病毒

细胞角色和病毒角色各自独立的效果已经实现了,接下来就要考虑两个角色之间的交互了,即吞噬细胞挥剑防御时碰到病毒,病毒就被消灭了。

代码是写在细胞角色中呢,还是病毒角色中呢?这里有一个原则,就是谁的状态发生了变化,就写在哪个角色中。很明显,碰撞后的结果是病毒被消灭,也就是说病毒角色的状态发生了变化,因此代码要写在病毒角色中。

在病毒角色的重复执行中,增加如下代码:

病毒消失需要同时满足两个条件,一是碰到细胞角色,二是细胞角色刚好是挥剑防御造型,二者是逻辑与的关系。

这里的“消灭”变量用来表示病毒被消灭的数量,它也需要初始化,稍后会在细胞角色中进行设置。

4. 胜利和失败

最后就是游戏胜利和失败机制了,当“消灭”值大于等于 10 时,所有病毒消失,吞噬细胞说:“我胜利了!”,在细胞角色中编写代码如下:

 

而当“感染”值大于等于5时,所有病毒消失,吞噬细胞说:“我还要努力!”,继续在细胞角色中添加代码如下:

不管是胜利还是失败,在这里都发送了一个“病毒消失”的广播消息,其目的是让病毒角色停止移动。相应的在3个病毒角色中都需要增加如下代码:

在上面的代码中,我们使用了“等待条件”指令,针对这种只需要判断一次的场景,这是最简洁高效的实现方式。

五.总结与思考

本题难度系数为4,积木块数量在70个左右,涉及到的知识点主要包括:

  • 角设置角色位置,包括指定范围的随机位置;
  • 按键处理,包括上下左右方向键和空格键;
  • Scratch运动编程,注意边界条件的判断;
  • 变量的使用,包括全局变量和私有变量;
  • 运算指令,包括随机数、比较运算和逻辑与运算;
  • 事件广播机制;
  • “等待条件”指令的灵活运用;

在细胞角色中,对于按键的判断,我这里使用的是侦测指令“按下xx键”,很多同学喜欢使用事件指令“当按下xx键”,从实现效果上来讲,二者没什么区别,那这两种方式究竟有什么区别呢,你知道吗,欢迎和我讨论与交流^_^。

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

邮票面值-2022年全国青少年信息素养大赛Python国赛第5题

2023-7-11 8:30:12

综合资讯

组合取球-2022年全国青少年信息素养大赛Python国赛第6题

2023-7-13 8:21:37

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