之前我们已经将首页制作完成了,接下来就是制作游戏的重点–关卡了,我们先从第一关开始制作。

1、 设定状态栏

与前面讲到的设定开始按钮的方法一样,我们先设定好状态栏的初始位置,并让它在接收到游戏开始广播时显示出来。
使用Scratch制作弹球游戏(4)

状态栏我们需要显示的数值有4个,分别是关卡数、障碍物数量、生命和得分。这里我们需要建立4个变量来显示这些数值,并为后面的游戏判定提供帮助。
使用Scratch制作弹球游戏(4)
使用Scratch制作弹球游戏(4)
如上图所示,建立关卡数、障碍物数量、生命和得分4个变量,并让他们显示出来,拖动这些变量的状态条到状态栏合适的位置。

2、 生成障碍物

我们的障碍物角色只有一个,而游戏开始后障碍物不可能只有一个,所以我们要先克隆障碍物,而且为了方便后续管理和编程,所以我们只需要显示和控制克隆体。
因为前面我们隐藏了障碍物角色,那么克隆体也不会显示,所以我们要先搭建下面的积木,然克隆体能够显示出来。
使用Scratch制作弹球游戏(4)

这里我们克隆自己(障碍物)之后在向右移动一段距离,也就是横坐标增加,具体数值根据障碍物大小调整,然后重复克隆、移动的步骤,也就是编程里的循环语句,在Scratch里的重复执行积木,将他套在克隆和增加x坐标的积木块外,并将重复执行的次数设定为6次,就能克隆出一排6个障碍物了,克隆的同时将障碍物数量这一变量增加1,用于显示障碍物数量。
使用Scratch制作弹球游戏(4)

如果想增大难度,再增加两排,可在上一个循环也就是重复执行积木的基础上将障碍物重置到左边,也就是x坐标重置为-187,然后下移一段距离,也就是将y坐标增加-25,再重复执行包括克隆的循环3次即可生成3行6列障碍物。
使用Scratch制作弹球游戏(4)

3、 设定球未发射前和挡板的同步移动

还是和之前同样的方法设定好球和挡板的初始位置,这里我们需要在引入一个变量“速度”用于调整球和挡板的移动速度。
游戏开始时,球和挡板复位,此时处于待发射状态,随着按动键盘上的方向键可以同步左右移动。
使用Scratch制作弹球游戏(4)
使用Scratch制作弹球游戏(4)

上图中圈出的如果语句是为了限定球和挡板的移动区域,防止其移动到显示区域外。
这里我设定的是按下空格键发射,所以为它们的重复执行设定一个终止条件:“按下空格键结束

4、 设定发射后球和挡板的独立移动

球在发射之后就不需要再跟着挡板移动,只需要做匀速直线移动,碰到物体之后发生反弹,为了增加游戏的趣味性,使球的运动轨迹不那么僵硬,可以为反射角度增加一个额外的随机角度,如下图圈出的积木。又因为随机角度的加入,使得反射角度增加了不确定性,可能会发生球碰撞反弹后的角度加上随机角度变成了垂直两边墙体,也就是90度或者-90度,于是球就会无限在两墙体间不断回弹,即使反弹角度不垂直于两边墙体,也会出现反弹的直线与墙体的垂线夹角过小,导致球在两墙体间反弹多次才能够被挡板接住,严重影响了游戏体验。要想解决这一问题其实也很简单,只需要在球反弹时加上一个判断,如果反弹角度加上随机角度后与水平线的夹角过小,那么就将这个角度变成一个较大的角度。下图圈中的几个“如果“积木就是做这个判断及改变角度之用。
使用Scratch制作弹球游戏(4)

细心的读者应该发现了,我在球移动的这段循环里加入了终止条件,y坐标<-155或者关卡数=0,球的y坐标小于-155的时候就说明挡板没有接住球,此时可以终止循环并减少一条生命,关卡数变成0说明通关结束游戏,此时也不在需要循环。
出循环也就是y坐标<-155或者关卡数=0后需对部分变量进行改变,如下图,没有接住球就将生命-1,用于后续判定是否还有生命值继续游戏;引入了两个新的变量:生命减少和道具,生命减少的数值只设定了0和1,用于判定挡板是否未接住球,1代表未接住球,0代表正常,用于后续挡板复位判定,因为挡板没法检测到球的坐标变化,所以需要一个公共变量来交流。将道具变量设为0是为了初始化道具数值,道具这一变量是为了后面借助随机数来形成球碰到障碍物后奖励道具随机掉落的情况,后面会提到。
使用Scratch制作弹球游戏(4)

如果挡板没接到小球即y坐标<-155,那么就将生命减少设为1,有了 “生命减少”这一变量,挡板就能够知道是否接到小球,后续的重置判定就变得相对简单了。
使用Scratch制作弹球游戏(4)

这里等待一秒是因为我们在按下空格让球出发前给球加了一秒钟的提醒话语,用于提醒,为了与球同步,所以我们也要等一秒钟再开始移动。
如果未接住球,那么就需要重置球和挡板的位置重新准备发射球,因为操作还是一样,所以我们再套上一个大的循环,并为这个循环加上终止条件:生命=0或关卡数=0,注意这里使用的是或,因为这两个条件只要有任意一个满足即可终止游戏。因为球的积木块搭建的比较长,不利于展示,且球的用法与挡板相同,所以我这里就只展示挡板的积木块来帮助大家了解这个大循环的用法。
使用Scratch制作弹球游戏(4)

终止游戏后就可以隐藏部分角色并停止全部脚本,比如球、挡板、障碍物、状态栏都需要隐藏掉来显示结束画面,根据结束的情况不同,会有不同的结束画面,这个会放在背景里讲。停止全部脚本的积木块可以任意放在球和挡板这两个能够判定游戏结束的角色编辑栏里。
使用Scratch制作弹球游戏(4)
使用Scratch制作弹球游戏(4)

相关文章: