备考季正酣------第十八届蓝桥杯全国青少年智能科技创新实践活动(原蓝桥杯青少组)省级活动 2026 年 10---12 月正在全国铺开,8 座城市的省级线下测评已定档 11 月 7 日到 12 月 26 日,本届主题"星际拓荒纪元",程序设计组别中的图形化创意编程分初级(U10)与中级(U14),统一 90 分钟现场上机、个人独立完成;与此同时,中国电子学会 2026 年 12 月青少年软件编程(图形化)等级考试报名仍在进行(9/23---12/2 16:00,统考 12/13:一级 14:00--15:00、二/三/四级 8:30--10:00,全国测试 12/10 含图形化);全国青少年信息素养大赛 2026---2027 赛季也已进入报名与基础能力评估窗口,复赛 2027 年 5---7 月、总决赛 7---8 月,5 大主题赛项覆盖图形化。这三大标志性赛事的图形化考点高度重合,今天用一个原创项目「校园连连看」,把变量、列表、循环、条件、自制积木、广播六件套一次性串起来,一篇顶三篇备考。

一、题目与项目目标
项目主题:校园连连看(图形化配对消除游戏)
语文老师想做一个课堂记忆配对游戏:舞台铺满带图案的方块,玩家依次点两个"图案相同"的方块,只要它们之间的连线转折不超过 2 次、且中间经过的格子都是空的,就"连通"消除这一对;全部消除即过关。
玩法规则映射到考点:
- 棋盘用列表存每个格子的图案编号(0 表示已消除/空);
- 每个方块是一个克隆体,私有变量记"我的行/列/图案";
- 玩家点击触发选中,用变量记"选中格 1、选中格 2、选中数、分数、剩余对数、关卡、游戏状态";
- 循环驱动主循环逐帧重绘、扫描胜利;
- 条件判图案相同、能否连通、是否全部消除、是否误点自己;
- 自制积木封装"生成棋盘 / 能否连接 / 消除一对 / 判定胜利 / 重置一关";
- 广播解耦"开始 / 选中第一格 / 选中第二格 / 连接成功 / 连接失败 / 过关 / 重置"------逻辑与表现分离。
六件套一个不少,而且"能否连接"这个核心判定本身就是一道极好的赛场算法题。
二、核心考点拆解(六件套全包)
| 考点 | 在本项目中的落点 |
|---|---|
| 变量 | 选中行1/列1、选中行2/列2、选中数(0/1/2)、分数、剩余对数、关卡号、游戏状态(0等待/1进行/2结束) |
| 列表 | 棋盘行×列 存图案编号(0 空);克隆体创建时按"我的行×列数+我的列"写入对应下标 |
| 循环 | 主循环"重复执行"逐帧遍历所有克隆体重绘;生成棋盘时遍历成对放置;胜利扫描遍历全盘 |
| 条件 | 图案相同?中间格子全空?拐弯≤2?点击的是自己?剩余对数=0 胜利?误点已消除格拦截 |
| 自制积木 | 生成棋盘(关卡)、能否连接(行1,列1,行2,列2)、消除一对、判定胜利、重置一关、画棋盘 |
| 广播 | 开始·选中第一格·选中第二格·连接成功·连接失败·过关·重置;按钮只广播,管理员算逻辑,播报员只说话 |
三、解法与积木拆解
3.1 数据模型
- 列表
棋盘:长度 = 行 × 列,每个元素是该格的图案编号,0表示空(已消除)。下标换算:下标 = 我的行 × 列数 + 我的列。 - 克隆体私有变量 :
我的行 / 我的列 / 我的图案 / 是否存活(1/0)。每个克隆体"当绿旗被点击"时按自己的行列定位到舞台坐标,并显示对应图案造型。 - 全局变量 :
选中数(已经点了几块)、选中行1/列1/选中行2/列2、分数、剩余对数、关卡号、游戏状态。
3.2 生成棋盘(成对放置,保证可解)
关卡启动时,把"图案种类"成对地塞进一个清单,打乱后依次填进 棋盘 列表,再按清单逐格生成克隆体。成对放置 + 全盘可连通判定兜底,保证本局至少有解。
小技巧:生成后跑一遍"是否还有可消的一对",若无可消则原地重排,避免出现死局。
3.3 核心算法:能否连接(≤ 2 次转折)⭐
这是整个项目最值钱的部分,也是蓝桥杯 / 信息素养图形化复赛里常考的"路径搜索"思想。
规则 :两图案相同的方块,若能用一条"经过的格子全为空(已消除)或棋盘外"且"拐弯次数 ≤ 2"的折线连起来,即可消除。注意:路径允许绕到棋盘外圈(边界外视为可通行空格),所以两个贴边的方块可以直接在外围绕连。
判定三步法(适合积木实现,直观不易错):
- 0 转折(直连):起点与终点同行或同列,且中间所有格子全为 0 → 连通。
- 1 转折(L 形) :存在一个拐角格
c,c必须为空,且"起点→c"与"c→终点"都是直线、中间全空 → 连通。 - 2 转折(Z / U 形) :从起点沿所在行、列向四个方向"射线"延伸到第一个非空格之前(得到一整条可走空线,射线允许越过棋盘边界),对射线上每个空格
e,检查"e与终点能否 1 转折连通"(套用第 2 步);只要有一个e成立 → 连通。
自制积木 能否连接(行1,列1,行2,列2) 就按这三步依次判定,任一步成立即返回"真"。
3.4 选中与消除逻辑
- 点击克隆体 → 广播"选中第 N 格",管理员收到后:
选中数 = 0:记下第一格,选中数置 1,高亮;选中数 = 1:记下第二格,选中数置 2,先判"两格图案相同且不是同一格";- 相同且
能否连接为真 → 广播"连接成功",把两格棋盘值置 0、克隆体隐藏、剩余对数 -1、分数 +10、连击 +1; - 否则 → 广播"连接失败",取消高亮、
选中数复位 0。
- 相同且
- 防抖闸门 :
选中数 = 2期间忽略一切新点击,等本次判定结算完才允许下一轮,避免连点错乱。
3.5 胜利判定与重置
主循环每帧扫描:剩余对数 = 0 且 游戏状态 = 1 → 广播"过关",游戏状态 置 2,播报"全部消除,进入下一关"。重置一关 自制积木清盘、剩余对数 复位、重新 生成棋盘(关卡+1),难度随关卡提升(图案种类变多、行列变大)。
3.6 广播解耦(逻辑表现分离)
按钮 / 克隆体只负责"广播事件",真正的计算都在一个"游戏管理员"角色里完成,播报员角色只"听广播说话"。这样换皮肤、加音效、改文案都不会动核心逻辑------这正是三大赛事现场命题最看重的工程素养。
四、运行效果
- 开场:棋盘铺满彩色图案方块,提示"点击两个相同图案,连线不超过两次转折即可消除";
- 点第一块:高亮描边;点第二块:若可消,两块播放缩小/爆炸特效后消失,分数 +10,连击数跳动;
- 若不可消:短暂抖动提示,自动取消选中;
- 全部消除:撒花特效 + "过关"字幕,自动进入更难的一关;
- 状态栏实时显示分数、剩余对数、当前关卡。
五、进阶(把项目做厚,赛场更稳)
- 提示功能:遍历所有"图案相同且可连通"的方块对,找到一对就高亮闪烁(Python 同构见下)。
- 死局重排:每次消除后检测是否还有可消对,无则自动打乱剩余方块,避免卡死。
- 计时挑战 :加
剩余时间变量,限时内通关拿星;超时则结算本局成绩。 - 最短连通演示:在 Python 版里记录 BFS 父指针,回放出"最少转折"的连线,帮助孩子理解最优路径。
- 双人对战:左右分屏各一棋盘,比谁先清空,锻炼状态机与并发逻辑。
Python 同构对照(核心连通判定 BFS,带方向状态最稳):
python
def can_link(board, r1, c1, r2, c2, rows, cols):
"""board[r][c]==0 表示空,否则存图案编号。允许越界(边界外视为空,可绕行)。"""
def at(r, c):
if 0 <= r < rows and 0 <= c < cols:
return board[r][c]
return 0 # 棋盘外视为可通行空格
from collections import deque
dirs = [(-1, 0), (1, 0), (0, -1), (0, 1)] # 上 下 左 右
INF = 99
# dist[r][c][d] = 到达(r,c)且最后方向为 d 时的最小拐弯数
dist = [[[INF] * 4 for _ in range(cols)] for _ in range(rows)]
q = deque()
for d, (dr, dc) in enumerate(dirs):
nr, nc = r1 + dr, c1 + dc
if (nr, nc) == (r2, c2):
return True
if at(nr, nc) == 0: # 只有空格才能继续走
dist[nr][nc][d] = 0
q.append((nr, nc, d, 0))
while q:
r, c, d, turns = q.popleft()
for nd, (dr, dc) in enumerate(dirs):
nr, nc = r + dr, c + dc
if (nr, nc) == (r2, c2):
return True # 到达终点即成功,拐弯数已 ≤2
if at(nr, nc) != 0:
continue # 中间格必须为空
nt = turns + (1 if nd != d else 0)
if nt > 2:
continue # 超过两次转折,剪枝
if nt < dist[nr][nc][nd]:
dist[nr][nc][nd] = nt
q.append((nr, nc, nd, nt))
return False
def gen_board(rows, cols, kinds):
"""成对放置:凑够 rows*cols/2 对,打乱后填盘,保证可解。"""
import random
pair_count = (rows * cols) // 2
bag = []
while len(bag) < pair_count:
k = random.randint(1, kinds)
bag += [k, k]
random.shuffle(bag)
return [bag[i * cols:(i + 1) * cols] for i in range(rows)]
def has_move(board, rows, cols):
"""提示 / 死局检测:是否存在任意一对可连通的相同图案。"""
cells = {}
for r in range(rows):
for c in range(cols):
v = board[r][c]
if v == 0:
continue
for (r2, c2) in cells.get(v, []):
if can_link(board, r, c, r2, c2, rows, cols):
return True
cells.setdefault(v, []).append((r, c))
return False
把 can_link 的"状态 = 位置 + 方向 + 拐弯数"思路平移回图形化,就是 能否连接 自制积木里"射线 + 单转折"判定的算法内核------这就是典型的算法思维从文本编程向图形化迁移。
六、小结与互动
「校园连连看」用一个经典休闲玩法,把图形化六大考点(变量 / 列表 / 循环 / 条件 / 自制积木 / 广播)全部串起来,其中"≤2 转折连通判定"更是把路径搜索、状态剪枝这些算法思想自然带进图形化课堂,特别契合蓝桥杯青少组图形化、电子学会 Scratch 考级与全国青少年信息素养大赛的命题口味。
今日三赛锚点回顾 :
-
第十八届蓝桥杯(原青少组)省级活动 2026 年 10---12 月,8 城线下测评 11/7--12/26,主题"星际拓荒纪元",图形化 90 分钟现场上机;
-
中国电子学会 2026 年 12 月图形化考级报名 9/23--12/2 16:00,统考 12/13,全国测试 12/10;
-
全国青少年信息素养大赛 2026---2027 赛季复赛 2027 年 5---7 月、总决赛 7---8 月。
互动时间:你打算把连连看做成几行几列?图案用汉字、数字还是自绘造型?最想加"提示""计时"还是"双人对战"?评论区告诉我,下一篇可以专门拆解你选的进阶方向。也欢迎说说你在备赛蓝桥杯 / 信息素养 / 电子学会考级时遇到的图形化难题,一起拆解。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。