![]() |
![]() ![]() |
![]() |
|
2019-05-21, 12:26
Post
#1
|
|||
GEEKs will Eventually Evolve into Kryptonians. | All my jokes are cries for help. ![]()
Group: Avatar Posts: 1108 Joined: 2008-05-18 Member No.: 21346 ![]() |
QUOTE 一线断时,落落磊磊。 ## 游戏简介 《真菌洞窟(Fungus Cave)》([Github 页面](https://github.com/Bozar/FungusCave),[英文博客](https://github.com/Bozar/DevBlog/wiki/Latest))是一款单人、回合制 Unity Roguelike 游戏,最新版本是 [0.2.0](https://github.com/Bozar/FungusCave/releases)。[上个月](https://trow.cc/board/showtopic=48445)以来主要做了四件事情: * 改进存档功能,使用事件(event)传递数据。 * 新增第三层地下城。 * 新增甲虫再生机制。 * 新增冲刺模式。 » Click to show Spoiler - click again to hide... « 图 1:演示动画,五月。 » Click to show Spoiler - click again to hide... « 图 2:演示动画,四月。 这款游戏已经做完了,大家感兴趣的话可以玩一玩。回顾整个开发过程,写代码用了八个月,在那之前花了两个月学习 C# 和 Unity——我觉得一个人的时间非常有限,一定要合理安排。 最后一篇开发日志讨论两个话题:用事件传递数据,设计敌人:2。 » Click to show Spoiler - click again to hide... « 图 3:《空条承太郎想对我告白》 ## 用事件传递数据 [四月开发日志](https://trow.cc/board/showtopic=48445) 谈过存储和读取游戏数据,这个月做了一些改进。首先回顾一下从二进制文件到游戏对象的数据管道: * [ 二进制文件 <--> SaveLoadFile ] <--> [ SaveLoadGame ] <--> [ 游戏对象 Y ] [SaveLoadGame](https://github.com/Bozar/FungusCave/blob/master/Assets/Scripts/SaveLoadGame.cs) 为了传递或者读取数据,需要和大量游戏对象沟通,我们不妨在 SaveLoadGame 内部定义两个事件: » Click to show Spoiler - click again to hide... « 图 4:事件与事件参数。 游戏对象订阅上述两个事件,并实现接口 ISaveLoadBinary,它的数据就能被保存和读取了。接口定义在 [SaveLoadFile](https://github.com/Bozar/FungusCave/blob/master/Assets/Scripts/SaveLoadFile.cs) 内部。 » Click to show Spoiler - click again to hide... « 图 5:接口定义。 举个例子。假如我们要保存 Person 对象的 Salary: » Click to show Spoiler - click again to hide... « 图 6:保存数据。 读取存档的时候,我们根据 IDataTemplate.DTTag 筛选数据: » Click to show Spoiler - click again to hide... « 图 7:读取数据。 ## 设计敌人:2 [三月开发日志]() 介绍了怎样设计出一系列敌人原型,这里谈谈如何给原型添加数据。《真菌洞窟》的地下城共三层,每层的敌人组成和敌人数据见以下两张表格: » Click to show Spoiler - click again to hide... « 图 8:敌人组成。 » Click to show Spoiler - click again to hide... « 图 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 一对一战斗时不会吃亏,一旦被围攻极有可能死亡。这是为了鼓励玩家有策略地移动,利用地形分隔敌人。接下来,我们添加更多数据创造出有特色的的敌人,比方说行动能量、攻击感染率等等,这里不详细说了。 最后留一道思考题。既然人类的能力是有极限的,那么一台塔奇克马的最大输出功率相当于多少个御坂美琴? » Click to show Spoiler - click again to hide... « 图 10:I wonder what she does when she wakes up. |
|||
![]() ![]() ![]() |
Copyright © 2005-2019 The Ring of Wonder | Time is now: 2019-12-13, 16:05 |