引言
图形化编程比赛最看重的,不是你会多少"高级"积木,而是能不能把一个完整的小游戏拆解成「数据 → 循环 → 条件 → 积木 → 广播」这五样东西。本期我们以温州市第十七届青少年创意大赛·创意编程竞赛(Scratch 图形化赛项) 为锚点,原创一道经典又出彩的真题改编题------校园弹珠迷宫,带你把重力滚球的小游戏做扎实。
赛事背景:温州市第十七届青少年创意大赛由团市委、市教育局、市科技局、市少工委联合主办,温州市青少年活动中心承办,其中"创意编程竞赛"明确采用 Scratch2.0 / Scratch3.0,要求围绕主题现场完成互动故事、动画或小游戏。报名窗口 10 月 9 日---14 日开启,正式比赛 11 月 5 日---8 日举行,正是备赛黄金期。

一、题目与项目目标
【原创真题改编】校园弹珠迷宫
设计并制作一个"重力迷宫"小游戏:玩家通过方向键倾斜迷宫面板,让一颗弹珠从起点滚向终点。途中要避开墙体和陷阱洞,若弹珠落入洞中或卡死则本关失败,需在限定时间内到达终点才算通关。
项目目标(评分要点)
- 迷宫由多关卡组成,每关墙体布局不同;
- 弹珠受"重力 + 倾斜"影响产生加速度,运动连续自然;
- 撞墙能反弹、落洞判失败、到终点判过关;
- 界面有分数 / 关卡 / 计时,支持重开;
- 作品有开始与结束按钮,结构完整。
这道题几乎把图形化编程五大核心考点全部考了一遍,是现场赛里非常稳的选题。
二、核心考点(图形化编程五大能力)
| 考点 | 在本题中的体现 |
|---|---|
| 列表 | 用一维/二维列表存储迷宫地图(0 通路、1 墙、2 洞、3 起点、4 终点) |
| 变量 | 小球 x/y 坐标、vx/vy 速度、倾斜角、关卡号、状态、剩余时间 |
| 循环 | 主循环每帧刷新小球坐标、遍历迷宫格子做碰撞检测 |
| 条件 | 判撞墙反弹、落入洞失败、到达终点过关、超时结束 |
| 自制积木 + 广播 | 封装"画迷宫 / 生成墙 / 生成洞 / 重置 / 过关庆祝";用广播解耦开始、失败、过关、重置 |
三、积木拆解与解题思路
1. 数据与状态:列表 + 变量
先建一个列表 迷宫地图,把每关的格子按顺序存成一维串(例如 101010...),再用「序号 ÷ 列数」算出行列坐标。这样换关卡只需换一条列表,关卡数据和维护成本极低。
关键变量:
小球x小球y:弹珠在舞台上的位置;vxvy:当前速度;倾斜角:方向键按下时给一个加速度方向;关卡:当前第几关;状态:0 准备 / 1 进行中 / 2 失败 / 3 过关;剩余时间:倒计时。
2. 主循环与小球物理运动
核心逻辑放在"当绿旗被点击"后的 重复执行 里,每帧做四步:
- 施加重力与倾斜加速度 :
vx = vx + 倾斜角加速度,vy = vy + 重力; - 更新坐标 :
小球x = 小球x + vx,小球y = 小球y + vy; - 限速与阻尼:速度过大时乘一个摩擦系数,避免弹珠乱飞;
- 碰撞检测:取出小球所在的格子,判断是墙、洞还是终点。
这部分是整道题的灵魂,物理感做得越自然,评委印象分越高。
3. 条件判定:撞墙、落洞、过关
用 如果...那么 分三类处理:
- 撞墙:若下一步落点格子是"墙",把对应方向速度反向并乘 0.6(反弹衰减),弹珠贴墙滑动;
- 落洞 :若落点格子是"洞",广播
落洞,状态置为 2,播放失败音效; - 到终点 :若落点格子是"终点",广播
过关,状态置为 3,记录用时并弹庆祝。
同时还要判断 剩余时间 ≤ 0 → 广播 游戏结束。
4. 自制积木与广播解耦
把重复工作封装成带参数的自制积木,代码立刻清爽:
画迷宫(关卡):按列表画出墙与洞的角色排布;生成墙生成洞:用克隆体批量生成障碍;重置关卡:清空状态、复位小球、重置计时;过关庆祝:撒花 + 显示用时。
广播用来解耦各模块:开始 → 重置并切状态;落洞 / 过关 → 触发对应结算;重置 → 回到准备态。这样逻辑彼此独立,调试和扩展都方便。

四、运行效果与评分要点
现场演示时,建议按这个顺序走一遍,评委一眼就能看懂你的设计:
- 点击开始 → 迷宫生成、小球出现在起点;
- 按方向键倾斜面板,弹珠顺重力滚动;
- 撞墙自然反弹,落洞立即失败并可重开;
- 成功抵达终点 → 撒花 + 显示"第 N 关通关,用时 X 秒";
- 倒计时归零 → 提示"时间到,再试一次"。
加分细节:给弹珠加一条短拖尾(克隆体残留半透明),运动轨迹更直观;不同关卡用不同配色,视觉更丰富。
五、进阶拓展(重力迷宫算法思路 + Python 参考)
想再拔高一点,可以把"自动寻路"作为进阶展示:给定迷宫,让弹珠(或提示箭头)自动找到通往终点的最短路径。本质是一个 BFS 在网格上求最短路,下面给出核心 Python 参考:
python
from collections import deque
def shortest_path(maze, start, end):
"""maze: 二维列表,0 通路 / 1 墙;返回从 start 到 end 的最短步数。"""
rows, cols = len(maze), len(maze[0])
sx, sy = start
dist = [[-1] * cols for _ in range(rows)]
dist[sx][sy] = 0
q = deque([(sx, sy)])
for dx, dy in ((-1, 0), (1, 0), (0, -1), (0, 1)):
while q:
x, y = q.popleft()
for dx, dy in ((-1, 0), (1, 0), (0, -1), (0, 1)):
nx, ny = x + dx, y + dy
if 0 <= nx < rows and 0 <= ny < cols:
if maze[nx][ny] == 0 and dist[nx][ny] == -1:
dist[nx][ny] = dist[x][y] + 1
q.append((nx, ny))
return dist[end[0]][end[1]] # -1 表示不可达
把这个思路搬回图形化,就是"判定可达性 + 高亮最短路线",评委看到这里基本就给高分了。
六、小结与互动
一道"校园弹珠迷宫",把列表建图、变量记状态、循环驱动物理、条件做判定、自制积木与广播解耦五样考点串成一条完整作品线。备赛温州市创意编程竞赛的同学,完全可以把这个当模板,换主题(太空迷宫、校园逃生迷宫、动物找家迷宫)就能快速出新品。
你在图形化比赛里最怕哪类题? 是物理运动做不自然,还是多关卡切换总乱?留言告诉我,下期挑一个最常被问到的痛点,专门拆解给你看。
觉得有用就点个赞 + 收藏,关注我,持续更新少儿编程比赛原创真题与图形化解法。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。