备考季又来了——蓝桥杯 STEMA 11 月省考报名正热(11/9 16:00 截止、11/22 开考),电子学会 12 月图形化考级报名也到 12/2 才关门,全国青少年信息素养大赛 2026–2027 赛季正卡在报名/初赛规划窗口。这三大标志性赛事的图形化考点高度重合,今天用一个原创项目「校园智能送餐机器人」,把变量、列表、循环、条件、自制积木、广播六件套一次性串起来,一篇顶三篇备考。

一、项目目标:校园智能送餐机器人
背景设定:午休时间,食堂机器人要从厨房出发,把若干份订餐送到教学楼各楼层的取餐点,途中要避开课桌、花坛等障碍物,还要在倒计时内尽可能多送达,才能拿到"金牌配送"评价。
项目目标: 1. 用方向键操控机器人,在网格地图上移动; 2. 经过取餐点自动"取餐"(餐箱 +1),到达送餐点自动"送达"(得分 +10); 3. 撞到障碍物或边界则原地不动并扣 1 分; 4. 60 秒倒计时内送达越多分越高,归零弹出"本局成绩"。
规则映射到考点:地图用列表存、状态用变量记、每帧刷新用循环、碰撞判定用条件、画地图/重置用自制积木、开始/取餐/送达/结束用广播——六件套一个不少。
二、核心考点拆解(六件套全包)
- 变量:机器人坐标 x/y、餐箱数量 carry、得分 score、剩余时间 time、游戏状态 state(等待/进行/结束)。
- 列表:map 一维存 15×11 网格的格子类型(0 空地 / 1 墙 / 2 取餐点 / 3 送餐点),保证地图可配置、可换关。
- 循环:主循环"重复执行"每帧推进——先读方向键移动,再检测碰撞、再判定取餐/送达、最后刷新倒计时。
- 条件:撞墙拦截、边界拦截、是否站在取餐点、是否站在送餐点且餐箱>0、时间是否归零,全部用"如果…否则"串起来。
- 自制积木:画地图、移动一步(方向)、生成一关、结算成绩 封装复用,主脚本只负责"调度",不堆长代码。
- 广播:按钮只发"开始游戏",机器人监听后初始化;取餐成功广播"已取餐"让播报员说话;时间归零广播"游戏结束",逻辑与表现彻底分离。
三、积木实现拆解(分步上手)
1. 地图与状态用「列表」承载
新建列表 map,长度 165(15 列 × 11 行)。建关时用 生成一关 把墙、取餐点、送餐点的坐标写进对应下标,公式为 下标 = 行 × 15 + 列。想换关?改这一份数据即可,无需动逻辑。
2. 主循环:每帧刷新(循环 + 条件)
机器人角色下挂:
当接收到 [开始游戏] 将 state 设为 [进行中] 重复执行: 如果 <(state) = [进行中]> 那么 如果 <按键 [上移] 按下?> 那么 移动一步(0) 如果 <按键 [下移] 按下?> 那么 移动一步(180) 如果 <按键 [左移] 按下?> 那么 移动一步(-90) 如果 <按键 [右移] 按下?> 那么 移动一步(90) 将 [time] 增加 (-0.1) // 用计时器更稳 如果 <(time) < [0]> 那么 广播 [游戏结束] 并等待
注意:移动前先算"目标格",合法才真移,避免穿墙——这正是条件判断的价值。
3. 移动与碰撞(条件)
自制积木 移动一步(方向) 内部:
定义 移动一步(方向) 将 [新x] 设为 (x) 将 [新y] 设为 (y) 如果 <(方向) = [0]> 那么 将 [新y] 增加 (30) // 上 如果 <(方向) = [180]> 那么 将 [新y] 增加 (-30) // 下 如果 <(方向) = [-90]> 那么 将 [新x] 增加 (-30) // 左 如果 <(方向) = [90]> 那么 将 [新x] 增加 (30) // 右 如果 <<(新x) < [-210]> 或 <(新x) > [210]>> 或 <<(新y) < [-150]> 或 <(新y) > [150]>> 那么 将 [score] 增加 (-1) // 撞边界 否则 将 [列] 设为 ((新x + 210) / 30) 将 [行] 设为 ((150 – 新y) / 30) 如果 <(map 的第 ((行 × 15) + 列) 项) = [1]> 那么 将 [score] 增加 (-1) // 撞墙 否则 将 x 设为 (新x) 将 y 设为 (新y) // 合法,真移
4. 取餐 / 送达(条件 + 列表)
移动落定后单独判断当前格类型:
将 [格] 设为 (map 的第 ((行 × 15) + 列) 项) 如果 <(格) = [2]> 那么 将 [carry] 增加 (1) 并 广播 [已取餐] 如果 <<(格) = [3]> 且 <(carry) > [0]>> 那么 将 [carry] 增加 (-1) 将 [score] 增加 (10) 广播 [送达成功]
一个"先取后送"的状态机就立起来了,蓝桥杯/电子学会考级常考的"条件分支 + 状态变量"正是这个套路。
5. 自制积木封装复用
画地图 遍历 165 格,按类型切换造型(墙=灰块、取餐点=黄标、送餐点=绿标、空地=白格);生成一关 重置列表与变量;结算成绩 按得分给出"金牌/银牌/继续加油"评语。把脏活封进积木,主程序清爽好调试。
6. 广播解耦,逻辑与表现分离
专门放一个"播报员"角色,只监听广播说话:收到 [已取餐] 说"已取餐,餐箱+1",收到 [送达成功] 说"送达成功,+10 分",收到 [游戏结束] 说"本局得分 X,再来一局?"。这种"按钮只广播、角色各司其职"的写法,是蓝桥杯现场 90 分钟大题拿稳分的工程习惯。
四、运行效果
按下"开始游戏"后,机器人出现在厨房格,方向键走位:经过黄色取餐点餐箱 +1,开到绿色送餐点且餐箱有余时自动送达 +10;撞墙/撞边界扣 1 分并原地不动;右上角倒计时归零,播报员弹出本局成绩与奖牌等级。整套逻辑帧率稳定,关卡数据想加就加。

五、进阶挑战(Python 对照,吃透"最优路线")
图形化里玩家手动走,但如果要让机器人"自动算出最短配送路线",就进阶到算法层——这恰好是信息素养大赛算法应用赛项与蓝桥杯计算思维的延伸。下面是一段 Python 同构的广度优先搜索(BFS)最短路,帮机器人从厨房走到最近的送餐点:
from collections import deque
def bfs(next_step, start, target, walls):
# start/target: (row, col);walls: 障碍物集合
q = deque([start])
seen = {start}
dist = {start: 0}
dirs = [(-1, 0), (1, 0), (0, -1), (0, 1)]
while q:
r, c = q.popleft()
if (r, c) == target:
return dist[(r, c)] # 步数即最短距离
for dr, dc in dirs:
nr, nc = r + dr, c + dc
if (nr, nc) not in walls and (nr, nc) not in seen:
seen.add((nr, nc))
dist[(nr, nc)] = dist[(r, c)] + 1
q.append((nr, nc))
return -1 # 不可达
# 多送餐点时,按 BFS 距离从小到大贪心配送,就能逼近"最少步数送完"
把这段思路翻回积木:生成一关 时预计算每格到各送餐点的步数存进列表,机器人每取到一份餐就挑"最近且可达"的送餐点前往——这也是电子学会图形化四级"列表 + 算法"综合题的典型考法。
六、小结与互动
一个「校园智能送餐机器人」,把变量记录状态、列表承载地图、循环驱动主帧、条件判定碰撞与取送、自制积木复用、广播解耦表现六件套全练了一遍,同时覆盖了蓝桥杯 STEMA、全国青少年信息素养大赛、电子学会 Scratch 图形化考级三大赛事的高频图形化考点。
互动时间:你准备用这个项目冲哪个赛事?是刷蓝桥杯 11/22 的 STEMA 省考,还是冲电子学会 12 月图形化考级?评论区告诉我你的目标级别(一级/二级/三级/四级),我可以再出一篇对应难度的进阶拆解。也欢迎晒出你做的配送机器人截图,一起交流避坑!
关注「青少儿编程课堂」,备考季持续更新蓝桥杯 / 信息素养 / 电子学会考级同源图形化真题拆解。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 App 内打开,也可复制下方明文链接:
资料持续更新,关注获取最新分享。
网硕互联帮助中心




![P8699 [蓝桥杯 2019 国 B] 排列数|普及+-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/02/20260204231703-6983d36f1686d-220x150.png)

评论前必须登录!
注册