2.5 随机数

随机数的应用非常广泛,在创作游戏或模拟实验等类型的Scratch项目时,使用随机数能够创造出千变万化的运动效果、外观变化、实验参数等。例如,在大鱼吃小鱼游戏中让小鱼以随机的角度任意游动,在打地鼠游戏中让地鼠随机出现在不同的地洞中,在制作雪花动画时模拟雪花随机飘落的效果,等等。Scratch提供一个“在…到…间随机选一个数”运算指令积木,能够在给定的范围内随机生成整数或小数。

2.5.1 跟我做:小鱼逍遥游

使用Scratch提供的生成随机数的功能,能够实现效果逼真的小游戏。在本案例中,我们使用随机数让一条可爱的小鱼在舞台上自由自在地游动,具体步骤如下。

(1)启动Scratch软件后,在角色列表中的小猫角色上右击,在弹出的菜单中选择“删除”命令,把默认创建的小猫角色删除掉。如图2-5-1所示。

图2-5-1 使用右键菜单中的“删除”命令删除角色

(2)在角色列表区右上方的“新建角色”工具栏中单击“从角色库中选取角色”图标按钮,然后在Scratch的角色库中找到“角色库”→“主题”→“水下”位置下的小鱼角色Fish1(见图2-5-2),将它添加到角色列表中。

(3)切换到小鱼角色的脚本区,编写控制小鱼游动的脚本。首先将一个“当被点击”指令积木拖动到右侧的脚本区,然后从“外观”指令面板中把“将角色的大小设定为…”指令积木拖动到脚本区,拼接在“当被点击”指令积木之下。为了让舞台上的小鱼缩小,把“将角色的大小设定为…”指令积木的参数设定为20,这样使小鱼看上去显得协调一些。

(4)从“控制”指令面板中把一个“重复执行”指令积木拖动到脚本区,拼接在前面的指令积木之后。

(5)从“运动”指令面板中把一个“移动…步”指令积木拖动到脚本区,拼接在“重复执行”指令积木内部,将“移动…步”指令积木的参数设定为2。

(6)把一个“左转…度”指令积木拖动到脚本区拼接在“移动…步”指令积木之下。这个“左转…度”指令积木用于控制小鱼每次向左旋转的角度。为了让小鱼在舞台上的运动显得比较自然,使用一个随机函数生成-20~20之内的任意整数,作为小鱼每次运动时向左旋转的角度。

(7)最后再将一个“碰到边缘就反弹”指令积木拼接在“左转…度”指令积木之下。至此,“小鱼逍遥游”案例的程序脚本编写完毕,脚本清单如图2-5-3所示。

图2-5-2 角色库中的小鱼角色

图2-5-3 控制小鱼游动的脚本

(8)单击按钮运行程序,将会看到一条可爱的小鱼在舞台上自由自在地游动。

2.5.2 生成随机数

在Scratch中生成随机数时,可以使用“在…到…间随机选一个数”指令积木。这个积木有两个参数,分别用于设定生成随机数的起始值和结束值,生成的随机数中包括这两个参数。例如,在执行“在1到10间随机选一个数”积木时,将会返回包括1和10在内的10个数中的任意一个数。

根据给定的参数是整数或是小数,这个积木将会随机生成并返回整数或小数。例如,使用“在1到10间随机选一个数”积木,返回的是整数类型的随机数;而使用“在1到10.0间随机选一个数”积木,返回的则是小数类型的随机数。这是因为后者的参数中有一个是小数,所以它生成的随机数的类型是小数。

如果希望按照一定的间距生成随机数,可以将“在…到…间随机选一个数”积木返回的随机数除以或乘以一个数。例如,使用“(在0到10间随机选一个数)/10”的组合积木,能够生成0到1之间并且以0.1为间距的随机数;使用“(在0到10间随机选一个数)*10”的组合积木,能够生成0到100之间并且以10为间距的随机数。

如表2-5-1所示,这里介绍了一些生成不同的随机数的方法。

表2-5-1 生成随机数示例

2.5.3 动手练:随机投点画圆

1.练习重点

随机数积木、绝对值积木和平方根积木等的使用。

2.问题描述

请设计一个程序脚本,随机生成10万个点的坐标(xy),当这些点落在一个以舞台中心为圆心、半径为100个单位的圆内时,把点画出来。

3.解题分析

由于圆位于舞台中心(0,0),因此落点的x坐标和y坐标的取值都应该在-100到100之间。使用两点间距离公式计算落点与舞台中心(0,0)的距离,如果距离小于100,就认为落点在圆内,将点画出来。

4.练习内容

(1)把图2-5-4所示的程序脚本中的空白积木替换为真实积木。

(2)修改上述脚本,要求只把落在圆外的点画出来。

(3)运行程序,把编辑菜单中的“加速模式”勾选上,并观察产生的变化。

图2-5-4 “随机投点画圆”空白脚本