【阅读提示】编程猫中的源码编辑器是一款类似于Scratch的软件,而且在实现功能上做了大幅度的改进与提升。因此,熟悉Scratch编程的朋友可以很容易阅读本文;但是,其中的部分积木代码与Scratch并不相同。Scratch积木提供了少儿编程最基础的功能积木;编程猫源码编辑器则扩展了Scratch功能,并进行了大量简化。

根据本人使用百度指数的粗略分析,编程猫是截止目前国内最大规模且技术研发含量最高的少儿编程(含机器人编程)公司,值得关注。

一、游戏情景与快照

游戏未开始时界面如图所示:

游戏情景是这样的:夜路上小怪物要回家,遇到头顶上可爱的小星星。于是,好奇的小怪物左跳右跳跑来跑去地捉起了可爱的小星星,但是小怪物功力有限(6个生命值)——如果在指定时间和有限功力内摘不到小星星,则游戏线束。每摘到一颗小星星,得1分;每错过一次摘取机会,功力值会减少,直到为0——标记游戏结束。其中,功力值使用屏幕下方的状态条表示。

下图给出了游戏运行中的某一时间截图:

二、系统模块图

系统实现主要难点在于:

(1)小怪物跳跃高度与移动速度的控制(经验值)

(2)星星消失的时间控制(随着游戏难度的提升)与出现位置计算

(3)多星星情况下使用克隆技术克隆小星星(本版本游戏中未提供支持)

(4)协调游戏中各元素的通讯

三、角色与数据设计

(一)角色

游戏中,包括舞台背景在内,共有9个角色(精灵),如图所示:

注意:失败界面是使用一个前景角色实现的。

(二)变量定义

在编程猫中,类似于Scratch,变量分为普通变量与列表两种类型。因为本游戏数据并不复杂,所以只使用了普通变量。各变量定义及含义描述如下:

如本人以前文章中的变量定义形式一样,全局变量使用“gv”(global variable)开头,局部变量(本地变量)则以“lv”(local variable)开头。


  • gv游戏状态:描述游戏的不同阶段,共有4种值:未开始,开始游戏,游戏成功,游戏失败。
  • gv声音开:用于描述全局中游戏声音开关是否打开:1——打开;0——关闭。
  • gv得分:计算游戏得分,初始为0,每摘到一颗星星,得1分,对应于游戏屏幕左上角的金币数。
  • gv生命值:这个生命值对应于屏幕左下方的生命进度条,使用6个造型分别代表小怪物的生命值大小(起始有最大6条命)。
  • gvStarDuration:小星星生命持续时间长度,超出这个时间长度,星星会隐藏起来。
  • gvMaxStarDuration:小星星生命持续时长最大值,默认为5。
  • gvMinStarDuration:小星星生命持续时长最小值,默认为3。
    其他私有变量,在后面介绍每一个角色编程时再一并介绍。

四、角色编程

(一)背景角色

有些人编程中,背景角色基本不进行编程。但是,经过一段时间的实践,本人认为在实现系统功能全局统筹与监管等功能时,使用背景角色来编程最合适。本游戏中,背景角色主要功能如下:


  • 系统全局变量的初始化
  • 背景音乐控制
  • 全局游戏进程的监管

对最后一个代码段作一下解释。开始按钮点击播放“开始游戏”消息,在接收到此消息后,创建一个无限循环,在这个循环中实现整个游戏系统的进程监听,并完成协调任务。根据前面描述,小怪物在游戏开始有6条命,当超过指定时限,生命值减一,由描述生命值的进度条指示。然后,重置计时器,再次循环,当生命值为0时,播放游戏失败的消息,并退出此无限循环。

在上述代码中,【告诉(...)执行】积木和【跳出循环】是编程猫特有的。其中,【告诉(...)执行】积木算是广播积木的简化形式,可以使用广播方式来代替。因为发出消息后,接收方仅完成极少量的工作;这种情况下,不需要使用广播方式转来转去,这种方式简化了此操作。【跳出循环】在此可以使用【停止(当前积木)】代替。

(二)小怪物角色

共有四部分代码:

(1)本地(私有)变量初始化

(2)按键编程

(3)跳跃编程

(4)水平方向行走速度编程

本处定义了5个局部变量。其中前面两个变量是布尔类型(编程中经常使用取值仅为1和0的这种特殊整数类型代码),分别用于指示是向左还是向右加速移动。第3个变量代表水平方向移动的速度,第4个是水平方向最大速度,最后一个是水平方向加速度,后面几个变量的值需要根据游戏中实际需要不断调整。

这段代码功能有二:实现跳跃(跳起与下落);播放跳跃声音。

这段代码的功能是,根据移动方向计算水平移动速度。两个物理公式:

  • v=at
  • s=vt
    前面提到,加速度是一个经验值(就是根据游戏需要人为不断调整),那么时间t是怎么来的?我使用的是Cocos Creator中的默认值(Cocos Creator是国内著名的基于Cocos2d-x框架的使用JavaScript开发的内容创作系统,它的默认屏幕刷新频率是1/60,即1秒刷新60次)。因此,上面的0.0167是1/60的大约计算结果。

另外,这里设置了一个速度最大值,因为当移动速度达到相当大时,游戏难度太大,让玩家挫败感太强,有可能导致其放弃。

(三)星星角色

共有两段代码。

在初始化中,定义了一个描述星星与小怪物合适距离的局部变量,当距离小于这个变量值时,认为小怪物摘到星星。这也是一个经验值变量,读者可以不断调整使用。

第二段代码中,只要游戏不结束,循环一直运行下去。当星星与小怪物的距离满足条件,加分,播放音效,并隐藏。这里作了简单处理,即隐藏后稍微等一些时间,再出现在另外一个位置。这个另外位置的计算是一个难点。

位置的计算中,既要考虑到舞台的实际宽度,还要考虑地面位置Y坐标,还要考虑到随机数使用。这一行最长的代码需要结合经验值作仔细调整测试。

接下来,这里定义了两个变量:gvMaxStarDuration和gvMinStarDuration,分别代表星星的最大存活时限与最小存活时限,默认是5和3。当前存活时限变量是gvStarDuration,它的计算也是使用随机数,并结合经验公式推断出来的。在此不作过细的介绍。

接下来的几个角色代码简单,在此仅列出,不作过多解释。

(四)其他角色

1.游戏失败角色代码

2.地面角色代码

3.生命值进度条代码

4.声音角色代码

5.开始按钮角色代码

五、小结

本文介绍使用编程猫Kitten编辑器开发一款小游戏《摘星星小怪物》的完整过程。通过该游戏的开发过程有助于你深入了解使用编程猫Kitten编辑器的完整过程和技术难点,从而为进一步深入灵活应用编程猫开发各种创意程序打好基础。游戏中的最大难点在于结合物理知识经验值的确定,例如,小怪物移动速度、小星星出现的随机位置与间隔时间等。有兴趣的朋友,可以基于此作进一步扩展研究,例如在如下方面:

  • 引入克隆技术,创建多个小星星,增加游戏难度,形成多关卡游戏
  • 摘到星星与星星消失时使用动画特效
  • 引入道具改进小怪物摘取星星的方法......