
八、更复杂的Scratch程序
接下来我们来写一个复杂一点,也更有趣味的程序——托球游戏。这个游戏是这样玩的:游戏里有一个弹力球从上方下落,玩家用鼠标移动一个板子去托球,尽量不让球落地。球如果碰到板子或舞台边缘就会反弹,如果球没被接住,落到了地板上,那么游戏终止。
下面我们开始编写这个游戏程序。
第一步:设置舞台背景
我们画一条紫色线,表示地板。画法是这样的:首先把鼠标放在背景设置区最下方的图标上,然后在弹出的菜单条里点击画笔
,就会看到一个背景绘制界面;我们点击左侧的画笔
,在舞台背景的下方从左到右画一条线即可,画得不直也没关系。现在背景绘制区如图1-10左侧部分所示。

图1-10 托球游戏程序中的背景绘制(左)和角色选择(右)
第二步:选定角色
我们创建两个角色:一个是球板,另一个是弹力球。直接点击角色设置区下方的,从Scratch自带的角色中选择球和球板;每个角色都有一个名字,Scratch系统自动给球这个角色起了一个名字,叫作Ball,给球板这个角色起的名字叫作Paddle。当然,如果我们觉得这些名字不好听的话,可以自行修改,重新命名。现在我们的角色设置区如图1-10右侧部分所示。
第三步:编写球板的脚本
首先我们编写球板的脚本,功能是:让球板跟随鼠标左右移动。编写步骤如下:
1)先点击角色设置区中的球板,开始编写球板的脚本。
2)点击积木区中的“事件”,拖出“当被点击”积木,放入程序代码区。
3)点击积木区中的“运动”,拖出“移到x
: -240 y
: 40”积木,放入程序代码区,并接在“当被点击”积木下方。因为我们想让球板一开始处于(0,-80)位置,也就是舞台靠下方一点的地方,所以我们把这个积木中的
x
改成0,y
改成-80。
4)点击积木区中的“控制”,拖出“重复执行”积木,接在“移到”积木下面。
点击积木区中的“运动”,拖出“将x
坐标设为-240”积木放入程序代码区,并放在“重复执行”积木里面。
5)为了让球板跟随鼠标移动,我们点击积木区中的“侦测”,拖出“鼠标的x
坐标”积木,放入“将x
坐标设为-240”的“-240”处。
现在程序代码区如图1-11左侧部分所示。

图1-11 托球游戏程序中球板的脚本(左)和球的脚本(右)
第四步:编写球的脚本
接下来我们编写球的脚本,功能是:球一开始从正上方中心处落下,角度任意;每次移动10步;如果碰到舞台边缘和球板就反弹,反弹角度也是任意的;如果碰到紫色地板,就结束游戏。
详细的编写步骤如下:
1)先点击角色设置区中的球,开始编写球的脚本。
2)点击积木区中的“事件”,拖出“当被点击”积木,放入程序代码区。
3)点击积木区中的“运动”,拖出“移到x
: -240 y
: 40”积木,放入程序代码区,并接在“当被点击”积木下方;我们想让球一开始处于上方中心处,因此把这个积木中的
x
改成0,y
改成160。
4)点击积木区中的“运动”,拖出“面向90方向”积木,接在“移到”积木的下面;点击“运算”,拖出“在1和10之间取随机数”积木,放入“面向90方向”积木的“90”处;我们想让球一开始落下时,在120°到240°之间随机选择一个方向,因此把1改成120,把10改成240(见图1-12)。
5)点击积木区中的“控制”,拖出“重复执行”积木,接在“面向”积木下面。
6)点击积木区中的“运动”,拖出“移动10步”积木,放入“重复执行”积木里面。
7)点击积木区中的“运动”,拖出“碰到边缘就反弹”积木,接在“移动10步”积木下面。
8)为了让球碰到球板就反弹,我们这样操作:
- 首先点击积木区中的“控制”,拖出“如果那么”积木,接在“碰到边缘就反弹”积木下面。
- 然后点击积木区的“侦测”,拖出“碰到鼠标指针”菱形积木,放入“如果 那么”的菱形空里,并点击“鼠标指针”旁的下拉框,选择“Paddle”。
- 最后点击积木区中的“运动”,拖出“面向90方向”积木,接在“如果那么”积木里面;点击“运算”,拖出“在1和10之间取随机数”积木,放入“面向90方向”积木的“90”处。
- 当我们想让球碰到球板反弹时,在-30°到30°之间随机选择一个方向,因此把1改成-30,把10改成30。
9)为了让球碰到地板就结束,我们这样操作:
- 首先点击积木区中的“控制”,拖出“如果那么”积木,接在上一个“如果 那么”积木下面。
- 然后点击积木区的“侦测”,拖出“碰到颜色
?”菱形积木,放入“如果 那么”的菱形空里,并点击颜色,更改成紫色。
- 最后点击积木区的“控制”,拖出“停止全部脚本”积木,放入“如果那么”积木里面。
这样,球的脚本就写完了(见图1-11右侧部分)。我们的程序运行起来是这样的:一开始,球处于舞台顶部中央,从120°到240°之间随机一个方向下落;然后移动鼠标,拖动绿色球板去接球;球碰到球板或者边界就反弹。这样弹过来弹过去,非常有趣(见图1-12)。你写完了吗?快点击一下绿旗试试吧!

图1-12 托球游戏