引言
冰壶(冰上溜石)是一项讲究"角度 + 力度 + 摩擦"的优雅运动:选手推出冰壶后,壶体在冰面上滑行并受摩擦逐渐减速,最终停在大本营的同心圆里,离圆心越近得分越高。把这套物理直觉搬进图形化编程,就是一个非常经典的运动仿真 + 几何判定项目。
第七届山东省青少年创意编程与智能设计大赛(德州市赛)的创意编程赛项鼓励中小学生用图形化方式原创互动作品。本文以「校园冰壶挑战赛」为题,带你用列表、循环、条件、变量、自制积木和广播六大核心积木,从零拼出一个可玩、可评分、可扩展的冰壶游戏,并给出 Python 物理伪代码作为进阶对照。

一、题目与项目目标
项目名:校园冰壶挑战赛
在一条冰壶赛道上,玩家通过方向键微调投壶角度、空格键蓄力发射冰壶。冰壶滑出后受冰面摩擦持续减速,最终停在大本营(同心圆得分区)内。系统实时测量冰壶到圆心的距离,按所在圆环给分;每关有若干壶机会,累计得分达标即过关。
验收目标(图形化赛项评分要点):
-
能投出冰壶并看到真实的"先快后慢、最终停下"的摩擦效果;
-
大本营分四档计分区(圆心 / 内圈 / 中圈 / 外圈),停在哪档就按档计分;
-
多壶累计、关卡推进、胜负判定完整;
-
代码逻辑清晰,变量与列表命名合理,便于现场讲解。
二、核心考点
| 考点 | 在本项目中的落点 |
|---|---|
| 列表(List) | 记录每一壶的落点坐标与得分;记录关卡配置(每关壶数、达标分) |
| 循环(Loop) | 主循环每帧刷新冰壶坐标(位置 += 速度,速度 *= 摩擦系数);遍历已投冰壶判定重叠 |
| 条件(Condition) | 速度足够小→判定停止;落点在哪一圈→给对应分;是否撞到已有壶;是否达标过关 |
| 变量(Variable) | 冰壶坐标 x/y、速度 vx/vy、角度、力度、摩擦系数、当前壶号、总分、剩余壶数、关卡号 |
| 自制积木(Custom Block) | 画赛道与大本营、投壶动画、测量到圆心距离、结算本壶、重置一关 |
| 广播(Broadcast) | 解耦"开始投壶 / 冰壶停止 / 本壶得分 / 过关 / 游戏结束 / 重置"等状态切换 |
三、解法与积木拆解
1. 场景与角色
- 背景 :一条横向冰壶赛道,右端是大本营(同心圆,圆心在坐标
(cx, cy))。 - 角色:
投壶手:固定在左端,按方向键旋转瞄准线表示投壶角度;冰壶:克隆体,每投一壶生成一个,私有变量记录自己的x/y/vx/vy/得分;大本营:静态绘制同心圆,仅作视觉参考,不参与计算。
2. 核心变量与列表
变量:
角度 angle // 0~180,决定冰壶初速度方向(朝右上方或右下方)
力度 power // 空格蓄力得到,决定初速度大小
摩擦 friction = 0.96 // 每帧速度衰减系数
当前壶号 curStone // 1..每关壶数
总分 score
剩余壶数 left
关卡 level
列表:
stoneX // 第 i 壶停止后的 x
stoneY // 第 i 壶停止后的 y
stoneScore // 第 i 壶得分
levelCfg // 每关的 [壶数, 达标分],解析自关卡配置
3. 投壶与摩擦物理(循环 + 变量)
投壶的精髓是摩擦衰减逐帧模拟 。发射瞬间给冰壶一个初速度 (vx, vy) = (power·cos(angle), power·sin(angle)),之后主循环里每帧:
重复执行:
x = x + vx
y = y + vy
vx = vx * friction
vy = vy * friction
如果 (vx*vx + vy*vy) < 0.04 那么 广播(冰壶停止)
速度平方小于阈值即视为停下------这就是"先快后慢、最后定格"的物理直觉来源。角度决定冰壶偏向圆心上方还是下方,力度决定能滑多远,二者配合才能停进高分圈。
4. 停止判定与得分(条件)
冰壶停下后,用勾股定理量它到圆心的距离 d,再按圆环给分:
当接收到(冰壶停止):
把 本壶x 加入 stoneX
把 本壶y 加入 stoneY
d = 平方根( (x-cx)^2 + (y-cy)^2 )
如果 d <= 20 那么 本壶得分 = 4 // 圆心红
否则 如果 d <= 50 那么 本壶得分 = 3 // 内圈蓝
否则 如果 d <= 90 那么 本壶得分 = 2 // 中圈白
否则 如果 d <= 130 那么 本壶得分 = 1 // 外圈
否则 本壶得分 = 0 // 出界
把 本壶得分 加入 stoneScore
score = score + 本壶得分
广播(本壶得分)
同时判断是否撞到此前已停的壶(距离小于壶半径则轻微弹开或贴边停下),这就是条件积木"碰撞判定"的典型用法。
5. 自制积木封装
把重复逻辑抽成带参/无参积木,现场讲解更清楚:
画赛道与大本营:一次画出冰道与四档同心圆;投壶动画(angle, power):生成克隆冰壶并赋初速度;测量到圆心(x, y):返回距离d(无参积木内部用全局变量也行);结算本壶(d):根据d返回得分;重置一关:清空列表、归零壶号与剩余壶数。
6. 广播解耦
把"流程"和"表现"拆开,状态切换全部用广播:
广播(开始投壶) → 显示瞄准线、允许蓄力
广播(冰壶停止) → 触发结算本壶、刷新计分板
广播(本壶得分) → 弹出 "+N" 飘字
广播(过关) → 进入下一关、加载新 levelCfg
广播(游戏结束) → 显示总分与重玩按钮
广播(重置) → 调用 重置一关
这样投壶逻辑、计分逻辑、界面逻辑互不纠缠,调试和二次开发都轻松。
积木拆解流程
开始
└─ 广播(开始投壶)
├─ 方向键调 angle、空格蓄力得 power
└─ 投壶动画(angle, power)
└─ 主循环:x+=vx, y+=vy, v*=(0.96)
└─ 速度平方<0.04 → 广播(冰壶停止)
└─ 测量到圆心 → 结算本壶 → 广播(本壶得分)
└─ 剩余壶数-1
├─ 仍有壶 → 允许下一投
└─ 壶用尽 → 达标? 广播(过关) : 广播(游戏结束)

四、运行效果
- 启动后赛道右侧出现四档同心圆大本营,左侧投壶手带一条可旋转的瞄准线;
- 按住空格蓄力,力度条增长,松手发射,冰壶"嗖"地滑出并平滑减速定格;
- 停稳后画面弹出"+4 / +3 / +2 / +1 / 0"飘字,计分板实时累加;
- 一关若干壶投完,达标则自动进入下一关(壶数更多、达标分更高),否则提示"游戏结束,再来一局";
- 全程中文界面、无英文品牌词,完全契合图形化赛项的原创作品要求。
五、进阶玩法
1)用 Python 验证摩擦物理(进阶对照)
想确认你的摩擦参数是否合理,可以把逐帧模拟写成 Python 对拍:
python
import math
def simulate(start_x, start_y, angle_deg, power, friction=0.96,
cx=600, cy=200, stop=0.04):
"""返回冰壶停止时到圆心的距离 d 与停稳所需帧数。"""
a = math.radians(angle_deg)
x, y = start_x, start_y
vx, vy = power * math.cos(a), power * math.sin(a)
frames = 0
while vx * vx + vy * vy > stop:
x += vx
y += vy
vx *= friction
vy *= friction
frames += 1
return math.hypot(x - cx, y - cy), frames
d, f = simulate(60, 200, 8, 9.0)
print(f"停到圆心距离={d:.1f}px,用时约 {f} 帧")
调 power 与 angle 即可找到能稳稳停在圆心附近的"黄金参数",反过来也能据此设计关卡难度。
2)更多可扩展点
-
加入"占位壶"机制:后投的壶若把先前的壶撞出高分圈,得分会变化(真实冰壶规则),可用列表 + 条件实现碰撞后再结算;
-
加"刷冰"道具:方向键在壶滑行途中短暂提升
friction(≈0.99)延长滑行距离; -
多人对战:用两个列表分别记红蓝方落点,结算时比谁的壶更靠近圆心;
-
关卡编辑器:把
levelCfg列表做成可读取外部关卡,轻松产出 10+ 关。
六、小结与互动
「校园冰壶挑战赛」把摩擦物理、几何距离、累计计分三件事,用六大核心积木干净地串了起来:变量记状态、列表存历史、循环做逐帧模拟、条件做停止与判圈、自制积木封装重复动作、广播解耦流程。它既贴合山东省创意编程赛项的"原创互动作品"导向,又能直观展示你的计算思维。
你最想给冰壶游戏加哪个进阶玩法?是"占位壶"真实规则、刷冰道具,还是红蓝对战?欢迎在评论区留言,下一篇我们可以一起把某一个玩法完整拼出来。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享,点击链接可直接保存;若需在 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
资料持续更新,关注获取最新分享。