Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南 - 遊戲狂
廣告

Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南

請拿手機掃描此QRCODE

傳到手機看

2021-04-25

廣告

作者:sunny白水004

來源:缺氧吧

Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南

廣告

在聖誕打折時入了這個遊戲,被深深地迷住了,各種資源的迴圈利用、氣液固的轉化、溫度控制等等非常有意思,尤其是其中的自動化部分,研究起來真是樂趣無窮。下面分享我的一個研究成果,用門電路實現嚴格依序的過程迴圈。

先說一下事情的緣起,在建造汙水處理廠時發現,汙水池裡繁殖了大量細菌,即使經過淨化器處理也無法去除。開始我以為帶菌淨水只要不喝,拿來電解製氧就沒事,沒想到這神奇的外太空細菌連電解都殺不死啊,隨著氧氣在基地裡到處飄,實在不能忍。後來發現用液體加熱器把水加熱到75度以上就可以滅菌,於是設計了這樣的系統:
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南
左邊是帶菌水,經過中間的加熱池加熱到75度以上,然後排到右邊的公共淨水池。在實際做的時候發現,如果只是簡單的用溫度和水壓來控制泵和加熱器的話,很容易亂套。比如熱好的淨水還沒排淨,新的帶菌水又進來把淨水汙染了;或者淨水正排到一半溫度突然低了,加熱器又重新開始加熱等等。所以我希望設計這樣一套電路,能夠讓放水→加熱→排水這3個過程嚴格依照順序運行,並不斷迴圈。推而廣之,對於任意多個需要按順序運行的過程,都能做到只有過程n運行完畢,過程n+1才能夠開始,而其他所有過程則保持待機。如下圖所示:
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南
這裡的終止條件從各類感測器傳來,用於控制過程的終止。可以發現,這裡傳遞給下一過程的運行信號必須為脈衝信號,如果是持續信號的話,過程n+1則不能正常終止。既然是脈衝信號,那麼需要電路具備“自持”的能力,來把運行信號保持住。
基於以上思路,在反復實驗和簡化後,我找到了一種相對滿意的設計方案,如下圖:
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南

電路大佬可能看到這裡就明白了,下面給對電路不太熟的人再解釋一下。這個遊戲內電路的運作機制是,每0.1秒作為一個tick,一個門電路在當前tick的輸出值,取決於上一個tick的輸入值。其實電路值每一個tick都在刷新,所謂的“連續信號”只是連續很多tick的值都相同而已。以最簡單的反閘來舉例:
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南

開始時輸入0,輸出1。在tick2輸入變化為1,而此時反閘的輸出取決於tick1的輸入,所以仍然為1,直到tick3才根據tick2的輸入變成0。如果之後每個tick的輸入都相同,那麼輸出也一直不變,看起來就像是輸出連續的信號0一樣。

下面我們來細緻分析一下這個電路的工作過程:
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南
Tick1,設備在等待運行信號,沒有工作。
Tick2,前一個過程結束後傳來了運行信號,設備開始工作。
Tick3,外來運行信號消失,但由於上面及閘的輸出連回了輸入,可以把這個信號自我保持下去。
然後一直工作到Tick90都沒有發生變化。
Tick91,由感測器傳來的終止條件滿足了,但是及閘的輸出還要多等一個tick再改變。
Tick92,下方及閘輸出變為1,向下一個過程輸出了運行信號。
Tick93,上方及閘輸出變為0,設備停止工作。
Tcik94,下方及閘停止輸出,最終成功輸出了2個tick的運行信號脈衝給下一個過程。
通過分析可見,這個設計完全實現了之前的構思,嚴格按照順序運行每個過程並可不斷迴圈。

最後把遊戲裡的具體實現圖貼一下。
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南
需要注意的是,電路剛開始建成的時候不存在運行信號,所以在左下角加了一個手動開關,開一下再關掉,整個電路就可以正常運行了。

後來我還用這套設計建了個天然氣加熱系統,把所有的天然氣加熱到120度再燒掉,從中可以賺一些負熱量。
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南

後記:其實在學習了一些電路知識後(作者非電子專業),最開始是用RS觸發器做的,但是這種現實中的東西照搬到遊戲裡給人非常繁瑣的感覺,就想了很多辦法去簡化,最後才變成這個樣子。如果你還有更簡單的實現方法,歡迎一起來探討。

看到前面很多人說不懂,令我懷疑電路圖的講解方式過於抽象了,也許結合遊戲內的實際運行圖會更易懂些?我們先來看第一個過程“送水”工作時的運行圖:
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南
綠線表示值為1(啟動),紅線表示值為0(待命)。可見只有送水的水泵在工作,而藍箭頭所指的壓力感測器,當壓力高於900kg時,將控制送水過程終止。

下面來看第二個過程,加熱:

Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南

現在加熱器正在工作,當溫度感測器超過76度時,加熱過程即終止。

最後看第三個過程,排水:
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南
當壓力低於500kg時,感測器將使排水過程終止,之後啟動過程1,完成迴圈。

一. 脈衝發生器在輸入1變0的時候可以正常工作,但0變1的時候,會輸出1個tick的信號脈衝。原因是buffer門在遇到啟動信號時雖然直接通過,但由於遊戲機制,門電路的輸出由上一個tick的輸入決定,所以會產生1個tick的滯後,異或閘下方的啟動會比上方早到1個tick,就出現了錯誤的輸出。正確的做法是下圖這樣:
Oxygen Not Included (缺氧) 嚴格依序過程循環圖表文指南
上下兩路啟動信號同樣經過了2個tick的滯後,可以同時到達。

二. 當運行信號傳給下一過程時,下一過程的終止信號通常應該是0,但不排除會有1出現。比如新送進來的水由於某種原因是大於76度的,那麼熱水過程的終止信號會始終為1。送水結束後,電路應當能夠直接跳過熱水過程,進入排水過程。而你的設計會把運行信號擋住,無法繼續前進。你可能覺得這太少見了,但是著眼於設計一個普適的依序迴圈電路的話,外界傳來的終止信號存在各種可能,必須要有很好的適應性才行。

很高興碰到認真思考的電路同好,希望以後可以繼續探討。

廣告

廣告

遊戲資訊

缺氧 (Oxygen Not Included)

類別: 策略
平台: PC
開發: Klei Entertainment
發行: Klei Entertainment
上市: 2019-7-31

《缺氧》是一款透過Steam網路平台發行由Klei Entertainment製作的太空模擬策略遊戲,採用2D橫版布局,玩家需要管理複製人,讓他們挖掘、建立並維護起一個地下的基地,為此,玩家需要水、食物、氧氣、適當的調節壓力和適宜的溫度等條件來維持複製人生存並滿足他們的其他需求。

更多 缺氧 攻略|新聞

廣告
作者:sunny白水004 https://gamemad.com/guide/44377 來源:缺氧吧 https://gamemad.com/upload/images/2021/04/25/6084fe2dc3aac.jpg 在聖誕打折時入了這個遊戲,被深深地迷住了,各種資源的迴圈利用、氣液固的轉化、溫度控制等等非常有意思,尤其是其中的自動化部分,研究起來真是樂趣無窮。下面分享我的一個研究成果,用門電路實現嚴格依序的過程迴圈。 先說一下事情的緣起,在建造汙水處理廠時發現,汙水池裡繁殖了大量細菌,即使經過淨化器處理也無法去除。開始我以為帶菌淨水只要不喝,拿來電解製氧就沒事,沒想到這神奇的外太空細菌連電解都殺不死啊,隨著氧氣在基地裡到處飄,實在不能忍。後來發現用液體加熱器把水加熱到75度以上就可以滅菌,於是設計了這樣的系統: https://gamemad.com/upload/images/2021/04/25/6084fe350e8da.jpg 左邊是帶菌水,經過中間的加熱池加熱到75度以上,然後排到右邊的公共淨水池。在實際做的時候發現,如果只是簡單的用溫度和水壓來控制泵和加熱器的話,很容易亂套。比如熱好的淨水還沒排淨,新的帶菌水又進來把淨水汙染了;或者淨水正排到一半溫度突然低了,加熱器又重新開始加熱等等。所以我希望設計這樣一套電路,能夠讓放水→加熱→排水這3個過程嚴格依照順序運行,並不斷迴圈。推而廣之,對於任意多個需要按順序運行的過程,都能做到只有過程n運行完畢,過程n+1才能夠開始,而其他所有過程則保持待機。如下圖所示: https://gamemad.com/upload/images/2021/04/25/6084fe3bcaf7e.jpg 這裡的終止條件從各類感測器傳來,用於控制過程的終止。可以發現,這裡傳遞給下一過程的運行信號必須為脈衝信號,如果是持續信號的話,過程n+1則不能正常終止。既然是脈衝信號,那麼需要電路具備“自持”的能力,來把運行信號保持住。 基於以上思路,在反復實驗和簡化後,我找到了一種相對滿意的設計方案,如下圖: https://gamemad.com/upload/images/2021/04/25/6084fe429d0e6.jpg 電路大佬可能看到這裡就明白了,下面給對電路不太熟的人再解釋一下。這個遊戲內電路的運作機制是,每0.1秒作為一個tick,一個門電路在當前tick的輸出值,取決於上一個tick的輸入值。其實電路值每一個tick都在刷新,所謂的“連續信號”只是連續很多tick的值都相同而已。以最簡單的反閘來舉例: https://gamemad.com/upload/images/2021/04/25/6084fe4acb641.jpg 開始時輸入0,輸出1。在tick2輸入變化為1,而此時反閘的輸出取決於tick1的輸入,所以仍然為1,直到tick3才根據tick2的輸入變成0。如果之後每個tick的輸入都相同,那麼輸出也一直不變,看起來就像是輸出連續的信號0一樣。 下面我們來細緻分析一下這個電路的工作過程: https://gamemad.com/upload/images/2021/04/25/6084fe5179f39.jpg Tick1,設備在等待運行信號,沒有工作。 Tick2,前一個過程結束後傳來了運行信號,設備開始工作。 Tick3,外來運行信號消失,但由於上面及閘的輸出連回了輸入,可以把這個信號自我保持下去。 然後一直工作到Tick90都沒有發生變化。 Tick91,由感測器傳來的終止條件滿足了,但是及閘的輸出還要多等一個tick再改變。 Tick92,下方及閘輸出變為1,向下一個過程輸出了運行信號。 Tick93,上方及閘輸出變為0,設備停止工作。 Tcik94,下方及閘停止輸出,最終成功輸出了2個tick的運行信號脈衝給下一個過程。 通過分析可見,這個設計完全實現了之前的構思,嚴格按照順序運行每個過程並可不斷迴圈。 最後把遊戲裡的具體實現圖貼一下。 https://gamemad.com/upload/images/2021/04/25/6084fe5906ac6.jpg https://gamemad.com/upload/images/2021/04/25/6084fe61692c0.jpg 需要注意的是,電路剛開始建成的時候不存在運行信號,所以在左下角加了一個手動開關,開一下再關掉,整個電路就可以正常運行了。 後來我還用這套設計建了個天然氣加熱系統,把所有的天然氣加熱到120度再燒掉,從中可以賺一些負熱量。 https://gamemad.com/upload/images/2021/04/25/6084fe68aa2f1.jpg 後記:其實在學習了一些電路知識後(作者非電子專業),最開始是用RS觸發器做的,但是這種現實中的東西照搬到遊戲裡給人非常繁瑣的感覺,就想了很多辦法去簡化,最後才變成這個樣子。如果你還有更簡單的實現方法,歡迎一起來探討。 看到前面很多人說不懂,令我懷疑電路圖的講解方式過於抽象了,也許結合遊戲內的實際運行圖會更易懂些?我們先來看第一個過程“送水”工作時的運行圖: https://gamemad.com/upload/images/2021/04/25/6084fe6f896e8.jpg 綠線表示值為1(啟動),紅線表示值為0(待命)。可見只有送水的水泵在工作,而藍箭頭所指的壓力感測器,當壓力高於900kg時,將控制送水過程終止。 下面來看第二個過程,加熱: https://gamemad.com/upload/images/2021/04/25/6084fe7653989.jpg 現在加熱器正在工作,當溫度感測器超過76度時,加熱過程即終止。 最後看第三個過程,排水: https://gamemad.com/upload/images/2021/04/25/6084fe7d0f7a4.jpg 當壓力低於500kg時,感測器將使排水過程終止,之後啟動過程1,完成迴圈。 一. 脈衝發生器在輸入1變0的時候可以正常工作,但0變1的時候,會輸出1個tick的信號脈衝。原因是buffer門在遇到啟動信號時雖然直接通過,但由於遊戲機制,門電路的輸出由上一個tick的輸入決定,所以會產生1個tick的滯後,異或閘下方的啟動會比上方早到1個tick,就出現了錯誤的輸出。正確的做法是下圖這樣: https://gamemad.com/upload/images/2021/04/25/6084fe83bf6ba.jpg 上下兩路啟動信號同樣經過了2個tick的滯後,可以同時到達。 二. 當運行信號傳給下一過程時,下一過程的終止信號通常應該是0,但不排除會有1出現。比如新送進來的水由於某種原因是大於76度的,那麼熱水過程的終止信號會始終為1。送水結束後,電路應當能夠直接跳過熱水過程,進入排水過程。而你的設計會把運行信號擋住,無法繼續前進。你可能覺得這太少見了,但是著眼於設計一個普適的依序迴圈電路的話,外界傳來的終止信號存在各種可能,必須要有很好的適應性才行。 很高興碰到認真思考的電路同好,希望以後可以繼續探討。
https://gamemad.com/guide/44377
0