《戴森球計劃》中所謂的生產(chǎn)線設計,其理論根源應當是工廠的廠內(nèi)物流規(guī)劃設計,那么現(xiàn)在為大家?guī)怼熬摭堉ⅰ狈窒淼摹洞魃蛴媱潯肺锪魉吧a(chǎn)線設計指南,希望對大家有所幫助。
廠內(nèi)物流規(guī)劃設計
所謂廠內(nèi)物流如果去掉工作人員,那么我認為就有以下幾點:
生產(chǎn)線平衡。
工作地布置規(guī)劃。
物料存儲區(qū)規(guī)劃。
那么在游戲里,有體現(xiàn)的就比如:小小大工廠(Little Big Workshop),這個游戲如果你要真以用最快的速度完成的話,你就必須要考慮到上述三點。否則,你的員工就會滑水摸魚。
再比如異星工廠(Factorio),這個游戲的火車,本質(zhì)上就可以理解成“物料存儲區(qū)規(guī)劃”。在物流規(guī)劃里,這部分有幾個要素:
對于大價值的零件,要有最小臨時庫存。對于小價值零件,要根據(jù)包裝的收容數(shù)確定。
具體到游戲里,對于大價值零件。比如藍板,衛(wèi)星等。都是現(xiàn)場制作,現(xiàn)場使用。對于小價值零件,比如銅鐵礦,直接集中擺上若干個廠就完事。
包裝形式根據(jù)具體情況制定。
具體到游戲里,根據(jù)生產(chǎn)區(qū)的實際流量大小和生產(chǎn)要求。選用正確的包裝形式,要么選傳送帶上貨品,要么選無人機一次多個。
再者,需要考慮到工位(也就是每一個工廠)需要從包裝中取勝貨物的方法(比如人運,分揀器和機械爪)。那么這樣,一個工廠的基本結(jié)構(gòu)就出來了
考慮物流成本,物流成本在要綜合考慮廠區(qū)自身資金和供應商運輸壓力
具體到游戲里,所謂工廠本身的資金就是你的肝。玩這游戲,你的生產(chǎn)成本有兩個:一就是你的肝,二就是游戲里的地皮。而供應商的運輸壓力其實是不存在的。游戲里不存在供應商壓貨的需求。
在了解以上理論以后,再去掉游戲中根據(jù)不需要考慮的合理性要求。那么,設計一個工廠最簡單,最好想的形式就出來了:總線。
從這個角度考慮,物流塔的存在,使得物流成本大幅度降低。在物流成本極大降低增加的情況下,“物料存儲區(qū)規(guī)劃”就不存在問題。那么,玩家所說的游戲體驗降低就是一個客觀存在。
廠內(nèi)物流規(guī)劃設計-方法論
根據(jù)上述觀點,限制物流塔是必須的。那么,假定持有這種觀點,物流塔應當如何限制,才能保證游戲樂趣呢?同樣,也要從上述理論考慮:
1. 限制物流塔的數(shù)目是不足夠的,物流塔的存在就是一種技術突破。而對于任何一種理論,只要技術突破了就一定不能只從舊的理論的出發(fā)。比如,當相對論出現(xiàn)以后,雖然經(jīng)典物理體系一樣能用,但是用的時候就一定要注意使用范圍。
那么,對于這里也是一樣的。比如限制為:一星一塔三本地(即一個星球一個星際物流塔,三個本地物流塔),這個不能完全解決問題。一塔三本地就是5個物料輸入。那么我只要有兩個星球,就是二塔六本地。經(jīng)過簡單的設計,就可以避開限制。
具體到游戲里:最麻煩的綠糖,其實可以分成兩部分,引力透鏡和量子芯片。你給他溯源一下,就發(fā)現(xiàn),這兩種材料都可以在有三個星球的星系里,使用一星一塔三本地的限制,完成大規(guī)模生產(chǎn)。
2. 在不限制物流塔的情況下,可以考慮增加物流塔的成本壓力。對于現(xiàn)有的物流塔來說,他降低了運輸成本。那么,可以給他加回去,讓你用的時候要更加小心。雖然說,這游戲的主要成本是肝。但是實際上,在游戲里,運輸成本其實是電,飛船和曲鞘。因為運輸船每次外派都要消耗電,飛船和曲鞘。不過,這里飛船是可回收的。
那么,在這種情況下,增加運輸成本就有兩種思路:
* 增加消耗器的消耗,這個不可取。消耗器用肝就能補齊,而用肝補的東西都是惡心玩家。
* 增加飛船的消耗,這個可取,游戲里現(xiàn)在的飛船非常簡單無腦。那么,如果將星際飛船變?yōu)椤禭4:基石》的那種呢?即:星際飛船是一種需要玩家自行制作的,可以搭乘的,可以配置的中型產(chǎn)品。玩家生產(chǎn)每一架飛船都需要消耗巨量的物資,以此限制飛船數(shù)目。
同時,每一架飛船不再只服務于一個物流塔,而是可以服務于多個物流塔。那么這時,就需要設計星際間物流。這樣的修改是增加游戲內(nèi)容。
綜上,有如下建議:
1. 將星際物流塔的工作范圍限制在本星系
2. 在星系間,增加一個比如名為“貨棧”的巨構(gòu)。玩家需要首先建設“貨?!辈拍荛_啟跨星際運輸,物流塔把所有的星球資源送入“貨?!?/p>
3. 在“貨棧”里,玩家可以消耗大量資源建設星際運輸船。星際運輸船在建設以后,擁有超大量的空間,可以在貨棧之間運輸貨物。
那么這樣,看上去就比原來更加費肝。但是,這一些就不再建立在惡心玩家的基礎上了。好用的東西一樣好用,要你設計的東西還是要設計。而且,理論高度更上一層樓。異星工廠,你只是在一個星球上搞三搞四。
而這個方法,則是考慮在整個宇宙里遨游四方。
面向過程程序設計
我玩游戲有幾個層次和目的,一來是享受游戲本身的樂趣。二來是理解游戲的實現(xiàn)方式。三來是思考游戲?qū)ΜF(xiàn)實世界的啟發(fā)。那么具體到本游戲里,就是這樣的:
在沒有物流塔之前,生產(chǎn)線的設計是“自頂向下,逐步細化”這是一種面向過程的程序設計思路。在這種思想的指導下,就會有一個必然的產(chǎn)物:函數(shù)。人們總是期望復用已經(jīng)寫好的內(nèi)容和模塊。所以,在面向過程階段,使用了函數(shù)做為復用單元。什么是函數(shù)?函數(shù)就是根據(jù)指定輸入,輸出指定內(nèi)容。具體到游戲里,就是一個大家耳熟能詳?shù)脑~:黑盒。
所謂“黑盒”,在異星工廠那里,就是有設計過的生產(chǎn)線,用最低的成本設計一個生產(chǎn)效率最高的模塊。這個要求與函數(shù)何其的相像?在每一個程序里,程序員對于函數(shù)的設計都是無止境的,任何一個函數(shù)都需要進行優(yōu)化。這是我認為黑盒的理論來源。那么,如何優(yōu)化“黑盒”?如何優(yōu)化“函數(shù)”?優(yōu)化函數(shù)不過就是兩個指標“時間復雜度”,“空間復雜度”,那么優(yōu)化黑盒也是一樣。
具體到游戲里,你需要對黑盒的生產(chǎn)時間進行調(diào)整,選用合適的配方,可以讓黑盒在同樣的時間生產(chǎn)更多的內(nèi)容。選用合適的傳送帶布局,就可以讓你的黑盒更加緊湊。這對于每一個程序員而言,都是老本行。
我在公司培訓的時候,對于完全無基礎的員工,有要求他們?nèi)ネ嬉幌?異星工廠。我的作業(yè)很簡單,設計一個藍板的黑盒,不許抄別人的作業(yè),要從 “時間”和“空間” 兩個維度分析我為什么要這么設計。
面向?qū)ο蟪绦蛟O計
但是,物流塔的出現(xiàn)讓設計思想有了進一步的升華。物流塔出現(xiàn)以后,玩家可以使用模塊為單位對工廠進行設計。那么,這時指導理論就變成了面向?qū)ο蟪绦蛟O計。在面向?qū)ο蟪绦蛟O計中,需要考慮的問題就不再是某個函數(shù)的效率,而是整個系統(tǒng)的復用性。
那么,這時就會發(fā)現(xiàn),最優(yōu)解變成了面水黨。如果不知道怎么弄的可以參考我之前的帖子。這也是為什么我瘋狂的吹物流塔。我同樣給我的學生留了一個作業(yè):
在戴森球計劃里,如何體現(xiàn)“高內(nèi)聚,低耦合”的程序設計思想
那么,答案就很顯而易見,并且非常簡單了。面水黨通過把每種產(chǎn)物都分解開來,每個產(chǎn)物增加了不同的物流塔進行生產(chǎn),生產(chǎn)線之間沒有互相影響的情況。更換一個生產(chǎn)線,只要生產(chǎn)速度相同對整體沒有影響。這個就是“低耦合”。而生產(chǎn)線之間的生產(chǎn)過程使用工廠進行,修改時也只針對本工廠和本物流塔,這個就是“高內(nèi)聚”
那么,試問對于一個已經(jīng)進入面向?qū)ο箅A段的程序員。你要給他多少好處,才能讓他重回面向過程呢?我認為,現(xiàn)實里很簡單,你加點錢,不要說面向過程,面向二進制我也做。但是,游戲里我認為是給不起的。
領域驅(qū)動設計
在面向?qū)ο蟮某绦蛟O計里,有一個重要的概念就是“最小知識原則”對于一個類而言,他要認識最少的內(nèi)容。所以,才會有設計模式。比如工廠模式,就是通過“封裝性”隱藏掉了“具體的產(chǎn)品”,只向外界暴露出工廠類,產(chǎn)品抽象類 兩個知識。
那么,所謂“最小知識”就可以理解為一個概念的邊界。這就引出了現(xiàn)在最熱門的程序設計思想,領域驅(qū)動設計(DDD)。
具體到游戲里,每一個物流塔都可以感知到整個宇宙里所有其它的物流塔,那么就相當于他認識了全宇宙所有的知識,這顯然不符合一部分玩家的理解。那么,詬病他也是應該的,同樣,修改他的方法也不應該是限制他的數(shù)目。因為,一個類被實例化以后,你限制他在函數(shù)里的實例個數(shù),就相當逼迫程序多開幾個函數(shù)。這是完全搞人肝的做法,完全沒有意義。同樣,還是我剛才的建議:
1. 將星際物流塔的工作范圍限制在本星系
2. 在星系間,增加一個比如名為“貨?!钡木迾?gòu)。玩家需要首先建設“貨?!辈拍荛_啟跨星際運輸,物流塔把所有的星球資源送入“貨?!?/p>
3. 在“貨?!崩?,玩家可以消耗大量資源建設星際運輸船。星際運輸船在建設以后,擁有超大量的空間,可以在貨棧之間運輸貨物。
從程序設計思想的角度來看他,所謂“貨?!本褪且粋€模塊的邊界(接口)。只有“貨棧”才能開啟星際運輸,意味著只有“邊界”才能與其它模塊進行數(shù)據(jù)交換。
所謂星際物流塔只能在本星系工作,就是將領域的邊界明確化。本星系就是一個領域,他只負責生產(chǎn)一種/一些產(chǎn)品,而通過“邊界”與外界進行數(shù)據(jù)交互
所謂的“復雜星際運輸船”指的是領域間數(shù)據(jù)交換的成本。在DDD使用的場合里,數(shù)據(jù)的交換成本有些是很高的。所以用這個進行模擬。
同樣在的,在DDD里,“微服務”是一個很火熱的概念。那么,我的建議就可以理解為每一個星系都是微服務中一個模塊。星系運輸船相當于在微服務之間有帶寬限制的網(wǎng)絡環(huán)境。那么,如何設計就是一個可以研究和討論的問題。
全部評論