赛事锚点:第六届重庆市青少年STEAM科创大赛------「编程创意设计专项赛」(重庆市科协、市科技局、市大数据局、团市委、中科院重庆研究院共同主办,2026 年 7 月---12 月举办,线上报名 9 月 1 日---9 月 30 日,当前正处于报名与作品打磨窗口,其「编程创意设计专项赛」明确鼓励原创图形化/代码作品)。
引言
做图形化编程题,最怕「只会拖积木、不懂建模」。今天我们用一道带点小算法的原创项目题 校园连连看消除 ,把「列表、循环、条件、变量、自制积木、广播」六大考点串成一条完整链路。它的魅力在于:消消乐人人都玩过,但要让电脑判断「两块能不能连」,就绕不开路径搜索------这恰恰是图形化作品里最容易被忽视的逻辑核心。
下面这道原创题,既贴合重庆市 STEAM 科创大赛「编程创意设计专项赛」对原创性与完整度的要求,又能顺手练出比赛必备的计算思维。

一、题目与项目目标
【原创项目题】校园连连看消除
校园社团节要办一场「图标消消乐」小游戏。请你用图形化编程制作一个 m×n 的连连看棋盘:
- 棋盘里摆满了成对出现的校园图标(书本、铅笔、篮球、音符......),总数量为偶数;
- 玩家依次点击两块图标相同的格子;
- 若两块之间能用「不超过 2 个拐角(即最多 3 段直线)」的空路连起来,且路径上不被其他图标挡住,则两块消除;
- 消除所有图标即过关,进入下一关(棋盘更大、图标更多);
- 记录分数与用时,超时或无法继续则游戏结束。
核心目标: 用图形化积木实现「点击选择 → 路径判定 → 消除 / 失败 → 胜负结算」的完整闭环,并尽量把逻辑封装清楚、便于扩展多关卡。
二、核心考点拆解
| 考点 | 在本题中的落点 |
|---|---|
| 列表 | 用「列表的列表」或一维列表存棋盘每格的图标编号;单独建「图标池」列表存放可选图案 |
| 变量 | 分数、剩余秒数、关卡、选中状态、当前选中行/列、已消除对数、剩余可消对数 |
| 循环 | 主循环不断刷新画面;遍历棋盘判断胜负;判定连通时在 4 个方向做扩展搜索 |
| 条件 | 点击是否在棋盘内、该格是否还有图标、两块图标是否相同、路径是否 ≤2 拐角连通、是否过关、是否超时 |
| 自制积木 | 画棋盘、生成棋盘(难度)、判连通(r1,c1,r2,c2)、消除一对、重排棋盘、重置游戏(均可带参数) |
| 广播 | 开始游戏、选中第一块、选中第二块、配对成功、配对失败、过关、游戏结束 解耦各模块 |
三、解法与积木拆解
1. 数据建模:用列表当棋盘
把棋盘想象成一张表,每个格子存一个数字(0 表示空,1~K 表示第几种图标)。最直观的做法是用一维列表 棋盘,长度为 行×列,下标 i 对应的行列是 行 = i ÷ 列数、列 = i mod 列数。这样「取第几格」「遍历全部格子」都只要一个循环,特别适合图形化。
2. 生成棋盘:成对摆放
先准备图标池,再把图标编号两两一组随机塞进棋盘,保证总数是偶数、每种图标成对出现。一个实用技巧:先生成「每对两个相同数字」的数组,整体打乱后填入棋盘。
3. 点击与选中:广播解耦
- 第一次点击:把行/列存入「第一块」,广播
选中第一块; - 第二次点击:存入「第二块」,广播
选中第二块; - 在
选中第二块的处理里,用条件判断:图标相同吗?能连通吗?再决定广播配对成功还是配对失败。
把所有「点击后的判断」收拢到广播接收区,主程序只负责画和发信号,逻辑干净、好调试。
4. 关键算法:判连通(≤2 拐角)
这是本题的灵魂。连连看的连通规则是:两块之间能连,当且仅当存在一条由水平/垂直线段组成、拐角 ≤2、且中间不被占用格子挡住的路线。
判断分三类:
- 直连:同行或同列,中间全空 → 0 拐角,直接连通;
- 一拐角:存在一个「中转点」(r2,c1) 或 (r1,c2),使「第一块→中转点」与「中转点→第二块」都直连且中转点为空 → 1 拐角;
- 两拐角:枚举棋盘上每个空点作为「第一个拐角」,再看它到第二块能否一拐角连通(即中转点法再套一层)→ 2 拐角。
用文字讲清楚,再落地成图形化「自制积木
判连通」:它返回一个「能/不能」的布尔值,主逻辑只管「能就消除、不能就提示」。下面给出等价的 Python 思路,方便你对照积木逻辑:
python
def can_connect(board, r1, c1, r2, c2):
"""判断 (r1,c1) 与 (r2,c2) 能否 ≤2 拐角连通(board 中 0 表示空)。"""
rows, cols = len(board), len(board[0])
def empty(r, c):
return 0 <= r < rows and 0 <= c < cols and board[r][c] == 0
def line_ok(r1, c1, r2, c2):
# 同行或同列且中间全空(不含两端)
if r1 == r2:
step = 1 if c1 < c2 else -1
return all(empty(r1, c) for c in range(c1 + step, c2, step))
if c1 == c2:
step = 1 if r1 < r2 else -1
return all(empty(r, c1) for r in range(r1 + step, r2, step))
return False
# 0 拐角:直连
if (r1 == r2 or c1 == c2) and line_ok(r1, c1, r2, c2):
return True
# 1 拐角:两个中转点
for mr, mc in [(r2, c1), (r1, c2)]:
if empty(mr, mc) and line_ok(r1, c1, mr, mc) and line_ok(mr, mc, r2, c2):
return True
# 2 拐角:枚举每个空点作为第一拐角,再要求它到第二块可一拐角
for r in range(rows):
for c in range(cols):
if empty(r, c) and (r != r1 or c != c1):
for mr, mc in [(r2, c), (r, c2)]:
if empty(mr, mc) and line_ok(r, c, mr, mc) and line_ok(mr, mc, r2, c2):
return True
return False
5. 胜负与刷新:循环驱动
主循环里每帧检查 剩余可消对数:为 0 且棋盘还有图标时,自动 重排棋盘(洗牌)防止死局;棋盘全空则广播 过关。剩余秒数 每帧递减,归零广播 游戏结束。
四、运行效果
- 进入游戏:棋盘铺满成对图标,顶部显示分数、关卡、倒计时;
- 点击第一块高亮,点击第二块:能连则播放消除特效并加分,不能连则两块闪红后复原;
- 一关清空自动进入更大棋盘的下一关,分数累计;
- 倒计时归零或某关长时间无解(已自动重排仍卡住),弹出结算面板,展示最终分数与所用时间。

五、进阶玩法
- 提示功能:遍历所有格子对,找到一对可消的就用特效标出,给新手兜底;
- 洗牌保护 :每次重排后调用
判连通自检,确保至少存在一对可消,杜绝死局; - 计时挑战模式:把「剩余秒数」改成「本关限时」,逼出更紧凑的策略;
- 主题皮肤:用列表存多套图标池,过关后切换校园 / 太空 / 海洋主题;
- 撤销一步:用一个「历史栈」列表记录上一次消除,配对失误可回退;
- 跨语言对照 :把上面的
can_connect用 C++ 再写一遍,同一套逻辑在图形化与代码间互译,正是科创大赛看重的「计算思维迁移」。
六、小结与互动
这道题把「列表建模 + 循环遍历 + 条件判定 + 变量记账 + 自制积木封装 + 广播解耦」一次性练全,而判连通这一小段算法,正是普通消消乐作品和获奖作品的分水岭。如果你正在准备重庆市青少年 STEAM 科创大赛「编程创意设计专项赛」,不妨把它当作第一个练手项目。
今日互动: 你还希望我拆解哪类图形化原创题?是「迷宫寻路」「接水果」「打字游戏」还是「物理小实验模拟」?留言告诉我,下一篇就写它。也欢迎晒出你的连连看作品,一起打磨细节!
本文为原创图形化教学题解,赛事信息以主办方最新通知为准。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。