Screeps系列教程——介绍与初始优化
游戏简介
Screeps是一款MMORTS(大型多人在线即时策略游戏)。不同于传统MMORTS,本游戏并非直接控制玩家单位,而是采用Javascript编写代码来构建和管理它们。由于每个玩家可用的CPU有限,因此我们需要编写一个强大而又高效的AI来武装自己。
教程说明
从学习本教程开始,结合Screeps-starter项目,你可以轻松地达到RCL(房间控制等级)4。这时你已经有了足够的经验进行一些改进与优化。在本系列教程的后续部分,均假设你已经熟悉教程或游戏文档中的相关术语。
房间发展思路
在着手于防御设计之前,我建议关注房间运维。因此,在初始阶段,我们的主要目标是升级房间控制器。这有利于解锁额外建筑(特别是extension,storage和terminal),这些结构将有利于增加房间能量吞吐,提高能量利用效率。与此同时,它也可以代表我们生产过程产生的能量剩余量。
为了最大化能量盈余,我们需要最大化我们的投入,一个房间中source的数量是固定的,并按固定的时间间隔重新补给。如果我们以10能量/tick的速率对每个source进行采集,便可以最大化我们的资源使用率。
当我们的能量采集效率达到最高时,便可以考虑能量传输的优化问题。这包括road(效率提高),extension(体型设计),container & link(挖运分离)
输入与输出
我们的主要目的是升级房间控制器。因此,我们希望能够最大限度地提高输出(用于upgrade的能量)。首先,我们需要最大化我们的输入。在RCL6之前,我们能量的唯一来源为房间内source(包括主房与外矿),由上文可知,10能量/tick的采集速率即可达到最大资源利用率。查阅官方API可知,从RCL2开始,设计每个采矿爬携带5个WORK部件即可达到需求。
由于RCL6的terminal(市场),lab(boost)以及RCL8的powerspawn(power)离我们较为遥远,目前完全可以先将其忽略。因此,现阶段的瓶颈将是如何提高资源的运送效率。
基本优化
在新手教程以及游戏的初期,我们往往设置一个简单的creep角色,它采集能量,移动到控制器,然后进行升级。项目Screeps-starter便是采用此逻辑。但值得注意的是,我们的spawn生产creep需要能源成本,而creep从source移动到controller又返回则需要额外的时间成本。因此,我们需要改进的就是如何利用好这段额外时间。
最直接的方法便是利用此时间生产更多的爬,但这显然不是最优解——我们需要额外花费更多的能量,而这完全是可以避免的。
那么我们该怎么做呢?最简单的方法便是增加道路。道路可以减少我们的运输时间,这一点在多沼泽房尤为显著(但又引申出一个问题——该如何寻路?我将在未来的教程中进行较详细的讲解)。
在修建道路的基础上,我们还可以进一步改进以减小时间成本——挖运分离。这是成为Screeps大佬的第一步。当我们的控制器等级达到2时(RCL2),我们可以生产体型为5WORK,1MOVE的矿工爬。由上文可知,该爬可以以最大效率采集source。如果它位于container上方,采集的能量便会落到地面上并自动掉入该容器中。这时我们只需要派遣带有CARRY和MOVE部件的专用运输机采集并转移能量。(关于road和container的维修问题将在后续教程中详细讨论)。
总结
本文主要介绍初始阶段的发展与优化方向,分析比较了能量采集与传输过程中的效率问题,最后提出挖运分离方案,以减小额外时间成本,提高能量利用率。