2026山东创意编程德州赛:校园冰壶挑战赛解析

引言

冰壶(冰上溜石)是一项讲究"角度 + 力度 + 摩擦"的优雅运动:选手推出冰壶后,壶体在冰面上滑行并受摩擦逐渐减速,最终停在大本营的同心圆里,离圆心越近得分越高。把这套物理直觉搬进图形化编程,就是一个非常经典的运动仿真 + 几何判定项目。

第七届山东省青少年创意编程与智能设计大赛(德州市赛)的创意编程赛项鼓励中小学生用图形化方式原创互动作品。本文以「校园冰壶挑战赛」为题,带你用列表、循环、条件、变量、自制积木和广播六大核心积木,从零拼出一个可玩、可评分、可扩展的冰壶游戏,并给出 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 内打开,也可复制下方明文链接:

  1. 全国青少年信息素养大赛复赛集训题目Python&C++.docx
    https://pan.quark.cn/s/93995d3cb150
  2. 2024信息素养-智能算法应用挑战赛-复赛初中组题目7月7日.pdf
    https://pan.quark.cn/s/da97b5dbf75d
  3. Python背记手册.pdf
    https://pan.quark.cn/s/7568ae9ca92b
  4. Python课程
    https://pan.quark.cn/s/a94bf02d00c6
  5. 2024信息素养大赛图形化复赛集训题答案3-9
    https://pan.quark.cn/s/6ccab7ec3cbc
  6. 2025年03月份电子学会考级真题
    https://pan.quark.cn/s/4403c4228912
  7. 2025全国青少年信息素养大赛赛项说明
    https://pan.quark.cn/s/d9d0df4a9f29
  8. 青少儿信息素养大赛编程资料
    https://pan.quark.cn/s/4ab6bd83be8a

资料持续更新,关注获取最新分享。

相关推荐
青少儿编程课堂4 天前
2026深圳罗湖大创客节:校园跳绳挑战赛解析
scratch·少儿编程·图形化编程·创意编程·信息科技
青少儿编程课堂5 天前
2026山东创意编程烟台赛:校园糖果三消解析
scratch·少儿编程·图形化编程·创意编程·信息科技
青少儿编程课堂7 天前
2026温州市创意大赛:校园弹珠迷宫解析
scratch·少儿编程·图形化编程·创意编程·信息科技
青少儿编程课堂8 天前
2026山东创意编程滨州赛:校园守塔防御战解析
scratch·少儿编程·图形化编程·创意编程·信息科技
青少儿编程课堂9 天前
2026益阳青少年机器人赛:校园太空采矿车解析
scratch·少儿编程·图形化编程·创意编程·信息科技
青少儿编程课堂22 天前
2026领航杯江苏素养大赛:校园投篮挑战解析
scratch·少儿编程·图形化编程·创意编程·信息科技
青少儿编程课堂23 天前
2026重庆STEAM科创大赛:校园连连看消除解析
scratch·少儿编程·图形化编程·创意编程·信息科技
青少儿编程课堂1 个月前
2026全国青科赛:校园五子棋人机对战解析
scratch·少儿编程·图形化编程·创意编程·信息科技
青少儿编程课堂1 个月前
2026北斗杯电力巡检挑战赛:电网巡检车解析
scratch·少儿编程·图形化编程·创意编程·信息科技