《真菌洞窟(Fungus Cave)》五月开发日志
游戏简介
《真菌洞窟(Fungus Cave)》(Github 页面,英文博客)是一款单人、回合制 Unity Roguelike 游戏,最新版本是 0.2.0。上个月 以来主要做了四件事情:
- 改进存档功能,使用事件(event)传递数据。
- 新增第三层地下城。
- 新增甲虫再生机制。
- 新增冲刺模式。
图 1:演示动画,五月。
图 2:演示动画,四月。
这款游戏已经做完了,大家感兴趣的话可以玩一玩。回顾整个开发过程,写代码用了八个月,在那之前花了两个月学习 C# 和 Unity---- 我觉得一个人的时间非常有限,一定要合理安排。
最后一篇开发日志讨论两个话题:用事件传递数据,设计敌人:2。
图 3:《空条承太郎想对我告白》
用事件传递数据
四月开发日志 谈过存储和读取游戏数据,这个月做了一些改进。首先回顾一下从二进制文件到游戏对象的数据管道:
- [ 二进制文件 <--> SaveLoadFile ] <--> [ SaveLoadGame ] <--> [ 游戏对象 Y ]
SaveLoadGame 为了传递或者读取数据,需要和大量游戏对象沟通,我们不妨在 SaveLoadGame 内部定义两个事件:
图 4:事件与事件参数。
游戏对象订阅上述两个事件,并实现接口 ISaveLoadBinary,它的数据就能被保存和读取了。接口定义在 SaveLoadFile 内部。
图 5:接口定义。
举个例子。假如我们要保存 Person 对象的 Salary:
图 6:保存数据。
读取存档的时候,我们根据 IDataTemplate.DTTag 筛选数据:
图 7:读取数据。
设计敌人:2
三月开发日志 介绍了怎样设计出一系列敌人原型,这里谈谈如何给原型添加数据。《真菌洞窟》的地下城共三层,每层的敌人组成和敌人数据见以下两张表格:
图 8:敌人组成。
图 9:敌人数据。
我们考虑一种最简单的情况:PC 和 NPC 站在相邻位置,轮流攻击,攻击必定命中,那么:
- 最终谁能活下来?
- 如果 PC 存活,那么他攻击了多少次?
PC 和 NPC 的资源发生了两种交换:
- PC 的伤害值 --> NPC 的生命值
- NPC 的伤害值 --> PC 的生命值
第一种交换是指 PC 用 3 点伤害"购买"NPC 的 3 点生命,这里涉及到两个问题:
- 我们能否给 PC 的伤害指定三个数值:低伤害,普通伤害和高伤害?
- 需要多少次攻击才能杀死拥有普通生命值和高生命值的 NPC?
在这个游戏里,PC 的普通伤害是 2 点,最小和最大值分别是 1 和 3。平均来说,需要 3 次攻击杀死普通生命值的敌人(动物和软泥),5 次攻击杀死高生命值的敌人(不死生物)。
现在来看第二种资源交换。假如 PC 攻击 3 次杀死目标,那么他将受到几次反击呢?如果 PC 先行动,受到 2 次反击;如果后行动,3 次反击----详见图 9 中的"命中下限"和"命中上限"。我们分三步确定 NPC 的伤害值和 PC 的生命值:
- 为 NPC 的伤害指定三个数值:低伤害,普通伤害和高伤害。
- 根据上述数值,确定 PC 可能受到的伤害总量。
- 根据伤害总量确定 PC 的生命值。
PC 的最大生命值是 10,略低于 NPC 造成的伤害总量,这背后涉及到两条规则:
- PC 生命值低于 1 时,自动消耗 1 瓶药剂,生命值恢复到最大值。如果没有剩余药剂,PC 死亡。
- 大部分敌人被击杀后掉落 1 瓶药剂。
因此,不考虑其它因素,PC 和 NPC 一对一战斗时不会吃亏,一旦被围攻极有可能死亡。这是为了鼓励玩家有策略地移动,利用地形分隔敌人。接下来,我们添加更多数据创造出有特色的的敌人,比方说行动能量、攻击感染率等等,这里不详细说了。
最后留一道思考题。既然人类的能力是有极限的,那么一台塔奇克马的最大输出功率相当于多少个御坂美琴?
图 10:I wonder what she does when she wakes up.
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: