Welcome Guest ( Log In | Register )

欢迎访问本站。游客仅能浏览首页新闻、版块主题、维基条目与资源信息,需登录后方可获得内容发布、话题讨论、维基编辑与资源下载等权限。若无账号请先完成注册流程。
 
Reply to this topicStart new topic
> 《真菌洞窟(Fungus Cave)》五月开发日志
Bozar
2019-05-21, 12:26
Post #1


GEEKs will Eventually Evolve into Kryptonians. | All my jokes are cries for help.
Group Icon
 1198
   73

Group: Avatar
Posts: 1106
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.


TOP
Fast ReplyReply to this topicStart new topic
 


Time is now: 2019-10-17, 23:15