一、引言
蓝桥杯全国青少年智能科技创新实践活动(第十八届起由原"蓝桥杯青少组"升级更名,省级活动 2026 年 10---12 月进行中、全国级活动 2027 年 4 月举办,主题"星际拓荒纪元")的程序设计组别里,图形化(Scratch 方向)始终是最热门的赛道之一;与此同时,全国青少年信息素养大赛算法应用主题赛(图形化方向)、电子学会 2026 年 12 月软件编程等级考试(图形化科目,报名 9/23 已开启、12/13 开考)也都在密集备考期。
这三类标志性赛事的图形化考题,有一个共同偏好:把"列表 + 循环 + 条件 + 变量 + 自制积木 + 广播"六大核心考点,塞进一个能跑起来的小游戏里。本期带来一道原创图形化项目「校园飞机大战」,正好把上述考点串成完整闭环,适合用来练手与复盘。
二、项目目标(原创题)
玩家操控一架校园战机,用左右方向键移动,空格发射子弹消灭不断从顶部落下的敌机;子弹击中敌机得分,敌机撞到战机或越过底线则损失生命,生命耗尽游戏结束;限时内击落越多分数越高。
核心需求拆解:
- 战机左右移动,并做左右边界判定;
- 空格发射子弹(用克隆体实现,向上飞行);
- 敌机持续从顶部生成并下落(每个克隆体用私有变量记速度与坐标);
- 子弹与敌机做碰撞判定,命中即得分;
- 敌机撞到战机、或敌机越过底线,扣减生命;
- 60 秒倒计时,归零或生命耗尽触发结算;
- 用广播把"发射 / 击落 / 被撞 / 结束"解耦,做到逻辑与表现分离。
三、核心考点
- 列表(Lists):登记场上敌机编号、得分记录等,便于遍历碰撞与统计;
- 循环(Loop):主循环实时刷新战机位置、生成敌机、检测碰撞;
- 条件(If):边界、碰撞、越线、游戏状态(进行中 / 结束)的判定;
- 变量(Variables):坐标、分数、生命、剩余时间、状态闸门;
- 自制积木(My Blocks):把"生成敌机 / 发射子弹 / 检测碰撞 / 结算"封装成带参数的积木,代码更清晰;
- 广播(Broadcast):开始游戏、击落敌机、被撞、游戏结束、结算,各模块只听广播办事。
四、积木拆解(解法)
1. 角色与数据结构
- 战机角色 :用变量
x控制左右,方向键改x; - 敌机克隆体:私有变量「我的速度」「我的血量」「我的x」;
- 子弹克隆体:私有变量「我的x」「我的y」;
- 列表
敌机列表:记录场上敌机编号,用于碰撞遍历。
2. 主循环(战机控制 + 边界)
当 ⚑ 被点击
设置 [状态 v] = [进行中]
重复执行:
如果 <按下 [左移 v] 键?> 那么 将 x 改变 (-8)
如果 <按下 [右移 v] 键?> 那么 将 x 改变 (8)
如果 <(x) < (-220)> 那么 将 x 设为 (-220) // 左边界
如果 <(x) > (220)> 那么 将 x 设为 (220) // 右边界
如果 <按下 [空格 v] 键?> 那么 广播 [发射子弹 v] 并等待
end
3. 敌机生成(自制积木,带参数)
定义 生成敌机 (速度)
创建 敌机 的克隆体
// 以下在「敌机」角色「当作为克隆体启动时」执行:
将 [我的速度 v] 设为 (速度)
将 x 设为 (在 (-200) 到 (200) 间随机选一个数)
将 y 设为 (180)
重复执行:
将 y 改变 (我的速度 * -1) // 向下落
如果 <(y) < (-160)> 那么
广播 [敌机越线 v] 并等待
删除此克隆体
end
end
4. 碰撞判定(自制积木,遍历敌机)
定义 检测碰撞 (子弹x) (子弹y)
重复执行 (敌机数量) 次:
如果 <<(abs(子弹x - 敌机x)) < (30)> 且 <(abs(子弹y - 敌机y)) < (30)>> 那么
广播 [击落敌机 v] 并等待
将 [分数 v] 改变 (10)
删除此克隆体
end
end
5. 广播解耦(逻辑与表现分离)
- 广播
发射子弹→ 子弹角色收到后克隆自己、向上飞; - 广播
击落敌机→ 敌机角色播放爆炸特效、加分; - 广播
被撞→ 战机闪烁、生命 -1; - 广播
游戏结束→ 停止全部脚本、显示结算面板。
6. Python 逻辑对照(仅参考,正文中英文代码保留)
python
import random
class PlaneGame:
def __init__(self):
self.enemies = [] # 敌机列表
self.bullets = [] # 子弹列表
self.score = 0
self.lives = 3
self.time_left = 60
def spawn_enemy(self, speed):
self.enemies.append({"x": random.randint(-200, 200),
"y": 180, "speed": speed})
def hit(self, bx, by):
"""子弹 (bx,by) 与敌机矩形重叠则击落,返回是否命中"""
for e in self.enemies:
if abs(bx - e["x"]) < 30 and abs(by - e["y"]) < 30:
self.score += 10
self.enemies.remove(e)
return True
return False
# 每帧:敌机 y 减小模拟下落;越线 (y < -160) 则扣生命
这段代码与上面的图形化积木一一对应:列表对应 enemies,循环对应"重复执行",条件对应 abs(...) < 30 的矩形重叠判定。
五、进阶玩法
- 多血敌机:敌机分 1/2/3 滴血,击中三次才击落,用变量「我的血量」递减;
- Boss 关:每 30 秒出现一个横向移动的 Boss,需要集火同一目标;
- 道具系统:随机掉落加速 / 护盾 / 双发,用列表登记道具类型与坐标;
- 难度曲线:随时间缩短敌机生成间隔、提升下落速度,制造紧张感;
- 双人对战:左右分屏两名玩家,比谁在限时内击落更多。
六、小结与互动
「校园飞机大战」把列表、循环、条件、变量、自制积木、广播六大图形化核心考点,收进一个能跑、能玩、能计分的小游戏里------这正是蓝桥杯青少组程序设计组、全国青少年信息素养大赛算法应用主题赛(图形化方向)、电子学会图形化考级反复考查的命题套路。建议先把主干(移动 + 发射 + 碰撞 + 结算)跑通,再逐个加进阶功能。
互动:上面五个进阶玩法里,你最想看哪一个的详细积木拆解?留言告诉我,下期出续篇。也欢迎说说你在蓝桥杯 / 信息素养 / 电子学会图形化考级备战中遇到的真题,我们一起拆解。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。