关卡类游戏《鱼塘Ⅰ》的Scratch实现
今天用Scratch实现一个多关卡类的小游戏《鱼塘Ⅰ》(从名字可以看出可能有续集,好吧~)。这个游戏很简单(游戏场景见下图),但是需要使用大量的变量、定义函数、发布接受消息等内容。对于初学者来说还是有一定的挑战性的。好,我们来“解剖”一下这个游戏。
场景1 场景2游戏目标:找出每一关中与众不同的鱼。
游戏机制:
1.在倒计时完成前找到与众不同的鱼,否则闯关失败;
2.有三条命,选错鱼后减少一条命;每关开始时恢复三条命;三条命用尽则闯关失败;
3.每关开始时存在一些干扰的鱼,其数量随关卡数递增;
4.每一关开始后,“干扰鱼”会按一定概率自行复制;
5.鱼游动的速度会随关卡数递增;
6.“目标鱼”以颜色与“干扰鱼”区分,其颜色接近程度随关卡数递增;
6.通过所有关卡,视为胜利。
元素说明
该游戏公由四个元素组成:场景、干扰鱼(这里称goodfish)、目标与(这里称badfish)、面板,如下图所示。
这四个元素每一个都有自身的内部结构(下文会依次说明),并且分别编写代码。这有点“面向对象编程”的感觉。
元素说明变量说明
本游戏用的变量较多,汇总如下图。基本上通过名字就可以判断其用途。
变量汇总场景结构及代码
场景分为三个,都是从Scratch场景库中挑选的,下图箭头所指的地方可以修改每个场景的名字。
场景结构说明这个游戏中“场景”充当了“主控程序”的角色,全盘控制整个游戏。从下面的代码中可以看出此处用了很多消息功能和变量,稍显复杂。消息INIT只在第一关时起作用,之后每关开始相关设置都有消息prepare与begin完成。
说明下:场景代码较多,一屏截不全,所以截图了两次,见下面两张图。
场景代码1 场景代码2颜色通过上图中的代码可以看出,本游戏中变量fishChangeColor除了控制目标鱼的颜色外还担任着另一项重大任务:判断游戏胜利进程。代码显示每三关变一下颜色(fishChangeColor减去一),当fishChangeColor=0的时候,游戏通关胜利。
角色结构与代码
角色内部结构与场景类似,也是三个部分每关随机更换。
角色结构说明“干扰鱼(goodfish)”代码较多,截了两屏,见下面两图。这里定义了几个函数,使得代码结构跟个清晰一些,体现了面对对象编程的“封装”特点。从代码中可以看出,干扰鱼负责播报进行到了第几关。
goodfish代码1 goodfish代码2“目标鱼(badfish)”的代码相对简单得多,如下图。代码中可以看出,无论干扰鱼还是目标鱼,被点击的时候的是广播clicked消息,对whoClicked进行赋值,这里体现了面向对象编程的“多态”特点。
badfish代码面板结构及代码
面板的结构与场景和角色也非常相近。三个部分分别为帮助说明、失败、胜利。
说明面板结构第一关开始,由INIT函数控制显示帮助面板,告诉玩家本游戏需要找出与众不同的鱼。之后通过接收消息failed\Success来显示失败、成功面板。
面板代码 胜利面板 失败面板 说明面板完善
准确地说一款游戏永远没有终结的时候,一直可以变得更好。我们可以尝试加一些音效、调整一下数值、增加一些特效、增加一些惊喜。
加油!