大家好,我是小坤
指令方塊計算機這種東西
從【1.5】就埋藏在我心底很久了
一直找不到機會好好的寫一篇文章
乘著這天時地利人和的時光
讓我將這份感動分享給看這篇文章的你吧
前導
從紅石剛出現在Minecraft以來
蓋一台計算機總是許多玩紅石人的夢想
後來的版本新增紅石中繼器
延長訊號再也不需要透過邏輯閘的幫忙
【1.5】以後,由於記分板的盛行
利用指令方塊蓋一台計算機再也不是夢想
【1.7】以後,由於(setblock)指令
指令就算不藉由記分板還是可以蓋出計算機
本論
因為二進位計算機主要是限制於紅石以往不是亮就是暗這個限制
導致計算的時候還是以二進位為主會比較方便
但是記分板可就不同了
記分板可以輕鬆的突破這個限制
所以我們便可以用好懂的十進位來做計算
加法
指令方塊計算機應用到程式學上的大數運算
也就是用一個數字陣列來代表某個很大的數
換句話說是很多個數字組成一個數
比如說100這個數字如果用大數來儲存的話
就會被儲存成1、0和0三個數字
那麼,藉由這個概念便可以造出第一台計算機了
首先,我們假設一條計算式子:A+B=C
於是我們先把這三個變數,也就是值會變動的數
先利用記分板建立起來
/scordboard objectives add a dummy
/scordboard objectives add b dummy
/scordboard objectives add c dummy
這三個指令代表新增一個分別叫做a、b和c的記分板
讓我們先給這些記分板一個數值吧
假設我們想要計算的式子是:1+2=?
那麼我們就要先將a設定成1、b設定成2
/scordboard players set @p a 1
/scordboard players set @p b 2
眼尖如你的玩家可能已經發現了
記分板計算機最為人詬病的地方
就是記分板計算機一定要在某個玩家身上計算
但這是無法避免的
指令方塊計算機最大的優點是快又體積小
但是最大的缺點便是這一塊了
一直到【1.7】才有另外一種形式的指令方塊計算機
那麼,讓我繼續帶領各位進入計算機的世界吧
在加法中,c必須要加上a和c兩個值才行
我們就來試著學習如何相加吧
/scoreboard plarers add @p[score_a=1,score_a_min=1] c 1
這代表將a是1的時候,把c加1
其中中括弧內score_a=1這個條件要正確
a必需小於等於1
中括弧內score_a_min=1這個條件要正確
a必需大於等於1
如果兩個條件都要正確的話
a必需等於1才行
這樣有什麼好處呢?
/scoreboard plarers add @p[score_a=1,score_a_min=1] c 1
/scoreboard plarers add @p[score_a=2,score_a_min=2] c 2
/scoreboard plarers add @p[score_a=3,score_a_min=3] c 3
/scoreboard plarers add @p[score_a=4,score_a_min=4] c 4
/scoreboard plarers add @p[score_a=5,score_a_min=5] c 5
/scoreboard plarers add @p[score_a=6,score_a_min=6] c 6
/scoreboard plarers add @p[score_a=7,score_a_min=7] c 7
/scoreboard plarers add @p[score_a=8,score_a_min=8] c 8
/scoreboard plarers add @p[score_a=9,score_a_min=9] c 9
只要偵測a是1~9的數字,c就加上1~9
便可以將a的值給c了
如果後面還想用到a的話,a的值還必需要歸零
/scoreboard players set @p a 0
同理,b也是一樣的方法將值給c
說到這裡,可能有些人已經產生疑問了
如果在9+9的情況下c就會超過10
又該怎麼辦呢?
這時,我們將c的數字新增一個十位的記分板
/scoreboard objectives add c1 dummy
接著進行所謂的進位
當c的值超過十的時候
c真正的值應該是c-10
/scoreboard players remove @p[score_c_min=10] c 10
而c1必需+1
/scoreboard players add @p[score_c_min=10] c1 1
其中,如果c已經從十以上的數字變回1~9的話
c1永遠無法+1
所以實際的狀況應該要反過來
讓c1先加再讓c被扣掉
/scoreboard players add @p[score_c_min=10] c1 1
/scoreboard players remove @p[score_c_min=10] c 10
好了,以上就是指令方塊加法計算機的部份
不知道各位是否清楚整個運作原理呢?
如果還是有些不清楚的話
我將整個計算機會用到的指令全部打在下面
其中通電順序是指令被觸發的順序
如同上面的進位,c可不能先被扣除呢!
通電順序1
/scordboard objectives add a dummy
/scordboard objectives add b dummy
/scordboard objectives add c dummy
通電順序2
/scoreboard plarers add @p[score_a=1,score_a_min=1] c 1
/scoreboard plarers add @p[score_a=2,score_a_min=2] c 2
/scoreboard plarers add @p[score_a=3,score_a_min=3] c 3
/scoreboard plarers add @p[score_a=4,score_a_min=4] c 4
/scoreboard plarers add @p[score_a=5,score_a_min=5] c 5
/scoreboard plarers add @p[score_a=6,score_a_min=6] c 6
/scoreboard plarers add @p[score_a=7,score_a_min=7] c 7
/scoreboard plarers add @p[score_a=8,score_a_min=8] c 8
/scoreboard plarers add @p[score_a=9,score_a_min=9] c 9
/scoreboard plarers add @p[score_b=1,score_b_min=1] c 1
/scoreboard plarers add @p[score_b=2,score_b_min=2] c 2
/scoreboard plarers add @p[score_b=3,score_b_min=3] c 3
/scoreboard plarers add @p[score_b=4,score_b_min=4] c 4
/scoreboard plarers add @p[score_b=5,score_b_min=5] c 5
/scoreboard plarers add @p[score_b=6,score_b_min=6] c 6
/scoreboard plarers add @p[score_b=7,score_b_min=7] c 7
/scoreboard plarers add @p[score_b=8,score_b_min=8] c 8
/scoreboard plarers add @p[score_b=9,score_b_min=9] c 9
通電順序3
/scoreboard players add @p[score_c_min=10] c1 1
通電順序4
/scoreboard players remove @p[score_c_min=10] c 10
後計
雖說很想要再向各位分享減法、乘法與除法的作法
但在打完加法以後我也精疲力竭了
總之,下次再分享吧(光速逃