赛事锚点:全国青少年科技教育成果展示大赛(编程梦想家·图形化编程赛项)
题型:原创图形化项目题(五子棋人机对战)| 适配:图形化编程入门到进阶
引言
全国青少年科技教育成果展示大赛(简称"青科赛")由中国下一代教育基金会主办,是教育部公布的面向中小学生的全国性竞赛活动之一。其中的「编程梦想家」专项赛明确设有图形化编程赛项,评分以"步骤完整度 + 实际运行效果"为准,非常看重作品的趣味性、逻辑性与原创性。
今天我们就以一道贴合该赛项的原创图形化真题为例,拆解如何用图形化积木从零做出一个能人机对战的五子棋小游戏:玩家执黑先手,电脑执白自动落子,任意一方率先连成 5 子即获胜。下面从项目目标、核心考点、积木拆解到进阶挑战,一步步讲透。

一、项目目标(题目)
原创图形化项目 「校园五子棋人机对战」,要求实现:
- 采用 9×9(或进阶到 15×15)棋盘,交叉点为落子位;
- 玩家执黑先手,点击棋盘落子;电脑执白,按规则自动落子;
- 任意一方在横、竖、左斜、右斜四个方向率先连成 5 子即获胜;
- 棋盘下满仍无人连成 5 子,判平局;
- 提供「重新开始」按钮,可一键重置对局。
二、核心考点
| 考点 | 在本项目中的体现 |
|---|---|
| 列表 | 用一维列表 board(长度 81)记录 81 个交叉点的状态:0=空、1=黑、2=白 |
| 变量 | current(当前落子方)、winner(胜负标志)、turn(回合数)、aiX/aiY(电脑候选落子点) |
| 循环 | 遍历棋盘做五连判定;遍历候选点评估电脑落子得分 |
| 条件 | 落子合法性(必须是空位)、四方向连子计数、胜负与平局分支 |
| 自制积木 | 画棋盘、生成棋子(克隆体)、判五连、电脑落子、重置棋盘,每个动作封装成一个带参积木 |
| 广播 | 开始游戏 / 玩家落子 / 电脑落子 / 分出胜负 / 重开,解耦各个功能模块 |
三、解法拆解(积木 + 文字流程)
1. 数据建模
- 建立列表
board,长度 81,全部初始化为0。 - 新建克隆体角色「棋子」,给它两个私有变量 :
myColor(1 黑 / 2 白)和myIndex(所在交叉点序号 0~80)。 - 交叉点序号换算:第
r行第c列 →index = r * 9 + c。
2. 玩家落子流程
当舞台被点击时:
- 用鼠标坐标计算出「最近的交叉点」对应的
index; - 条件判断 :如果
board[index] = 0(该点为空)才允许落子,否则忽略点击; - 把
board[index]设为1,生成一枚黑色棋子克隆体,广播玩家落子; - 调用"判五连"积木,若黑方连成 5 子 → 广播
分出胜负,winner = 1。
3. 五连判定(重点)
思路:以刚落下的棋子为中心,向横、竖、主对角、副对角四个方向各延伸统计同色连续数,任一方向达到 5 即胜。下面给出对应的 Python 伪代码,逻辑可直接映射到图形化积木:
python
# board: 长度 81 的一维列表,0空 1黑 2白
# 方向:横(1,0) 竖(0,1) 主对角(1,1) 副对角(1,-1)
DIRS = [(1, 0), (0, 1), (1, 1), (1, -1)]
def check_win(board, index, color):
r, c = index // 9, index % 9
for dr, dc in DIRS:
cnt = 1 # 含当前落子
# 正方向延伸
nr, nc = r + dr, c + dc
while 0 <= nr < 9 and 0 <= nc < 9 and board[nr * 9 + nc] == color:
cnt += 1
nr += dr
nc += dc
# 反方向延伸
nr, nc = r - dr, c - dc
while 0 <= nr < 9 and 0 <= nc < 9 and board[nr * 9 + nc] == color:
cnt += 1
nr -= dr
nc -= dc
if cnt >= 5:
return True
return False
4. 电脑 AI(三档策略)
电脑落子不靠随机,而是按优先级决策,难度可随进阶逐步提升:
- 第一优先(进攻):遍历所有空位,若存在某点落白后能连成 5 → 直接落在该点;
- 第二优先(防守):遍历所有空位,若玩家在该点落黑后能连成 5 → 堵截该点;
- 第三优先( heuristic 评分):在已有棋子周围 8 邻域里,对每个候选空位打分------越靠近中心、相邻同色越多得分越高,选最高分点落子。
对应评分逻辑的 Python 伪代码:
python
def ai_move(board):
# 1) 自己能赢直接赢
for i in empties(board):
board[i] = 2
if check_win(board, i, 2):
return i
board[i] = 0
# 2) 否则堵玩家
for i in empties(board):
board[i] = 1
if check_win(board, i, 1):
board[i] = 0
return i
board[i] = 0
# 3) 否则选评分最高的邻域点
best, best_score = None, -1
for i in neighbor_empties(board):
s = score_point(board, i, 2) # 中心权重 + 连子数
if s > best_score:
best, best_score = i, s
return best
5. 重置对局
收到 重开 广播时:把 board 全部填回 0,删除舞台上所有「棋子」克隆体,把 current 设回玩家、winner 设回 0,回到黑方先手。

四、运行效果
- 打开程序,棋盘居中显示,提示"轮到你(黑方)";
- 玩家点击交叉点落下黑子,电脑几乎瞬间落下一枚白子;
- 一旦任意一方连成 5 子,屏幕中央弹出"黑方获胜 / 白方获胜",并高亮获胜的五连;
- 点击「重新开始」,棋盘清空,进入下一局;
- 棋盘下满无五连时,提示"平局"。
五、进阶挑战
- 升级 AI:引入更完整的评分函数(活四 > 冲四 > 活三 > 活二),让电脑学会"既要进攻也要防守";
- 悔棋功能:用历史列表记录每一步落子,支持玩家回退一步再走;
- 模式切换:增加"人机对战 / 双人对战"开关,满足不同练习场景;
- 禁手规则:为黑方加入"禁三三、禁四四、禁长连"规则,更贴近正规比赛;
- 棋盘扩容:把 9×9 升级到 15×15,并优化棋子渲染与判定性能。
六、小结与互动
这道题把列表存状态、变量记局面、循环做判定、条件分支、自制积木封装、广播解耦六大图形化核心考点串成了一条完整的项目线,正好对应青科赛编程梦想家图形化赛项"看运行、看逻辑"的评分取向。建议同学们先在 9×9 小棋盘把流程跑通,再逐步加 AI 与进阶功能。
👉 你最喜欢用五子棋练哪一个考点?或者你还想看哪种图形化真题拆解(接水果、闯关、答题......)?欢迎在评论区留言,下一篇就写它!
本文为原创图形化项目解析,非真实赛题原文,仅供练习参考。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。