目錄
一、紅石模電計算簡介二、比較器
三、強模電
四、基本元件
五、基本運算
一、紅石模電計算簡介
普通對於電路的計算,依靠的都是藉由數位的訊號處理方式達成效果。
在Minecraft中,透過比較器,我們可以實現以類比概念進行運算的電路,稱為紅石模電。
模電即模擬電路,是對岸對於類比電路的稱法。
台灣對於該領域幾近無相關討論,因此我使用對岸的用語,以便有人看到相關資料時方便上網查。然而,Minecraft裡的模電與現實類比電路有一定的差異性,因此使用"紅石模電"特指遊戲裡的模擬電路討論。
本篇文章不大會提及現實中的電路,因此以下使用的"模電"字眼大多表示為紅石模電。
以紅石模電進行運算擁有諸多優點,例如體積小、速度快、儲存容量大等等,經特別設計的紅石模電計算電路相較於傳統數位紅石電路的體積差距可至近百倍,個人認為模電在Minecraft裡有著相當大的潛力。但相對的,紅石模電的電路設計普遍也較為困難,除邏輯較數電複雜以外,Minecraft本身也給予了一些運用上的限制。只要耐心去思考這些模電元件背後的原理,相信理解模電不是件難事。
本篇文章介紹基本的紅石模電運用,往後有機會的話再對更進階的模電電路做介紹。
二、比較器
上圖為處於減法模式的比較器
A、B端為輸入端
C端為輸出端
C端輸出值 = A - B
由於不存在負值訊號,因此只當 A > B 時,C端才會有輸出
當兩個B端都有訊號輸入時,比較器會在兩個訊號之間取大值進行計算
比較器的減法模式是模電運算的基礎,運作方式有些類似於現實類比電路中的運算放大器
對於模電計算只需要了解這樣的計算特性即可
關於比較器,詳細的特性在下面連結有介紹
三、強模電
紅石訊號有所謂 弱模、強模 的分別
弱模訊號即是一般所見,訊號強度大小界於1~15的紅石訊號
強模訊號則是介於16~2147483647的訊號,可稱為強模電
強模訊號可以透過在容器內堆疊數量超過正常上限值的物品,或者設定指令方塊的SuccessCount實體值,再以比較器輸出取得。SuccessCount實體值的有效範圍為0~2147483647。
以下是取得具SuccessCount實體值之指令方塊的指令,將其中的中文替換掉即可:
/give @p minecraft:command_block 1 0 {display:{Name:"方塊名稱"},BlockEntityTag:{SuccessCount:訊號強度}}
以下是關於強模電的重要特性:
1. 強模訊號只能存在於比較器、不透明方塊和指令方塊中
2. 當強模訊號進入比較器、不透明方塊以外的紅石線路,則強制衰減訊號強度為15
3. 指令方塊受到紅石訊號激活後,自身所帶有的紅石訊號強度歸零
4. 當多個訊號輸入於同一個不透明方塊時,依輸入朝向「上下 > 南 > 北 > 東 > 西」的優先級決定留存訊號
5. 進行留存訊號判斷時,訊號強度為15的弱模訊號與強模訊號等價
根據以上特性可延伸出以下運用上的要點:
1. 很遺憾,生存模式沒有取得強模訊號的手段,因此強模電並不是純生存可以運用的技術
2. 強模電若不轉換為弱模,則無法在不同高度之間傳輸,兩訊號交叉傳輸也較為困難
3. 阻斷強模訊號傳輸只有兩種方式,其一是使用活塞移開不透明方塊,其二是在優先級較原傳輸方向大的朝向輸入強度15的訊號,再將訊號減去15
4. 由於比較器只進行減法處理,因此對於生存玩家,某一高度平面所存在的最大訊號強度,即是這個高度所能處理的訊號強度上限
5. 在遊戲中每個高度都留下最高強度的強模訊號後,即可極似創造模式般的在生存模式中運用強模電
如對強模訊號的取捨優先級特性不清楚,可以參考下面的文章,有較為詳細的解說
四、模電基本元件
1. 弱模訊號儲存器
一個弱模訊號儲存器能儲存一筆0~15的訊號
但相對的,清除、重整資料相對於數電鎖存器可能就麻煩了一點
根據基本紅石特性,該元件在儲存較原數據更大的數時不需經過重整
而要儲存較原數據更小的數時不會直接覆蓋數據,重整在此是必要的
2. 弱模訊號傳輸(1)
模電訊號在傳輸方面不如數電快速方便
圖中介紹的是弱模傳輸相對靈活的一種傳輸方法
3. 弱模訊號傳輸(2)
這是弱模訊號傳輸最為快速的傳輸方式
但相對的較不靈活,占用體積也較大
4. 弱模解碼器
弱模解碼器的樣式多變
圖中介紹的是我覺得不錯的一種弱模解碼器
結構相當單純
強模通常很少去使用類似功能的元件
5. 強模訊號儲存器(1)
一個強模訊號儲存器能儲存一筆0~2147483647的訊號
由於存在訊號留存的優先級、弱模強模特性差異等問題,運用上要特別注意
若要清除資料,則不可避免的須使用活塞
儲存脈衝訊號可能會形成迴圈
6. 強模訊號儲存器(2)
遇到脈衝訊號可以穩定儲存的強模訊號儲存器
要留意比較器的擺法
五、基本運算
1. 減法
減法是模電運算的基礎
比較器本身即可簡單的實現減法
算法:A - B
2. 加法
加法須透過減法間接達成
算法:C - (C - A - B) = A + B
由於 C - A - B 不能為負
因此 A + B 不能 > C
3. 乘法
乘法透過連續的加法達成
算法:C - (C - A - A - ... - A) = C - (C - B個A) = A × B
(A顯示於左上,B顯示於左下,輸出顯示於上方)
以上述算法對照
圖中演示A = 4 , B = 3 , C = 15
將B逐次減去1 再依減去1的次數(即B值)依序打開A的傳輸路線
並使C減去B次的A 使C減去該值
即可得到A × B
同樣的,A × B無法大於C
強模乘法作法大同小異
若需減去的次數過大,通常會依位數逐個處理
4. 除法
除法透過連續的減法達成
算法(A/B):A + 1 - B - B - ... - B ≦ 0 時,減去B的次數-1為商,最後一個被減去的數-1為餘
舉例(7/3):7 + 1 - 3 - 3 - 3 ≦ 0。共減去3次3,因此商 = 3 - 1;7 + 1 - 3 - 3 = 2,因此餘 = 2 - 1 = 1
(A顯示於左方,B顯示於下方,餘數顯示於上方,商數以黑色圓圈表示)
圖中演示的是上述算法舉例的實例,A = 7,B = 3
被除數要 + 1、餘數要 - 1的原因是避免整除使商數出錯
(例:計算9 / 3,9 - 3 - 3 - 3 ≦ 0,會出現商為2,餘為3的錯誤)
強模除法的做法也差不多
同樣也是會使用逐個位數處理的手段達成兩個大數的除法
強模除法的元件做法富有彈性 可以對各自的需求進行設計