【阅读提示】编程猫中的源码编辑器是一款类似于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编辑器的完整过程和技术难点,从而为进一步深入灵活应用编程猫开发各种创意程序打好基础。游戏中的最大难点在于结合物理知识经验值的确定,例如,小怪物移动速度、小星星出现的随机位置与间隔时间等。有兴趣的朋友,可以基于此作进一步扩展研究,例如在如下方面:
- 引入克隆技术,创建多个小星星,增加游戏难度,形成多关卡游戏
- 摘到星星与星星消失时使用动画特效
- 引入道具改进小怪物摘取星星的方法......