Scratch游戏

2020-09-12 14:03:42 电脑报 2020年34期

本文摘自电脑报出品的《Scratch3.9青少年编程高分宝典》一书。你需要综合应用Scratch積木才能实现预期效果,完成保护飞船的小游戏。

游戏背景:太空飞船发生故障,外星人正从四面八方袭来,你需要操控守护者,保护飞船直到修理完毕离开战场。在飞船安全撤离前,若飞船被毁则游戏失败,否则游戏胜利。

目标分析:根据背景设定可知,游戏中要包括飞船、守护者以及外星人三个角色。飞船会留在舞台中间一段时间,等到故障解除,即继续往边缘移动,移动到边缘即视为脱离战场,游戏胜利。

选择角色火箭(Rocketship)。

守护者由玩家操控,可以消灭敌人,保证飞船血量大于0直到获得胜利。守护者造型比较特殊,需要自行绘制。

选择水母(Jellyfish)作为外星人。外星人由电脑控制,从各个方向出现,并冲向飞船,若击中飞船则扣除一定血量,若被守护者击中,则视为损毁消失,在飞船撤离战场前,将飞船血量消耗完则视为游戏失败。

还需要一张太空背景图,选择太空(Nebula)背景。

2. 程序框架搭建

游戏大体分为三个阶段:初始参数设定阶段、游戏阶段、结局判定阶段。

初始参数包括:故障时间、飞船生命值、各角色起始位置和各角色显示或隐藏状态。

游戏阶段包括守护者运动方式、飞船运动方式、敌人运动方式及与飞船或守护者碰撞引起的参数改变。

结局包括胜利和失败,不同的结局会出现不同的文字提示,进入结局后,其他角色的显示和隐藏。

3. 守护者造型设计

守护者需要被玩家控制去攻击敌人,这里我们将其设定为月牙形半透明光能武器,月牙的造型可以对圆形使用变形工具,修改出来。将圆下方的点向上拖动,即可形成月牙图形(如图2)。

然后使用渐变色填充对其填充颜色,实现透明效果。红色斜杠表示无颜色,一个颜色选择无颜色,就可以填充出漂亮的透明效果了(如图3)。

4.飞船与守护者程序设计

飞船进入战场中心后,出现故障停留一段时间,然后继续运动离开战场。所以需要设定飞船一开始显示,从下方滑行到中心点,然后等待一段时间(10秒方便测试),然后向上方继续移动至边缘隐藏,游戏胜利,停止全部脚本。

在程序中还可添加造型变化与初始大小设定,最后的移动可以加上等待让飞船速度不要太快(如图4)。

守护者需要跟随鼠标运动,为了方向保持一致,要将守护者造型方向面向默认的右边。造型中心点也在月牙中心偏右的位置(如图3)。

跟随鼠标运动,且面向鼠标方向,可以用运动组的相关积木实现(如图5)。

5. 敌人出现点设计

按照游戏设定,敌人是从四面八方向飞船进攻,所以敌人的出现位置实际上就是四条边缘,具体位置完全随机。所以我们需要先随机出现四种情况,每种情况代表一条边缘,具体出现在边缘上的哪一个点再做一次随机即可。

因为随机出来的边缘选择需要判断四次,所以需要一个变量保存下来。然后在四种情况中分别写入四条边缘的坐标,即可完成敌人的出现点程序。

每条边缘都有一个坐标固定,例如上边缘是Y坐标固定最大,X坐标随机。以此类推可得出四条边缘的坐标设定。程序如图6。

6. 敌人运动与扣血设计

需要注意的是,由于敌人数量很多,因此要使用克隆体,所以运动的应该是克隆体,本体需要隐藏,相应的克隆体需要显示,因为起点不同,所以方向也不相同,为了避免出现倒立的敌人,我们这里需要将旋转模式设定为“左右翻转”,另外为了让敌人不至于千篇一律,我们可以设定造型切换为随机造型,大小设定在一个范围内随机取值,经过测试,我们这里将大小设定在15到30之间。

本体由于需要等待飞船发生故障时再开始克隆,所以这里我们加上“等待1秒”。每次的克隆间隔我们这里设定的是0.5秒(如图7)。

敌人的起点设定好后,选择面向飞船,重复运动直到碰到飞船,即可完成敌人的完整运动。当敌人接触到飞船,会给飞船扣血,然后消失。若接触到守护者,则敌人直接消失,这段程序发生在克隆体的运动过程中,所以我们可以将程序写入克隆体运动程序里面。程序如图8。

7. 胜利和失败结局

游戏环节进行到最后,胜利或者失败,需要一个明确的判定标准,我们使用血量来判断结局,若血量在飞船撤离前归0,则游戏失败,若飞船成功撤离,则游戏胜利。

飞船程序中已经有胜利结局的程序了,我们在敌人角色中添加失败的结局。因为血量等于0时失败,所以我们需要设定血量的初始值(暂时设为10)(如图9)。

8. 调试与总结

程序全部完成后,按照惯例进行测试,测试内容包括胜利结局、失败结局、敌人碰到飞船或守护者是否消失、敌人碰到飞船是否扣且仅扣1点血、飞船运动状态是否正常、敌人运动状态是否正常、守护者是否跟随鼠标运动。

全部没有问题后,可以将之前为了方便测试的参数进行修改调整,例如血量、飞船故障时间、敌人速度等。

你还可以思考一下,现在敌人是0.5秒出现一个,能不能改成1秒出现一批次随机个数的敌人呢?