Screeps系列教程——介紹與初始優(yōu)化
游戲簡介
Screeps是一款MMORTS(大型多人在線即時策略游戲)。不同于傳統(tǒng)MMORTS,本游戲并非直接控制玩家單位,而是采用Javascript編寫代碼來構(gòu)建和管理它們垃环。由于每個玩家可用的CPU有限,因此我們需要編寫一個強大而又高效的AI來武裝自己。
教程說明
從學(xué)習(xí)本教程開始,結(jié)合Screeps-starter項目,你可以輕松地達到RCL(房間控制等級)4洋腮。這時你已經(jīng)有了足夠的經(jīng)驗進行一些改進與優(yōu)化箫柳。在本系列教程的后續(xù)部分,均假設(shè)你已經(jīng)熟悉教程或游戲文檔中的相關(guān)術(shù)語啥供。
房間發(fā)展思路
在著手于防御設(shè)計之前悯恍,我建議關(guān)注房間運維。因此伙狐,在初始階段涮毫,我們的主要目標(biāo)是升級房間控制器。這有利于解鎖額外建筑(特別是extension,storage和terminal)贷屎,這些結(jié)構(gòu)將有利于增加房間能量吞吐罢防,提高能量利用效率。與此同時唉侄,它也可以代表我們生產(chǎn)過程產(chǎn)生的能量剩余量咒吐。
為了最大化能量盈余,我們需要最大化我們的投入,一個房間中source的數(shù)量是固定的恬叹,并按固定的時間間隔重新補給候生。如果我們以10能量/tick的速率對每個source進行采集,便可以最大化我們的資源使用率绽昼。
當(dāng)我們的能量采集效率達到最高時唯鸭,便可以考慮能量傳輸?shù)膬?yōu)化問題。這包括road(效率提高),extension(體型設(shè)計),container & link(挖運分離)
輸入與輸出
我們的主要目的是升級房間控制器硅确。因此目溉,我們希望能夠最大限度地提高輸出(用于upgrade的能量)。首先疏魏,我們需要最大化我們的輸入停做。在RCL6之前,我們能量的唯一來源為房間內(nèi)source(包括主房與外礦)大莫,由上文可知蛉腌,10能量/tick的采集速率即可達到最大資源利用率。查閱官方API可知只厘,從RCL2開始烙丛,設(shè)計每個采礦爬攜帶5個WORK部件即可達到需求。
由于RCL6的terminal(市場)羔味,lab(boost)以及RCL8的powerspawn(power)離我們較為遙遠河咽,目前完全可以先將其忽略。因此赋元,現(xiàn)階段的瓶頸將是如何提高資源的運送效率忘蟹。
基本優(yōu)化
在新手教程以及游戲的初期,我們往往設(shè)置一個簡單的creep角色搁凸,它采集能量媚值,移動到控制器,然后進行升級护糖。項目Screeps-starter便是采用此邏輯褥芒。但值得注意的是,我們的spawn生產(chǎn)creep需要能源成本嫡良,而creep從source移動到controller又返回則需要額外的時間成本锰扶。因此,我們需要改進的就是如何利用好這段額外時間寝受。
最直接的方法便是利用此時間生產(chǎn)更多的爬坷牛,但這顯然不是最優(yōu)解——我們需要額外花費更多的能量,而這完全是可以避免的很澄。
那么我們該怎么做呢漓帅?最簡單的方法便是增加道路锨亏。道路可以減少我們的運輸時間,這一點在多沼澤房尤為顯著(但又引申出一個問題——該如何尋路忙干?我將在未來的教程中進行較詳細的講解)器予。
在修建道路的基礎(chǔ)上,我們還可以進一步改進以減小時間成本——挖運分離捐迫。這是成為Screeps大佬的第一步乾翔。當(dāng)我們的控制器等級達到2時(RCL2),我們可以生產(chǎn)體型為5WORK,1MOVE的礦工爬。由上文可知施戴,該爬可以以最大效率采集source反浓。如果它位于container上方,采集的能量便會落到地面上并自動掉入該容器中赞哗。這時我們只需要派遣帶有CARRY和MOVE部件的專用運輸機采集并轉(zhuǎn)移能量雷则。(關(guān)于road和container的維修問題將在后續(xù)教程中詳細討論)。
總結(jié)
本文主要介紹初始階段的發(fā)展與優(yōu)化方向肪笋,分析比較了能量采集與傳輸過程中的效率問題月劈,最后提出挖運分離方案,以減小額外時間成本藤乙,提高能量利用率猜揪。