引言
最近多地创意编程活动正进入作品提交季,比如南京市秦淮区"第三届小学信息科技创意编程活动"(8月31日前提交,编程方向主题为"智慧生活"),图形化赛项鼓励低龄段同学用积木做出能解决真实问题的互动作品。这一类赛题最看重的,不是特效多炫,而是有没有把"数据组织 + 流程控制"想清楚。
今天我们就用一个贴近生活的原创项目------智能交通灯调度台,把列表、循环、条件、变量、自制积木、广播这六大考点,串进一个能跑起来的作品里。无论你是备赛图形化赛项,还是刚学完基础积木想练手,都能照着做出自己的版本。

一、项目目标(题目)
模拟一个十字路口:东西向与南北向两条车流轮流通行;红绿灯按固定秒数自动切换;统计每个方向已经通过的车辆数;用克隆体表现排队等待的车流。
把题目拆成可验收的小目标:
-
红绿灯能自动在"东西通行 / 南北通行"之间来回切换,每次持续固定秒数;
-
车辆以克隆体形式不断"来车",在停止线前排队;
-
只有当前放行方向、且位于停止线前的车才能前进通过路口;
-
每个方向通过的车辆数实时累加并显示;
-
灯色变化、车辆通行、计数更新三者互不硬耦合(用广播解耦)。
二、核心考点
| 考点 | 在本项目里的落点 |
|---|---|
| 变量 | 当前灯色、倒计时、东西通行计数、南北通行计数、方向(私有) |
| 列表 | 用两个列表分别存"东西方向等待车辆编号"和"南北方向等待车辆编号",实现排队队列 |
| 循环 | 控制器"倒计时"用「重复执行 + 等待1秒」做秒级流逝 |
| 条件 | 判断当前灯色决定下一步切到哪边;判断克隆体是否轮到自己方向、是否在停止线前 |
| 自制积木 | 封装「画灯(灯色)」「生成一辆车(方向)」,避免重复堆积木 |
| 广播 | 控制器广播"东西通行 / 南北通行",车辆与音效角色被动响应,互不直连 |
这六点几乎覆盖了图形化赛项 80% 的评分维度:能稳定用到变量和列表,基本就过了"会用数据"这一关;会用广播和自制积木,则是"代码结构清晰"的加分项。
三、角色与舞台规划
- 红绿灯控制器:舞台中央或上方,只负责"计时 + 切灯 + 广播",不碰任何车辆逻辑;
- 车辆(克隆体) :同一造型克隆出东西/南北两路车,靠私有变量
方向区分归属; - 计数显示:用两个变量分别显示"东西已通行 N 辆 / 南北已通行 M 辆";
- (可选)音效角色:收到广播后播放"嘀"声,纯装饰。
设计要点:控制器和车辆不直接说话,全部通过广播沟通。这样你后面想加行人按钮、加黄灯,都不会把代码改崩。
四、解法拆解
1. 红绿灯控制器(主控角色)
需要 4 个变量:当前灯色、倒计时、东西计数、南北计数,初始:
当前灯色= "东西绿",倒计时= 5(每次放行 5 秒);
核心积木逻辑(文字描述,对应图形化积木顺序):
当 ⚑ 被点击:
设置 [当前灯色] = "东西绿"
设置 [倒计时] = 5
重复执行:
重复 [倒计时] 次:
等待 1 秒
将 [倒计时] 增加 (-1)
如果 <(当前灯色) = "东西绿"> 那么:
设置 [当前灯色] = "南北绿"
设置 [倒计时] = 5
广播 [南北通行]
否则:
设置 [当前灯色] = "东西绿"
设置 [倒计时] = 5
广播 [东西通行]
这里外层的"重复执行"是死循环(一直调度),内层的"重复 N 次 + 等待1秒"才是真正的倒计时------这是初学者最容易写错的地方:把等待直接放在死循环里,灯就再也不会切了。
2. 车辆(克隆体队列)
用一个列表当作"排队队列"。以东西方向为例:
当 ⚑ 被点击:
将 [东西队列] 的全部项目删除
重复执行:
等待 (1.5) 秒
将 (队列长度+1) 加入 [东西队列]
生成一辆车(方向="东西")
当作为克隆体启动时:
设置 [方向] = "东西" // 私有变量,区分东西/南北车
移到 (东西排队点 x, y)
重复执行:
如果 <<收到广播 [东西通行]> 且 <碰到 [停止线]>> 那么:
重复执行直到 <越过路口>:
移动 (3) 步
将 [东西计数] 增加 (1)
删除这个克隆体
南北方向是同一套逻辑、换一个列表和广播名即可。注意:"方向"必须是克隆体的私有变量,否则所有克隆体会共享同一个值,排队就乱套了。
3. 自制积木:把重复活封装掉
把"画一盏灯"和"生成一辆车"分别做成带参数的自制积木,能少写大量重复积木:
画灯(灯色):清空灯盘 → 按灯色点亮对应颜色(绿/黄/红);生成一辆车(方向):在对应排队点克隆一个车辆造型。
封装后,主逻辑只剩"调度 + 广播",可读性直线上升,评委一眼能看出你的结构意识。
4. 广播解耦(关键设计)
控制器只负责 广播 [东西通行] / 广播 [南北通行];车辆、音效、计数显示都"听到广播再行动"。好处是:
-
想加"黄灯过渡",只需在控制器里多广播一个
[切换中],别处加响应即可; -
想改放行时长,只动控制器,车辆逻辑零改动。
这就是图形化项目里的"低耦合"思维,也是从"能跑"到"写得好"的分水岭。

五、运行效果
绿旗一点,路口开始工作:
-
东西向绿灯亮起,东西方向排队的车一辆接一辆通过,左上角"东西已通行"数字跳动;
-
5 秒后灯色切到南北绿,南北车流启动,东西车老实停在停止线前;
-
如此往返,两条车流互不抢道,计数各自累加,画面干净、逻辑清晰。
把它录成 30 秒演示视频,配一句"本作品用广播解耦三要素、用列表维护双队列",就是一份能直接交到赛项评审手里的完整作品。
六、进阶挑战(赛项冲奖用)
- 行人请求按钮:按下"行人过街",当前绿灯走完后插入一次"全红 + 行人通行"状态;
- 黄灯过渡:绿灯结束先亮 2 秒黄灯再切,更接近真实路口;
- 车流统计条形图:用"图章"或"画笔"把东西/南北通行量画成对比柱状图;
- 多路口联动:把控制器做成可复制的角色,两条街的灯错峰放行,考验列表与广播的协同;
- 随机车流 + 传感器:用随机数模拟"哪边车多",车多的一侧自动延长放行时间------这就从"定时调度"升级成了"自适应调度"。
如果你想从图形化过渡到代码思维,这段调度循环本质就是一个状态机,用几行代码也能表达同样的逻辑:
python
light, timer, ew, ns = "E", 5, 0, 0
while True:
for _ in range(timer):
pass # 等待 1 秒
if light == "E":
light, timer, ns = "N", 5, ns + north_pass()
else:
light, timer, ew = "E", 5, ew + east_pass()
能看出来吗?图形化的"重复执行 + 等待",在代码里就是 for _ in range(timer);图形化的"广播",对应代码里的一次函数调用。两种语言说的是同一件事。
七、小结与互动
一个智能交通灯调度台,把**变量(灯色/计时/计数)、列表(双队列)、循环(倒计时)、条件(切灯/放行判断)、自制积木(画灯/生车)、广播(解耦三要素)**全串了一遍。它不难,但足够"真"------真实路口就是这么调度的。
今日小作业:给你的调度台加一个"车多延时"逻辑,让车多的方向多放 3 秒,把你的做法写在评论区,我们一起看谁的更稳。
如果这篇对你备赛图形化赛项有帮助,记得点个赞收藏,下一期我们用"垃圾分类机器人"再讲一遍列表与克隆体的高级用法。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。