网上有很多超人游戏,例如:超人训练、超人锤练、超人磨练、超人考验、超人飞跃、超人冲刺等。一般用火柴人扮演超人,能跑、能跳、能攀峭壁,能力超强,游戏场面宏大,关卡一个比一个难。外孙女也喜欢超人游戏,也想自己编一个。但编写网上那样宏伟场面的游戏不太现实,我们只是学习编程,精力应放在用scratch实现超人的跑、跳、攀爬等各种动作脚本,因此仅设置两个关卡,来验证这些脚本。查看游戏源代码是不可能的,只能是自己玩或看别人玩游戏,想办法用scratch脚本实现看到的动作。这些游戏都是敏捷类游戏,老人可能玩不了,小孩玩坏眼晴。幸好在哔哩哔哩网站上有一个玩“超人训练”游戏的视频,显示了通关的各个动作,我们根据所看到动作完成自己的游戏。读者也可对照视频,查看我们的游戏是否实现了“超人训练”游戏的大部分动作。该链接如下:https://www.bilibili.com/video/av370211982/
【小游戏21】超人训练
游戏的两个关卡图见图1。两个关卡只有3种颜色,包括作为背景的白色以及红色和黑色。超人在黑色上行走、攀爬,超人如碰到红色,则重新开始。在关卡1超人首先通过平地、爬坡、越过深沟,跃上台阶,碰到按钮进入第2关。在第2关,首先试一试能否攀上带缺口的峭壁,并在缺口处停住。也可直接跳到沟底黑石,趴下钻过山洞,攀上右侧黑石,坐着滑下斜坡,跳下碰到苹果,就会给出文字提示:你赢了。
一共有5个角色见图2。原不准备有明显的关卡,超人移动,关卡也随着移动,这样关卡必须是角色。考虑到这样要增加关卡移动的脚本,会增加理解超人动作脚本的难度,因此改为通过触碰按钮进入第2关,这样关卡就不必是角色,可以是背景。因怕麻烦就未改。
为了实现超人角色动画,其共有7个造型见图3。前4个是行走的动画造型,第5个是钻山洞趴下的造型,第6个是从坡上滑下时坐着的造型,第7个是攀爬峭壁时的造型。在“超人训练”游戏中,后3个动作也有动画,即造型不止1个。本游戏省略了,但在脚本中考虑到这点,增加相应脚本并不困难。
游戏使用左移和右移键移动超人,空格键跳跃,下移键使超人坐下或趴下。由于实现动作脚本很多,有可能还是无条件死循环,因此不能把这些脚本放到事件函数中,否则超人的动作不能顺畅。本游戏“超人角色”主程序和左移、右移键事件函数见图4。这里左右键事件函数只是修改移动方向,而超人动作脚本主要在“前进”和“跳高”积木块中。
游戏要实现如下动作脚本:水平移动、上坡和下坡、跳起和落下、钻洞、攀爬等。首先看水平移动和上坡,查看“前进”脚本块,见图5,这个脚本块在主程序的无条件死循环中。水平移动包括左移和右移,由于使用“移动5步”脚本,已包含方向,所以共用同一脚本。在左或右移键被按下时(注意左右移键不能同时按下,左或右移键可单独长按不起),执行其后的脚本。首先必须知道,超人在黑色上边走,其并未碰到黑色,这是由初始化脚本保证的。首先移动5步,如碰到边界,退5步,原地不动。如未碰到黑色,说明这里是平地,换下一造型。如果水平移动碰到黑色,可能包括两种情况,可能是上坡或是碰到峭壁,向上5步后碰不到黑色,说明是上坡(坡度要小于45度,如要提高角度可加大向上步数),否则是碰到峭壁,超人不动,并设置峭壁标记,改为攀爬造型。下坡包括走下坡和坐着滑下坡,两者本质上还是走步,沿水平方向移动也用“前进”脚本块中脚本,下坡时碰到黑色是遇到峭壁,否则一定碰不到黑色,超人应下落,下落脚本在“跳高”脚本块中。
“跳高”脚本块和“按空格键”事件函数实现了攀爬和其它情况跳起和落下功能。攀爬状态下,按一次空格键,升高一定高度,连续按空格键(不能按下不起)连续升高,不按空格键后,升到一定高度开始下降。在关卡2中,一峭壁有缺口,超人在上升和下降经过缺口时,按左或右移键能使超人的手伸到缺口中且未碰到黑色,继续上升或下降将碰到缺口上壁或下壁,使超人停在缺口。在其它跳起和落下状态中,按空格键时,超人跳起一定高度,再一次按下空格键,再增加一定高度,在超人落地前,再按下空格键无用。
首先看“按空格键”事件函数,见图6,其最后的脚本“等待按下空格键不成立”是防止长按空格键不起。这里用到了3个变量,“跳多高”、“只允许跳2次”和“在峭壁吗”。如在峭壁,每按一次空格键,将变量“跳多高”设置为8(如何使超人跳起和落下见后面),变量“只允许跳2次”为1(保证离开攀爬状态时还能按空格键使变量“跳多高”再增加8)。如不在峭壁,可以分别按2次空格键,将变量“跳多高”最多变为16。再看“跳高”脚本块,见图6,只要变量“跳多高”大于0,就使超人y坐标增加5,变量“跳多高”减1,直到变量“跳多高”为0或向上碰到黑色。而变量“跳多高”等于0,则y坐标减少5,直到碰到黑色,超人落地。如在峭壁状态,超人落地还要改攀爬造型为跑步造型。
最后看一看钻洞和坐着滑下坡功能,这两者本质上还是走步,只是造型不同。修改造型在“按下移键事件”函数中,见图7,当已按下左移键或右移键,说明是坐着滑下坡,改为造型6,否则改为造型5趴着钻洞。然后等待下移键抬起后,恢复造型1,变为行走状态。最后一句脚本将Y坐标增加13,是因为坐和趴的造型定位点低,而行走造型的定位点高,变换后行走造型将出现在坐和趴的造型位置,使行走超人腿进入黑色,因此必须抬高些。
还有一些未介绍的超人脚本见见图8。这些都比较好理解。“变换造型”脚本块中只有行走有造型转换脚本,形成动画。其它动作只有固定造型,如需要动画,按行走脚本修改即可。还有一点需要说明,无论是行走、攀爬或下滑,超人都未碰到黑色,只是距离黑色很近,看起来在黑色上边行走。在初始化脚本和控制动作脚本都保证了这一点。但在某一地点,某一造型未碰到黑色,但从这种造型转换为另一种造型时,由于两者造型的定位点、大小和形状不同,可能使后一造型碰到了黑色,发生错误。这就需要调整造型或者修改脚本,这是一件比较麻烦的事情。为了避免此类错误,在设计阶段描绘造型时有些要点必须记住,首先造型位置决定于造型“定位点”坐标,因此会发生造型转换的所有造型,以“定位点”为基点向上、向下、向左和向右的对应长度尽量等长,特别是那些检测是否碰到黑色的脚本后,位置未变立刻转换造型的更应如此。例如行走,要不断检测下边是否碰到黑色(是否着地),因此超人的4个行走造型以“定位点”为基点沿Y轴向下部分都应等长。又如攀爬,首先按空格键,使超人在距离峭壁近处向上跳起,此时造型为跳起造型(本游戏为行走造型),再按左或右移键,使超人撞向峭壁,撞到峭壁后,变为攀爬造型,使用空格键使超人能向上攀爬,这里两个被转换的超人造型的手从“定位点”沿X方向长度,跳起造型手长要大于或等于攀爬造型手长,以保证攀爬造型手碰不到黑色。本游戏不敢保证没有这类错误,这也是很多动画未实现的原因。
两个关卡以及按钮和苹果的脚本如下,见图9。按钮是为了转换关卡,碰到苹果表示赢了。
水平有限,难免有错,欢迎指正。
源程序下载地址:
https://download.csdn.net/download/geng_zhaoying/12404453