Dark Forest 星球能量增长机制
December 6th, 2021

Dark Forest中一个很重要的概念是”Energy“,它代表了星球的能量,星球的能量会随着时间的推移不断增加,直到到达星球的能量上限,通过发送能量可以攻击占领其他星球或增强己方星球,围绕能量这一核心概念,可以展开极为精彩的星际战役。事实上在Dark Forest底层合约中,Energy其实是用Population来代表的,但在UI中,使用了Energy进行代替,这样一来是不是好理解一点了?

Dark Forest老手玩家们很快就会发现星球能量的增长似乎不是线性的,而是与星球发送能量后所剩余的能量相关,事实上的确如此,Dark Forest中的星球能量增长使用了一种Lazy Update的机制。

首先Dark Forest是一款Crypto-Native的游戏,所有的数据都在链上,没错,又是Crypto-Native,因此Dark Forest中的星球能量状态是不可能实时更新的,这样的Gas花费太高了,同时也会带来不必要的通讯花销。因此Dark Forest中的星球能量状态只在进行交互时更新,发送能量时,Dark Forest会计算星球的剩余能量,并记录一个时间戳,等到再次发送或收到能量时,通过两个时间戳的间隔来计算星球的能量增长情况并进行更新,这就是所谓的Lazy Update。因此玩家们在客户端看到的星球能量数值并不是链上真实值,而是根据之前的剩余能量和时间戳计算得出的。

Dark Forest中计算能量的代码如下:

Energy Update Code
Energy Update Code

说实话,这段代码不是太好看懂,因此我们把它转换一下,基本就是下面这个公式:

Energy Update Formula
Energy Update Formula

从上面的公式中可以看出,星球的Energy(population)和以下几个因素有关,星球的能量上限、能量增长率、上次交互后剩余的能量以及两次交互间的间隔时间。

当然仅从公式上还是不太容易看出这几个因素之间的关系,我们可以将能量增长曲线绘制出来,方便我们观察。

现在假设有一颗5级的星球,能量上限为259K,能量增长率为6.48,那么根据上次交互后剩余的能量以及两次交互间的间隔时间,我们可以绘制出它的能量增长曲线:

Energy Lazy Growth Curve
Energy Lazy Growth Curve

从图中我们可以看出,能量的增长曲线基本是一条S曲线,开始时增长缓慢,中间有一条高速增长期,然后增长率又减缓,因此玩家在星球上发送能量时,不能将所有的能量都发送出去,这样的话,会导致原有的星球能量恢复异常缓慢,这个发送的临界值大约是星球能量上限的五分之一左右,这样星球就会立即进入能量高速增长期。

上述的能量比例是由曲线结构确定的,因此对于任何等级的星球都是适用的,下面我们再选取一颗9级星球进行测试,其能量上限为4M,能量增长率为20.73,能量增长曲线如下:

Energy Lazy Growth Curve for Lv9 Plant
Energy Lazy Growth Curve for Lv9 Plant

通过对比两张图的曲线会发现,星球的能量上限和能量增长率并未改变曲线的形状,只是影响了能量增长到上限的时间比例。因此发送能量的临界值相对于星球能量上限的比例也不会发生变化,大约是五分之一。

Dark Forest玩家有时会发现,星球所能承受的能量会高于能量上限,然会迅速下降到能量上线,这也是由上述公式决定的,我们假设上述9级星球的能量为5M,那么它的能量下降曲线如下:

Energy Lazy Decay Curve
Energy Lazy Decay Curve

同一个公式能够实现能量增长和能量下降两种功能,不得不说是非常精妙的设计。

By:EliteMetaverse.eth

Subscribe to EliteMetaverse
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from EliteMetaverse

Skeleton

Skeleton

Skeleton