接 上一篇
(14) 计时投篮机
程序目标描述:
这集我们用很少的几块积木,让篮球实现了抛物线运动。为了增加游戏的趣味性,篮球投出的力度将取决于投出(按空格键)的时机。等等,这个拖把是怎么回事?像很多低级的电子游戏一样,它是作为力度指示计,当拖把偏转角度最大时,投球的力度也最大。屏幕左上角显示了命中次数的计数器,以及一个计时器。完成后,跟爸爸比一比谁 30秒内投进的球更多吧。
场景布置:
舞台背景选择 Scratch 内置的 “Basketball 2”。
角色选择 Scratch 内置的 “Andie”(坐轮椅的运动员) 和 “Basketball” (篮球)、 “Broom” (扫把)和 “Bowl”(碗) 共 4个角色。
按上面的图布置。
同时,在“变量”积木箱中,将“我的变量”前面的勾打上,用于显示得分。在“侦测”积木箱中,将“计时器”前面的勾打上,用于显示游戏时间。
代码搭建:
Andie(下面这 2 行是可选代码,只负责在投篮时变换 Andie 的造型):
Broom(下面这段代码负责在游戏中让扫把不断改变角度):
Bowl(下面这四行用于侦测命中并计分):
Basketball:
运行:
如前文描述。
讲解:
要想实现抛物线的效果,我们必须有一个隐变量,那就是篮球在垂直方向上的速度。因为任何抛射出去的物体,其垂直速度都是不断改变的。这个程序用了一个小把戏,就是把篮球的方向用作了代表它垂直速度的变量。方向的取值可以是 -179~180,这对于我们游戏中的垂直速度而言,范围是足够大的。
篮球角色的“重复执行”代码块实现了篮球的飞行效果,每一次循环都会执行三个操作:
将 x 减少 10 —— “将 x坐标增加 -10”
将 y 增加1个“垂直速度” —— “将 y坐标增加(方向)”
将“垂直速度”减少 1 —— “左转(1)度”。
其实还有一个隐含的变化,那就是每一次循环也会消耗一个很短的时间。有时候,我们也称这些单次循环中的变化叫“微分”,时间的变化,叫时间的微分 dt,横坐标的变化,叫 x 的微分 dx,纵坐标的变化,叫 y 的微分 dy,垂直速度的变化,叫垂直速度 V 的微分 dV。而你最终看到的,是把每一次细微变化累积起来的效果,也就是篮球做抛物线的运动。
循环体中的三个操作,实际上是设定了 dx、dy、dV、dt 之间的关系,相当于构造了运动的微分方程。我们构造的微分方程符合物理学中的运动定律,因此,程序运行效果也看上去像真实的投篮一样。
当然,改变上述微分之间的关系,运动也会发生改变。如把 “将 x坐标增加 -10” 改为 -15 或 -5,就可以看到投出球的水平速度将变大、变小。而“左转(2)度”将呈现重力加速度翻倍的效果。