引言:为什么"模拟仿真类"作品是赛场高分常客
第十八届蓝桥杯全国青少年智能科技创新实践活动(原蓝桥杯青少组 STEMA 考试,第十八届起升级更名)正在火热进行:省级活动 2026 年 10---12 月、全国级活动 2027 年 4 月 ,本届主题"星际拓荒纪元"。程序设计组别中的 Scratch 创意编程组 分初级(U10,7---10 岁)与中级(U14,11---14 岁),统一 90 分钟上机、线下现场、个人独立完成,裁判按完成度与运行效果客观评分。

现场命题通常只给一个主题,要求限时做出可运行、有交互、有玩法的完整作品。历年高分作品里,"模拟仿真类"(传染病传播、生态系统、交通流量、天气云图)出镜率极高------原因有三:
- 科学内涵足:背后有真实模型(如本文用到的 SIR 模型),讲得出原理就容易拿"创意分";
- 考点全覆盖:列表、循环、条件、变量、自制积木、广播六大考点能全部自然用上;
- 演示效果好:曲线、数字面板实时变化,比纯手速游戏更耐看。
本文以原创项目**《校园防疫大作战》** 为例,完整拆解从数据设计到策略交互的全过程。同一套路可平移到全国青少年信息素养大赛 创意编程赛项的互动艺术/科学探索方向,也是电子学会图形化等级考试模拟类题型的标准练法。
一、题目与项目目标
主题:模拟传染病在校园人群中的传播,玩家扮演"防疫指挥员",用戴口罩、隔离、打疫苗三种策略压低感染曲线。
玩法规则:
- 舞台上有 40 名"同学"随机游走,相互接触时按概率传染;
- 点击"开始模拟"后进入按天推进的循环,每天结束刷新一次"新增感染 / 累计感染"数据;
- 三种策略按钮随时可点:戴口罩 (未感染者感染率打四折)、隔离 (三分之一人原地不动)、疫苗(5 名易感者直接获得免疫);
- 胜利条件:30 天内感染人数清零,显示"防疫成功";天数用尽仍有感染者,则结算战果、展示完整疫情曲线。
作品定位:科学探究 + 互动艺术,现场 90 分钟内优先保证"主流程跑通、策略可见效",再打磨表现层。
二、核心考点(六大考点全覆盖)
| 考点 | 在本项目中的落点 |
|---|---|
| 列表 | 全体编号 / 全体 x / 全体 y / 全体状态四表 + 每日新增、每日累计两表 |
| 循环 | 每天推进的主循环 + 每个克隆体的重复执行 + 遍历列表做两两判定 |
| 条件 | 接触感染判定、自愈判定、清零/超时结束判定、按钮误触闸门 |
| 变量 | 全局(天数、感染人数、游戏状态等)+ 私有(我的状态、我的编号、口罩标记) |
| 自制积木 | 随机移动一步、刷新坐标表、尝试感染、记录当日数据、画疫情曲线 |
| 广播 | 开始、新的一天、疫情结束、重置 |
三、解法拆解:从数据设计到跑起来
3.1 先设计数据,再写代码(现场得分关键)
蓝桥杯现场评分看"完成度与运行效果",数据设计想清楚,代码就顺了。本项目的数据分三层:
全局变量 :天数、感染人数、康复人数、总人数、基础感染率(0.4)、游戏状态(0 待开始 / 1 进行中 / 2 已结束)。
私有变量 (仅限当前角色,每个克隆体各存一份):我的编号、我的状态(0 易感 / 1 感染 / 2 康复)、我戴口罩了吗(0/1)、我的隔离标记、我已感染天数。
全局列表(Scratch 列表下标从 1 开始,编号与下标对齐,现场最易错):
全体x、全体y:每帧记录每个克隆体的坐标;全体状态:每帧记录每个克隆体的感染状态;每日新增、每日累计:每天追加一项,用于画曲线。
为什么要用列表存坐标?Scratch 里一个克隆体"到同学的距离"测的是自身(返回 0),克隆体之间无法直接互测距离。用"私有编号 + 共享坐标表"是标准解法:每个克隆体每帧把自己的 x/y/状态写进列表,判定时按编号遍历即可。
3.2 初始化:生成人群
绿旗脚本:全局变量清零、四个列表清空、总人数设为 40;重复执行 40 次------全局计数器 +1,克隆"同学"角色,每个克隆体随机落在舞台、状态设为易感;其中 3 个克隆体状态设为 1(初始感染者),模拟"输入病例"。
每个克隆体被启动时,第一件事是私有变量初始化(现场高频扣分点:不初始化,后面读到的全是 0 或空):
text
当我作为克隆体启动:
我的编号 ← 取全局计数器当前值
我的状态 ← 0(易感)
我戴口罩了吗 ← 0
我的隔离标记 ← 0
我已感染天数 ← 0
显示
3.3 主控循环:一天是怎么推进的
主控脚本挂在舞台上,管"天"的节奏;每个克隆体管自己的移动。两边用广播解耦:
text
绿旗:初始化全部数据
收到广播[开始]:
游戏状态 ← 1
重复执行直到 游戏状态 ≠ 1:
广播[新的一天]
等待 2 秒 // 一天的时长,可用变量做成可调速度
天数 ← 天数 + 1
// 自愈推进:感染满 5 天转康复
对每个感染中的克隆体:我已感染天数 +1,若 ≥5 则 我的状态 ← 2
记录当日数据(见 3.6)
画疫情曲线
// 结束判定
如果 感染人数 = 0:广播[疫情结束-成功]
如果 天数 ≥ 30:广播[疫情结束-结算]
每个克隆体自己的"重复执行"负责移动与自我刷新:
text
重复执行:
如果 游戏状态 = 1:
如果 我的隔离标记 = 0:随机移动一步(自制积木)
把我的 x 写入 全体x 的第[我的编号]项
把我的 y 写入 全体y 的第[我的编号]项
把我的 我的状态 写入 全体状态 的第[我的编号]项
尝试感染(自制积木,见 3.4)
3.4 灵魂环节:两两接触感染判定
自制积木尝试感染,每个易感克隆体每帧自查一遍邻居:
text
定义 尝试感染:
如果 我的状态 ≠ 0:停止 这个积木 // 只判断易感者
我的感染概率 ← 基础感染率 × 如果 我戴口罩了吗=1 那么 0.4 否则 1
序号 ← 1
重复执行直到 序号 > 总人数:
如果 序号 ≠ 我的编号: // 跳过自己
dx ← 我的x - 全体x[序号]
dy ← 我的y - 全体y[序号]
如果 dx×dx + dy×dy < 28×28: // 距离平方比较,省掉开方
如果 全体状态[序号] = 1: // 邻居是感染者
如果 在 -1 到 1 之间取随机数 < 我的感染概率:
我的状态 ← 1
当日新增 ← 当日新增 + 1
两个现场提分细节:
- 概率判定 :Scratch 的"随机数"积木取的是整数,比较概率请用
在 -1 到 1 之间取随机数(或随机 1---100 与 概率×100 比),否则 0.4 会先被取整成 0,永远不传染; - 同一天防重复感染 :一旦
我的状态 ← 1就停止这个积木,避免一帧内被多个感染者连续叠加。
3.5 三个策略按钮:交互即亮点
三个按钮角色共用一个"误触闸门"------如果 游戏状态 = 1才响应,开始前、结束后点击均无效(现场评测必点乱按,这是隐性得分点):
- 戴口罩 :遍历克隆体,把未感染者的
我戴口罩了吗设为 1,之后每次接触感染率降为四折; - 隔离 :把前 13 名(约三分之一)易感者的
我的隔离标记设为 1,他们的移动脚本被跳过,相当于居家不出门; - 疫苗 :把 5 名易感者
我的状态直接设为 2 并计入康复人数,模拟接种免疫。
3.6 数据面板与曲线:让效果"看得见"
自制积木记录当日数据:把当天的当日新增添加进每日新增列表,把当前累计感染数添加进每日累计列表,随后当日新增归零。
自制积木画疫情曲线:用画笔角色(或单独一个隐形角色)把每日累计画成折线------画之前先抬笔、移动到下一个点再落笔,否则曲线会穿屏;x 方向随天数平移、y 方向按累计感染数映射,两条线(累计感染、累计康复)用不同颜色,一眼看出"免疫追平感染"的拐点。
3.7 广播解耦清单
| 广播 | 发送时机 | 接收方动作 |
|---|---|---|
| 开始 | 点击开始按钮 | 主控启动主循环 |
| 新的一天 | 每天循环开头 | 面板文字刷新 |
| 疫情结束-成功 | 感染人数清零 | 停主循环、撒花庆祝、显示"防疫成功" |
| 疫情结束-结算 | 天数 ≥ 30 | 停主循环、展示最终曲线与数据 |
| 重置 | 点击重置按钮 | 删除全部克隆体、清空列表、变量归零、回初始画面 |
结束广播要加"只发一次"保护:发送前检查游戏状态,发完立刻置 2,防止两个结束条件同帧触发时脚本重复弹结果。
3.8 运行效果
- 前 3---5 天:感染人数指数式上升,曲线陡峭爬升------直观展示"不干预时 R0>1 的疫情会爆发";
- 第 2 天点"隔离 + 疫苗":上升沿被明显压平,康复曲线提前反超感染曲线;
- 拖到第 10 天才行动:曲线已经过高点,只能压低尾部,"防控窗口期"的概念不言自明;
- 感染清零瞬间:全舞台庆祝动画 + "防疫成功"横幅,数据面板定格最终天数。

四、现场易错点清单(蓝桥杯提分用)
- 克隆体私有变量必须在"当我作为克隆体启动"第一行初始化,漏了会导致编号全 0、坐标表写崩;
- 列表下标从 1 开始,"第 0 项"不存在,编号与下标务必对齐;
- 概率比较用连续随机值,别把 0.4 先取整成 0;
- 距离判定用平方比较 (
dx*dx+dy*dy < r*r),一是不用开方积木,二是没有浮点误差烦恼; - 画曲线先抬笔再落笔 ,画笔初始位置记得
抬笔+移到起点; - 结束广播只发一次 ,用
游戏状态做闸门; - 策略按钮加误触闸门,评测乱按时不报错、不乱状态;
- 主循环里等待用变量控制 (如
模拟速度),方便现场演示时快进。
五、进阶:把作品做成"迷你科研"
5.1 看懂背后的 SIR 模型
本项目就是经典的 SIR 模型 图形化:人群分易感 S、感染 I、康复 R 三态,每天感染者按传染率 × 易感者占比制造新增、按康复率转为免疫。定义基本再生数 R0 = 传染率 / 康复率 :R0 > 1 疫情增长,R0 < 1 自动消退;而群体免疫阈值 = 1 - 1/R0------把免疫比例推过这条线,传播链就被打断。让孩子在作品里"看见"这个阈值,比背十遍公式都直观。
5.2 Python 对照:三十行复现整个模拟
图形化想明白后,用 Python 把同一天迭代写出来,两边对拍(比如"戴口罩后峰值减半"),既是算法启蒙,也是信息素养大赛算法赛项的预热:
python
import random
def simulate(days=30, N=40, beta=0.4, gamma=0.2,
mask_day=None, vaccine_day=None, quarantine=0):
"""SIR 模型:易感 S / 感染 I / 康复 R,按天迭代"""
S, I, R = N - 3, 3, 0 # 3 名输入病例
curve = []
for day in range(1, days + 1):
beta_eff = beta * (0.4 if (mask_day and day >= mask_day) else 1.0)
moving = N - quarantine # 隔离者不参与接触
new_inf = min(S, sum(random.random() < beta_eff * S / N * moving / N
for _ in range(I)))
recovered = sum(random.random() < gamma for _ in range(I))
if vaccine_day == day: # 疫苗:5 名易感者直接免疫
v = min(S - new_inf, 5)
S -= v
R += v
S -= new_inf
I = I + new_inf - recovered
R += recovered
curve.append((day, I, R))
if I == 0:
print(f"第 {day} 天防疫成功,感染清零!")
break
return curve
# 策略对比:不干预 / 第 2 天戴口罩 + 疫苗 / 全程隔离 13 人
for name, kw in [("无干预", {}),
("口罩+疫苗", {"mask_day": 2, "vaccine_day": 2}),
("隔离13人", {"quarantine": 13})]:
peak = max(I for _, I, _ in simulate(**kw))
print(f"{name}:感染峰值 {peak} 人")
5.3 还能怎么加深度
- 加潜伏期 E:升级为 SEIR 四状态(易感→潜伏→感染→康复),曲线多一个"滞后峰";
- 无症状感染者:设一小部分克隆体感染但不显示红色,只有数据面板能看出异常,考察"数据驱动决策";
- 策略对比实验:同一随机种子跑三种策略各 100 次取平均,把"哪天行动收益最大"量化成柱状图------这已经接近信息素养大赛"智能算法应用"赛项的雏形;
- 换成别的模拟:把"人"换成"车"就是交通流,换成"鱼"就是生态平衡,换成"云"就是天气------同一套骨架全部复用。
六、小结与互动
《校园防疫大作战》一条线串起了蓝桥杯 Scratch 创意编程组的全部核心考点:列表 存坐标与疫情数据、循环 驱动人群与按天推进、条件 做接触感染与结束判定、变量 (全局 + 私有)承载全部状态、自制积木 把移动/感染/记录/画曲线模块化、广播让主控、克隆体、面板三方解耦。再加上三个"可感知"的策略按钮和一条实时疫情曲线,就是一个有科学内涵、有交互、有演示效果的完整赛场作品。
现场 90 分钟建议这样分配:10 分钟 设计数据与角色、50 分钟 搭通主流程(先能跑再好看)、20 分钟 打磨策略交互与容错、10 分钟自测乱点按钮和重置。同类"模拟仿真"思路同样适用于全国青少年信息素养大赛创意编程赛项和电子学会图形化等级考试的模拟类题目,练透一个,通吃一片。
互动话题:如果是你指挥这场防疫,会选择第几天戴口罩、第几天打疫苗?评论区留下你的策略峰值,看看谁的曲线最平。
本文项目与配图均为原创整理,赛制信息以蓝桥杯青少组官方最新通知为准。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 App 内打开,也可复制下方明文链接:
- 全国青少年信息素养大赛复赛集训题目Python&C++.docx
https://pan.quark.cn/s/93995d3cb150 - 2024信息素养-智能算法应用挑战赛-复赛初中组题目7月7日.pdf
https://pan.quark.cn/s/da97b5dbf75d - Python背记手册.pdf
https://pan.quark.cn/s/7568ae9ca92b - Python课程
https://pan.quark.cn/s/a94bf02d00c6 - 2024信息素养大赛图形化复赛集训题答案3-9
https://pan.quark.cn/s/6ccab7ec3cbc - 2025年03月份电子学会考级真题
https://pan.quark.cn/s/4403c4228912 - 2025全国青少年信息素养大赛赛项说明
https://pan.quark.cn/s/d9d0df4a9f29 - 青少儿信息素养大赛编程资料
https://pan.quark.cn/s/4ab6bd83be8a
资料持续更新,关注获取最新分享。