# Dark Forest 星球能量增长机制

By [EliteMetaverse](https://paragraph.com/@elitemetaverse) · 2021-12-06

---

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](https://storage.googleapis.com/papyrus_images/3ec3069f263bb11c553ef46eb4922f76f8679c37deee965c5af4ff273f345f70.png)

Energy Update Code

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

![Energy Update Formula](https://storage.googleapis.com/papyrus_images/76a4897c0a68a338d17d8c472b57a6258dfbd7f7333f05e2a01aea58f5a2cc4f.png)

Energy Update Formula

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

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

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

![Energy Lazy Growth Curve](https://storage.googleapis.com/papyrus_images/9ff5dc937ecbdab4de634347684f1fd7041b67e186fb614b2d2eba08546c6343.png)

Energy Lazy Growth Curve

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

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

![Energy Lazy Growth Curve for Lv9 Plant](https://storage.googleapis.com/papyrus_images/8f5a759169f92c2b227cea218d77a9be695aad08cbe3b63a982117d14be755fc.png)

Energy Lazy Growth Curve for Lv9 Plant

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

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

![Energy Lazy Decay Curve](https://storage.googleapis.com/papyrus_images/4000e5e80f6b460c6478896a08a921cd74a6cebc037f63e7f1e609347a728f75.png)

Energy Lazy Decay Curve

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

By:[EliteMetaverse.eth](https://twitter.com/amolisi_)

![](https://storage.googleapis.com/papyrus_images/84b3f1a0781c3262e16326ba62c0ba8df8480d3dd4857a24b9cb6c8d02bb47e2.jpg)

---

*Originally published on [EliteMetaverse](https://paragraph.com/@elitemetaverse/dark-forest-3)*
