Dark Forest 星球能量增长机制
0xBFEe
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

Arweave TX
YEDHQiM-8dEy4aQuJ5n3WHZVzopIdhR6ObF4oCWHZOU
Ethereum Address
0xBFEe73e88b4257C6a13854c746F32a29fCB9EfD5
Content Digest
L5PtQlpgzpaOuPFpdrA9ZIs3PgrNuVDuTSSqKY_70Yw