無論在現(xiàn)實(shí)世界還是《我的世界》中,隨機(jī)數(shù)都是一個有意思的東西,它可以用來抽獎,甚至還能用來設(shè)置密碼。不過事實(shí)上,利用計(jì)算機(jī)生成的隨機(jī)數(shù)都是偽隨機(jī)數(shù),嚴(yán)格的真隨機(jī)數(shù)并不存在,本篇教程中的隨機(jī)數(shù)生成器的目的是讓生成的隨機(jī)數(shù)更加接近真隨機(jī),利用這個生成器能夠生成0-255的隨機(jī)數(shù)。
一、基本原理:
首先我的世界中,物品分為可堆疊(羊毛)以及不可堆疊(鐵劍),他們在容器(漏斗)中可被比較器讀取,輸出不同的信號強(qiáng)度。在漏斗中,單一物品所輸出的信號強(qiáng)度,可堆疊物品為1,不可堆疊為3,這可以從下圖中紅石燈亮起的數(shù)目看出。
通過將投擲器與漏斗相連,我們得到投擲器-漏斗脈沖發(fā)生器,同時我們在投擲器中分別加入羊毛和鐵劍,來分析這種情況下投擲器會優(yōu)先輸出可堆疊還是不可堆疊物品。
按照上圖做一個高頻電路來控制投擲器-漏斗脈沖發(fā)生器,讓其不斷輸出信號,在具體操作中,我們發(fā)現(xiàn)紅石燈亮起的數(shù)目在1和3之間不斷隨機(jī)切換,因此我們可以發(fā)現(xiàn)投擲器投擲物品是隨機(jī)的。
二、最簡單的隨機(jī)數(shù)生成器
從一中的裝置我們知道了比較器輸出的信號強(qiáng)度會在1和3之間切換,因此我們可以將其改造成輸出0和1的裝置,即在比較器后三格處放一個紅石燈,這樣如果比較器輸出的信號強(qiáng)度為3,那么紅石燈亮,如果輸出強(qiáng)度為1則紅石燈滅。
有了這個基礎(chǔ)之后,我們就可以制作一個最簡單的隨機(jī)數(shù)生成器,如下圖所示,將這個裝置復(fù)制8份,這樣就變成了一個8位的隨機(jī)數(shù)生成器。將它們接入到高頻電路上,紅石燈會一直在亮滅之間隨機(jī)變化,利用下面那個拉桿固定紅石燈狀態(tài),我們用紅石燈的狀態(tài)來表示二進(jìn)制中的0和1,亮為1,滅為0。那么下圖這一時刻表示的二進(jìn)制數(shù)字就是01110011,轉(zhuǎn)換為十進(jìn)制就是115。利用這個裝置能生成的最大數(shù)為11111111,即255。
因?yàn)橥稊S器投擲物品具有隨機(jī)性,所以其實(shí)對大多數(shù)玩家來說,這樣的隨機(jī)數(shù)生成器就能用了。但是實(shí)際上,投擲器是應(yīng)用偽隨機(jī)機(jī)制射出容器內(nèi)物品,雖然看似隨機(jī),但還是有規(guī)律可循。
三、較嚴(yán)謹(jǐn)?shù)碾S機(jī)數(shù)生成器
在玩家不了解偽隨機(jī)公式的情況下,二中的隨機(jī)數(shù)生成器也可以實(shí)現(xiàn)隨機(jī)生成數(shù)字的功能,但是這樣的結(jié)果肯定不夠完美。因此,我們接下來就要制作一個更加嚴(yán)謹(jǐn)?shù)碾S機(jī)數(shù)生成器。
下面這張是完成圖:
每個隨機(jī)單元采用4個投擲器-漏斗結(jié)構(gòu)。當(dāng)這個單元被激活后,4個投擲器同時輸出一次脈沖。只要其中1個脈沖的信號強(qiáng)度為3,這個脈沖將會激活加法狀態(tài)的紅石比較器,這個單元將被再次激活;如果4個脈沖的強(qiáng)度都為1,那么這個單元將只被激活一次后停止運(yùn)作。
下面我們就開始建造吧~
第一步:建造第一層,如下圖所示,放置紅石和紅石中繼器,注意中繼器的方向,當(dāng)中繼器被激活時中間的四個完整方塊和紅石將被充能。
第二步:建造第二層,四個投擲器呈十字?jǐn)[放,方向朝上,在第一層的紅石中繼器上方各放置一個方塊。
第三步:第三層,在每個投擲器上面放一個漏斗,四個角分別放一個紅石比較器,紅石比較器的輸出端放一個完整方塊,當(dāng)紅石比較器輸出信號時,方塊被充能從而激活其下方的紅石線。這么一來,就實(shí)現(xiàn)了只要四個漏斗其中1個脈沖的信號強(qiáng)度為3,就會激活相鄰的投擲器。這樣便大大增加了其不確定性,也就增加了隨機(jī)數(shù)產(chǎn)生的隨機(jī)性。
第四步:為了增加隨機(jī)性,我們可以將第三步中的隨機(jī)單元進(jìn)行復(fù)制連接。如下圖,我們將以上隨機(jī)單元復(fù)制32個,構(gòu)成4*8的矩陣。每2個單元共用一條鄰邊,這意味著如果這條邊獲得一次強(qiáng)度為3的脈沖信號,那么這個單元在激活自身的同時也將激活與它相鄰的另一個隨機(jī)單元,起到傳遞信號的效果。在試驗(yàn)中,我們發(fā)現(xiàn)在投擲器中放入1份不可堆疊物品與3份可堆疊物品比較合適,這樣能讓這個信號不停地在單元與單元之間傳遞,而不會全部停止運(yùn)作,也不至于全部都輸出3強(qiáng)度而卡死。
第五步:如下圖所示,最終在整個模塊的邊緣,我們選取了8個輸出位置,作為輸出的8位二進(jìn)制數(shù),點(diǎn)亮的紅石燈代表1,熄滅的代表0。這個信號每3紅石刻變化一次,使用拉桿來固定某個時刻的輸出,也就是讓玩家手動選取,這樣加入了玩家自身的因素,可以增加數(shù)字生成的隨機(jī)性,不單單只是代碼運(yùn)算的隨機(jī)結(jié)果。
以上就是隨機(jī)數(shù)生成器的介紹,原理比較簡單,但是建造過程可能相對復(fù)雜,對于有較豐富紅石經(jīng)驗(yàn)的玩家,可以嘗試建造bcd(二進(jìn)碼十進(jìn)數(shù))模塊,將二進(jìn)制信號轉(zhuǎn)化為十進(jìn)制數(shù)字方便查看。在知道了原理之后,玩家們也可以發(fā)揮想象力,建造出更加嚴(yán)謹(jǐn)?shù)碾S機(jī)數(shù)生成器~
全部評論