作者:巨龍之息
來源:戴森球計畫吧
所謂廠內物流如果去掉工作人員,那麼我認為就有以下幾點:
生產線平衡。
工作地佈置規劃。
物料存儲區規劃。
那麼在遊戲裡,有展現的就比如:小小大工廠(Little Big Workshop),這個遊戲如果你要真以用最快的速度完成的話,你就必須要考慮到上述三點。否則,你的員工就會滑水摸魚。
再比如異星工廠(Factorio),這個遊戲的火車,本質上就可以理解成“物料存儲區規劃”。在物流規劃裡,這部分有幾個要素:
對於大價值的零件,要有最小臨時庫存。對於小價值零件,要根據包裝的收容數確定。
具體到遊戲裡,對於大價值零件。比如藍板,衛星等。都是現場製作,現場使用。對於小價值零件,比如銅鐵礦,直接集中擺上若干個廠就完事。
包裝形式根據具體情況製定。
具體到遊戲裡,根據生產區的實際流量大小和生產要求。選用正確的包裝形式,要麼選傳送帶上貨品,要麼選無人機一次多個。
再者,需要考慮到工位元(也就是每一個工廠)需要從包裝中取勝貨物的方法(比如人運,分揀器和機械爪)。那麼這樣,一個工廠的基本結構就出來了
考慮物流成本,物流成本在要綜合考慮廠區自身資金和供應商運輸壓力
具體到遊戲裡,所謂工廠本身的資金就是你的肝。玩這遊戲,你的生產成本有兩個:一就是你的肝,二就是遊戲裡的地皮。而供應商的運輸壓力其實是不存在的。遊戲裡不存在供應商壓貨的需求。
在了解以上理論以後,再去掉遊戲中根據不需要考慮的合理性要求。那麼,設計一個工廠最簡單,最好想的形式就出來了:匯流排。
從這個角度考慮,物流塔的存在,使得物流成本大幅度降低。在物流成本極大降低增加的情況下,“物料存儲區規劃”就不存在問題。那麼,玩家所說的遊戲體驗降低就是一個客觀存在。
根據上述觀點,限制物流塔是必須的。那麼,假定持有這種觀點,物流塔應當如何限制,才能保證遊戲樂趣呢?同樣,也要從上述理論考慮:
1. 限制物流塔的數目是不足夠的,物流塔的存在就是一種技術突破。而對於任何一種理論,只要技術突破了就一定不能隻從舊的理論的出發。比如,當相對論出現以後,雖然經典物理體系一樣能用,但是用的時候就一定要注意使用範圍。
那麼,對於這裡也是一樣的。比如限制為:一星一塔三本地(即一個星球一個星際物流塔,三個本地物流塔),這個不能完全解決問題。一塔三本地就是5個物料輸入。那麼我只要有兩個星球,就是二塔六本地。經過簡單的設計,就可以避開限制。
具體到遊戲裡:最麻煩的綠糖,其實可以分成兩部分,引力透鏡和量子晶片。你給他溯源一下,就發現,這兩種材料都可以在有三個星球的星系裡,使用一星一塔三本地的限制,完成大規模生產。
2. 在不限制物流塔的情況下,可以考慮增加物流塔的成本壓力。對於現有的物流塔來說,他降低了運輸成本。那麼,可以給他加回去,讓你用的時候要更加小心。雖然說,這遊戲的主要成本是肝。但是實際上,在遊戲裡,運輸成本其實是電,飛船和曲鞘。因為運輸船每次外派都要消耗電,飛船和曲鞘。不過,這裡飛船是可回收的。
那麼,在這種情況下,增加運輸成本就有兩種思路:
* 增加消耗器的消耗,這個不可取。消耗器用肝就能補齊,而用肝補的東西都是噁心玩家。
* 增加飛船的消耗,這個可取,遊戲裡現在的飛船非常簡單無腦。那麼,如果將星際飛船變為《X4:基石》的那種呢?即:星際飛船是一種需要玩家自行製作的,可以搭乘的,可以配置的中型產品。玩家生產每一架飛船都需要消耗巨量的物資,以此限制飛船數目。
同時,每一架飛船不再隻服務於一個物流塔,而是可以服務於多個物流塔。那麼這時,就需要設計星際間物流。這樣的修改是增加遊戲內容。
綜上,有如下建議:
1. 將星際物流塔的工作範圍限制在本星系
2. 在星系間,增加一個比如名為“貨棧”的巨構。玩家需要首先建設“貨棧”才能開啟跨星際運輸,物流塔把所有的星球資源送入“貨棧”
3. 在“貨棧”裡,玩家可以消耗大量資源建設星際運輸船。星際運輸船在建設以後,擁有超大量的空間,可以在貨棧之間運輸貨物。
那麼這樣,看上去就比原來更加費肝。但是,這一些就不再建立在噁心玩家的基礎上了。好用的東西一樣好用,要你設計的東西還是要設計。而且,理論高度更上一層樓。異星工廠,你只是在一個星球上搞三搞四。
而這個方法,則是考慮在整個宇宙裡遨遊四方。
我玩遊戲有幾個層次和目的,一來是享受遊戲本身的樂趣。二來是理解遊戲的實現方式。三來是思考遊戲對現實世界的啟發。那麼具體到本遊戲裡,就是這樣的:
在沒有物流塔之前,生產線的設計是“自頂向下,逐步細化”這是一種面向過程的程式設計思路。在這種思想的指導下,就會有一個必然的產物:函數。人們總是期望複用已經寫好的內容和模組。所以,在面向過程階段,使用了函數做為複用單元。什麼是函數?函數就是根據指定輸入,輸出指定內容。具體到遊戲裡,就是一個大家耳熟能詳的詞:黑盒。
所謂“黑盒”,在異星工廠那裡,就是有設計過的生產線,用最低的成本設計一個生產效率最高的模組。這個要求與函數何其的相像?在每一個程式裡,程式師對於函數的設計都是無止境的,任何一個函數都需要進行優化。這是我認為黑盒的理論來源。那麼,如何優化“黑盒”?如何優化“函數”?優化函數不過就是兩個指標“時間複雜度”,“空間複雜度”,那麼優化黑盒也是一樣。
具體到遊戲裡,你需要對黑盒的生產時間進行調整,選用合適的配方,可以讓黑盒在同樣的時間生產更多的內容。選用合適的傳送帶佈局,就可以讓你的黑盒更加緊湊。這對於每一個程式師而言,都是老本行。
我在公司教育訓練的時候,對於完全無基礎的員工,有要求他們去玩一下 異星工廠。我的作業很簡單,設計一個藍板的黑盒,不許抄別人的作業,要從 “時間”和“空間” 兩個維度分析我為什麼要這麼設計。
但是,物流塔的出現讓設計思想有了進一步的昇華。物流塔出現以後,玩家可以使用模組為單位對工廠進行設計。那麼,這時指導理論就變成了物件導向程式設計。在物件導向程式設計中,需要考慮的問題就不再是某個函數的效率,而是整個系統的複用性。
那麼,這時就會發現,最優解變成了面水黨。如果不知道怎麼弄的可以參考我之前的帖子。這也是為什麼我瘋狂的吹物流塔。我同樣給我的學生留了一個作業:
在戴森球計畫裡,如何展現“高內聚,低耦合”的程式設計思想
那麼,答案就很顯而易見,並且非常簡單了。面水黨通過把每種產物都分解開來,每個產物增加了不同的物流塔進行生產,生產線之間沒有互相影響的情況。更換一個生產線,只要生產速度相同對整體沒有影響。這個就是“低耦合”。而生產線之間的生產過程使用工廠進行,修改時也隻針對本工廠和本物流塔,這個就是“高內聚”
那麼,試問對於一個已經進入物件導向階段的程式師。你要給他多少好處,才能讓他重回面向過程呢?我認為,現實裡很簡單,你加點錢,不要說面向過程,面向二進位我也做。但是,遊戲裡我認為是給不起的。
在物件導向的程式設計裡,有一個重要的概念就是“最小知識原則”對於一個類而言,他要認識最少的內容。所以,才會有設計模式。比如工廠模式,就是通過“封裝性”隱藏掉了“具體的產品”,隻向外界暴露出工廠類,產品抽象類別 兩個知識。
那麼,所謂“最小知識”就可以理解為一個概念的邊界。這就引出了現在最熱門的程式設計思想,領域驅動設計(DDD)。
具體到遊戲裡,每一個物流塔都可以感知到整個宇宙裡所有其它的物流塔,那麼就相當於他認識了全宇宙所有的知識,這顯然不符合一部分玩家的理解。那麼,詬病他也是應該的,同樣,修改他的方法也不應該是限制他的數目。因為,一個類被產生實體以後,你限制他在函數裡的實例個數,就相當逼迫程式多開幾個函數。這是完全搞人肝的做法,完全沒有意義。同樣,還是我剛才的建議:
1. 將星際物流塔的工作範圍限制在本星系
2. 在星系間,增加一個比如名為“貨棧”的巨構。玩家需要首先建設“貨棧”才能開啟跨星際運輸,物流塔把所有的星球資源送入“貨棧”
3. 在“貨棧”裡,玩家可以消耗大量資源建設星際運輸船。星際運輸船在建設以後,擁有超大量的空間,可以在貨棧之間運輸貨物。
從程式設計思想的角度來看他,所謂“貨棧”就是一個模組的邊界(介面)。只有“貨棧”才能開啟星際運輸,意味著只有“邊界”才能與其它模組進行資料交換。
所謂星際物流塔只能在本星系工作,就是將領域的邊界明確化。本星系就是一個領域,他隻負責生產一種/一些產品,而通過“邊界”與外界進行資料交互
所謂的“複雜星際運輸船”指的是領域間資料交換的成本。在DDD使用的場合裡,資料的交換成本有些是很高的。所以用這個進行模擬。
同樣在的,在DDD裡,“微服務”是一個很火熱的概念。那麼,我的建議就可以理解為每一個星系都是微服務中一個模組。星系運輸船相當於在微服務之間有頻寬限制的網路環境。那麼,如何設計就是一個可以研究和討論的問題。