备考季又到关键节点------第十八届蓝桥杯 STEMA 11 月省考报名将于 11 月 9 日 16:00 截止 (Scratch 组 11 月 22 日 10:00--11:30 开考,90 分钟),中国电子学会 2026 年 12 月图形化考级报名 9 月 23 日---12 月 2 日、统考 12 月 13 日 ,全国青少年信息素养大赛 2026---2027 赛季也已进入报名 / 基础能力评估窗口(复赛 2027 年 5---7 月、总决赛 2027 年 7---8 月)。这三大标志性赛事的图形化考点高度重合:列表、循环、条件、变量、自制积木、广播"六件套"几乎必考。今天用一个原创项目「校园黑白棋人机对战」,把这六件套一次性串起来,一篇顶三篇备考。
一、项目目标(原创题)
在 8×8 的棋盘上实现黑白棋(Reversi / 奥赛罗)人机对战:
- 黑棋先手,玩家执黑、电脑执白;
- 点击空格落子,若能在 8 个方向中的任意一条上"夹住"对方棋子,则把被夹住的棋子全部翻转成己方颜色;
- 若无任何合法落子点则自动跳过回合(连续双方无步可走则终局);
- 棋盘填满或双方均无步可走时,按子数多者获胜;
- 电脑采用"贪心 + 位置权重"策略,能避开角旁、抢占角点。
这个项目把"数据用列表存、规则用循环判、状态用变量管、复用逻辑用自制积木、模块解耦用广播"讲得明明白白,正是三大赛事图形化组的高频考点。
二、核心考点(六件套对照)
| 考点 | 在本项目中的落点 |
|---|---|
| 列表 | 棋盘 一维列表存 64 格状态:0 空 / 1 黑 / 2 白 |
| 变量 | 当前回合(1 黑 / 2 白)、黑子数、白子数、胜者、游戏状态、连续跳过 |
| 循环 | 遍历 8 个方向向量、遍历 64 格重绘棋盘、遍历所有候选点找合法落子 |
| 条件 | 落子是否合法(至少一个方向能夹子)、翻转边界、终局判定、胜负比对 |
| 自制积木 | 画棋盘、判合法落子(行,列,颜色)、翻转(行,列,方向)、电脑落子、重置一局、判定胜负 |
| 广播 | 开始游戏 / 玩家落子 / 电脑思考 / 游戏结束 / 重置,逻辑与表现分离 |
提示:图形化考级(尤其是电子学会三级、四级)很喜欢考查"列表当二维数组用"和"自制积木带参数",黑白棋两者都覆盖。
三、解法拆解(文字流程 + 积木思路)
3.1 初始化棋盘
用一维列表 棋盘 长度 64,下标 = 行×8 + 列。开局只在中心四格放子:
棋盘[27] = 2(白)、棋盘[28] = 1(黑)棋盘[35] = 1(黑)、棋盘[36] = 2(白)
然后调用 画棋盘 克隆体画出 64 格与棋子,并广播 开始游戏。
3.2 判合法落子(核心积木)
自制积木 判合法落子(行 r, 列 c, 颜色 my):
-
若
棋盘[r*8+c]非空,直接返回"不合法"; -
定义 8 个方向向量
(dr,dc)∈ {(-1,-1),(-1,0),...,(1,1)}; -
对每个方向,沿该方向一格格走:遇到"对方颜色"就继续,遇到"己方颜色"且中途至少夹了 1 颗对方子 → 该方向合法;遇到空格或越界则否决该方向;
-
任一方向合法即整体合法。
伪代码(文字流程):
合法 = 假
若 棋盘[r8+c] ≠ 0: 返回 假
对 每个方向(dr,dc):
x=r+dr, y=c+dc, 夹住=0
当 在界内 且 棋盘[x8+y]=对方色:
x+=dr, y+=dc, 夹住+=1
若 在界内 且 棋盘[x*8+y]=my 且 夹住>0:
合法 = 真
返回 合法
3.3 翻转棋子
翻转(行 r, 列 c, 颜色 my):对每个"刚才判定合法"的方向,把该方向夹住的对方子依次改成 my,并同步更新 黑子数 / 白子数。
3.4 电脑落子(基础版)
电脑落子 遍历全部 64 格,用 判合法落子 筛出所有合法点,选"翻转数最多"的那个落子(平局时可加随机或位置权重)。落子后翻子、切换 当前回合,再广播 玩家落子 把控制权交还玩家。
3.5 终局与胜负
每次落子后检查:若玩家和电脑都"无合法落子",广播 游戏结束。判定胜负 比较 黑子数 / 白子数:多者胜,相等则平局,并把结果写进 胜者 变量;播报角色只听广播说话,实现逻辑与表现分离。
四、运行效果
- 玩家点击空格 → 合法则"啪"地翻转一片白子,分数实时变化;
- 电脑思考 0.5 秒后落子,会优先抢角、避开危险格;
- 一方无步可走时自动 pass,HUD 提示"对方跳过";
- 终局弹窗显示"黑棋 X : Y 白棋,你赢了 / 惜败 / 平局",并可一键
重置一局再来。
五、进阶(提分点)
- 位置权重表:给 8×8 每格打分(角 +100、邻角 -25、边 +10、普通 +1),电脑改用"权重最高"而非单纯"翻最多",棋力明显上升。
- Minimax 搜索:向前看 2--4 层,对手模拟"最优应对",自己选"最坏情况下最好"的落子。图形化里可用"递归自制积木 + 列表存棋盘快照"实现。
- 合法步高亮:轮到玩家时,用浅色框标出所有可落子点,体验更好,也顺带考查"条件 + 克隆体"配合。
- 悔棋 / 复盘:用第二个列表把每步前的棋盘备份,点击"悔棋"还原上一快照。
下面给出一段 Python 同构对照,帮助理解"列表存盘 + 八方向翻转 + 贪心 AI"的核心算法(图形化积木和这段代码逻辑一一对应):
python
# 校园黑白棋核心算法(Python 同构对照)
EMPTY, BLACK, WHITE = 0, 1, 2
DIRS = [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]
def opponent(c):
return WHITE if c == BLACK else BLACK
def in_board(r, c):
return 0 <= r < 8 and 0 <= c < 8
def legal_moves(board, me):
"""返回所有合法落子下标列表"""
opp = opponent(me)
moves = []
for i in range(64):
if board[i] != EMPTY:
continue
r, c = divmod(i, 8)
ok = False
for dr, dc in DIRS:
x, y, cnt = r + dr, c + dc, 0
while in_board(x, y) and board[x*8+y] == opp:
x += dr; y += dc; cnt += 1
if in_board(x, y) and board[x*8+y] == me and cnt > 0:
ok = True; break
if ok:
moves.append(i)
return moves
def flip(board, i, me):
"""在 i 落 me 色,翻转所有被夹住的对方子,返回翻转数"""
opp = opponent(me)
r, c = divmod(i, 8)
board[i] = me
total = 0
for dr, dc in DIRS:
x, y = r + dr, c + dc
path = []
while in_board(x, y) and board[x*8+y] == opp:
path.append(x*8+y); x += dr; y += dc
if in_board(x, y) and board[x*8+y] == me:
for p in path:
board[p] = me; total += 1
return total
def greedy_ai(board, me):
"""贪心:选翻转数最多的合法点;平局取位置权重最高"""
WEIGHT = [120,-20,20,5,5,20,-20,120,
-20,-40,-5,-5,-5,-5,-40,-20,
20,-5,15,3,3,15,-5,20,
5,-5,3,3,3,3,-5,5,
5,-5,3,3,3,3,-5,5,
20,-5,15,3,3,15,-5,20,
-20,-40,-5,-5,-5,-5,-40,-20,
120,-20,20,5,5,20,-20,120]
best, best_key = None, (-1, 0)
for i in legal_moves(board, me):
b2 = board[:]
n = flip(b2, i, me)
key = (n, WEIGHT[i])
if key > best_key:
best, best_key = i, key
return best
# 演示一局:黑先手,白用贪心 AI
board = [EMPTY] * 64
board[27], board[28], board[35], board[36] = WHITE, BLACK, BLACK, WHITE
turn = BLACK
while True:
mv = legal_moves(board, turn) if turn == BLACK else [greedy_ai(board, turn)]
if not mv:
if not legal_moves(board, opponent(turn)):
break
turn = opponent(turn); continue
flip(board, mv[0], turn)
turn = opponent(turn)
black = board.count(BLACK); white = board.count(WHITE)
print(f"终局 黑 {black} : {white} 白 -> {'黑胜' if black>white else '白胜' if white>black else '平局'}")
把这段逻辑平移到图形化里,就是把 board 换成 棋盘 列表、flip 换成 翻转 自制积木、greedy_ai 换成 电脑落子 积木,其余循环与条件完全一致。
六、小结与互动
黑白棋把"列表当棋盘、循环扫八方向、条件判夹子、自制积木封装翻转、广播解耦对局流程"串成了一个完整可玩的工程项目,既是蓝桥杯青少组图形化省考的练兵好题,也高度贴合电子学会图形化考级与全国青少年信息素养大赛的考点。建议先把"基础贪心 AI"版跑通,再挑战"位置权重 / Minimax"进阶,逐步逼近赛场满分标准。
互动时间:你希望下一篇拆解哪个图形化项目?欢迎在评论区留言------点赞最高的方向,我们下一期就写。也欢迎分享你用黑白棋练手时踩过的坑,一起避坑提分!
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。