引言
第十八届蓝桥杯全国青少年智能科技创新实践活动(原蓝桥杯青少组 STEMA 升级更名)省级活动正在 2026 年 10---12 月火热进行,8 城省级测评定档 11 月 7 日---12 月 26 日,本届主题为《星际拓荒纪元》。程序设计组 Scratch 分初级、中级,线下现场 80 分钟完成 3 道编程题,总分 800 分,裁判按运行效果客观评分。
与此同时,全国青少年信息素养大赛(教育部白名单,中国电子学会主办)图形化方向考纲强调逻辑思维与交互设计;电子学会 2026 年 12 月图形化考级(报名 9/23--12/2、12/13 统考)三级也明确要求列表、自制积木与条件判断的综合运用。
现场命题往往只给一个开放主题,要求限时做出"可运行、有交互、有 AI 对手"的完整作品。今天这道原创模拟题------校园井字棋人机对战,一道题把列表、循环、条件、变量、自制积木、广播六大考点全部用上,还能自然引出"如何让电脑不输"的博弈思维,是省赛前绝佳的综合练兵。

一、题目与项目目标
背景:星际拓荒小队的两名队员在舱内用一块 3×3 触控屏下井字棋(tic-tac-toe)打发时间。你要做一台"不会输"的棋艺教练机。
功能需求 :
-
棋盘 :画出 3×3 共 9 个格子,行号 1--3、列号 1--3;
-
落子 :玩家点击空格落"×",电脑自动落"○";
-
判定 :每次落子后判定胜 / 负 / 平局,并在舞台显示结果;
-
智能 :电脑不能随便乱下,要尽量不败(进阶可做到"永不输");
-
重开:一键清空棋盘再来一局。
二、核心考点
- 列表 :用 1 个一维列表
board(长度 9)记录 9 个格子的状态(0 空 / 1 玩家 / 2 电脑); - 变量 :
current(当前落子方)、winner(0 进行中 / 1 玩家胜 / 2 电脑胜 / 3 平局)、selected(选中的格子下标); - 循环:遍历 9 格重绘棋盘、遍历 8 条连线判定胜负;
- 条件:判断格子是否为空、是否轮到玩家、是否三连;
- 自制积木:封装"画棋盘""判胜负""电脑落子""重置"等;
- 广播:按钮只发广播(如"玩家落子""电脑思考""游戏结束"),由"裁判"角色统一处理逻辑,实现表现与逻辑分离。
三、解法拆解
(一)数据设计
board = [0,0,0,0,0,0,0,0,0]
下标 0--8 对应格子:
0 1 2
3 4 5
6 7 8
点击第 r 行第 c 列的格子,下标 = (r-1)*3 + (c-1)。
(二)胜负判定(8 条连线)
- 横:0-1-2、3-4-5、6-7-8
- 竖:0-3-6、1-4-7、2-5-8
- 斜:0-4-8、2-4-6
自制积木「判胜负」遍历这 8 组下标,若某组三格都等于同一非零值,则该方获胜;9 格全满且无胜者则为平局。
(三)电脑策略(让电脑不输)
初级版 按优先级落子:
-
自己能连三就落子取胜;
-
玩家能连三就堵截;
-
否则先占中心(4),再占角(0 / 2 / 6 / 8),最后占边。
这套"攻防 + 占位"规则在数学上能保证井字棋"至少不败",是蓝桥杯中级评分里非常加分的"策略可见效"。
(四)逻辑与表现分离
把"落子""判定""电脑思考"拆成广播事件:玩家角色只负责点哪格发广播,裁判角色听广播改 board、重绘、判胜负、决定电脑落子。这样代码清晰、易调试,也是电子学会考级三级"事件与广播"考点的标准练法。
四、运行效果
- 玩家点空格,"×"出现,广播"玩家落子";
- 裁判判空、判胜负,未结束则广播"电脑思考";
- 电脑按攻防占位规则落"○",再判胜负;
- 出现三连则高亮连线并显示"你赢了 / 电脑赢了",满盘无连则"平局";
- 点"再来一局"广播"重置",
board清零重画。
五、进阶(把作品从"能玩"做到"难赢")
1. 完美 AI:用极小化极大(Minimax)算法让电脑在 3×3 井字棋上"永不败"。Python 参考如下:
python
# 井字棋 Minimax 完美 AI(电脑执 2,玩家执 1)
WIN_LINES = [
[0, 1, 2], [3, 4, 5], [6, 7, 8],
[0, 3, 6], [1, 4, 7], [2, 5, 8],
[0, 4, 8], [2, 4, 6]
]
def winner(board):
for a, b, c in WIN_LINES:
if board[a] and board[a] == board[b] == board[c]:
return board[a]
return 0 if 0 in board else 3 # 0=进行中, 3=平局
def minimax(board, turn):
w = winner(board)
if w == 2:
return 1 # 电脑赢
if w == 1:
return -1 # 玩家赢
if w == 3:
return 0 # 平局
best = -10 if turn == 2 else 10
for i in range(9):
if board[i] == 0:
board[i] = turn
val = minimax(board, 3 - turn)
board[i] = 0
best = max(best, val) if turn == 2 else min(best, val)
return best
def best_move(board):
move, best = -1, -10
for i in range(9):
if board[i] == 0:
board[i] = 2
val = minimax(board, 1)
board[i] = 0
if val > best:
best, move = val, i
return move
把这段思路平移到图形化:用一个"评估当前局面对电脑有多好"的自制积木替代函数调用,逐格试落、递归评估,就能让电脑做出最优解------这正是蓝桥杯"算法应用"与全国青少年信息素养大赛"计算思维"方向共同看重的点。
2. 难度档位 :初级 = 随机 / 占位,中级 = 一步攻防,高级 = Minimax 完美防守;
3. 扩展棋盘 :4×4 连四胜(连线判定改为 4 连,递归深度增加,体验分更高);
4. 双人对战 + 悔棋 :增加"当前局历史栈"支持撤销;
5. 跨设备联机 :用云变量把 board 同步到两台设备,做成真正的"异地对弈"。
六、小结与互动
校园井字棋人机对战用最少的元素覆盖了图形化编程全部核心考点,又顺带把"博弈树 / Minimax"这颗算法种子种了下去。无论你是备战第十八届蓝桥杯程序设计组 Scratch、冲刺全国青少年信息素养大赛图形化方向,还是打磨电子学会 12 月图形化考级三级,它都是一道值得反复练的母题。
你在井字棋里还想过什么有趣的玩法?是加"悔棋"、做"联机对战",还是挑战 4×4 连四?欢迎在评论区聊聊,也可以把你的作品链接发来一起交流~
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。