Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
Advertisement

隨機發生器(Randomizer)(又作隨機數發生器、隨機數生成器(Random Number Generator)等,縮寫為RNG)是會產生隨機訊號的紅石電路。它們能被應用在很多地方,從操縱一場燈光秀,到建造一個賭場。特別指出,隨機發生器像大多數紅石電路一樣,只能在已載入出的區塊裡工作。如果是用於一個探險地圖或一些玩家會走得很遠的地圖,可以將隨機發生器建造在重生點區塊[僅Java版]常載入區域[僅基岩版]

實體隨機發生器

投擲器隨機發生器

一個投擲器隨機發生器

這個隨機發生器利用了這樣一個事實,投擲器以隨機順序發射物品。每當提供一個訊號時,它會輸出一個強度為1或3的訊號。 要建造它,按照圖中的方式放置一個投擲器,漏斗,和紅石比較器。 然後把有不同堆疊上限的物品放入投擲器中,如一把劍和一塊泥土。當你啟動投擲器,它會把一個物品放入漏斗,從而啟動比較器。 由於物品占用的空間不同,因此訊號強度也會有所不同。看起來好像將物品數堆疊至16時會輸出強度為2的訊號,但不幸的是除非漏斗事先裝了物品,否則將物品數堆疊至16隻能得到強度為1的訊號。

界伏盒隨機發生器

界伏盒能被發射器放置,被活塞破壞,並保留其中的物品。當一個界伏盒被發射器隨機放置時,比較器可以產生15種不同的紅石訊號。

生物隨機發生器

絆線鈎製作的豬隨機發生器
壓力板製作的生物隨機發生器(顯示出了紅石)

生物隨機發生器是利用生物隨機移動的特性觸發紅石的隨機發生器。當需要多個輸出時,這種隨機發生器是最好的。訊號何時發生或持續多久都無關緊要。 豬隨機發生器通常用壓力板絆線鈎製作。用絆線鈎是最簡單的方法,但是需要更多鐵。

隨機發生器中使用的生物類型可以創造出一些重要的變種。一些常見的選擇包括:

  • , 因為它們很小而且容易繁殖。
  • 雪人, 因為它們很安靜。
  • 和其他兩格寬的生物, 因為它們處於觸發機關狀態時的可能性更大。
  • 蝙蝠,因為它們會頻繁地開關機關。

唱片機隨機發生器

Information icon
此特性為基岩版獨有。
In
唱片機隨機發生器

這種隨機發生器使用唱片機漏斗產生強度為1-12的隨機紅石訊號。此機器的獨特之處在於大多數其他的隨機發生器不會產生具有如此多可能性的模擬訊號。這種隨機發生器的兩個缺點是,它只能在每個唱片播放完畢並取走後才會改變訊號,並且這可能造價高昂。

模擬訊號輸出隨機發生器

雙電平模擬訊號輸出

雙電平模擬訊號輸出隨機發生器

投擲器包含一個可堆疊物品和一個不可堆疊物品。



1×3×2(體積為6方塊)、1方塊寬、單片、無聲
電路延遲:3刻(上升沿)和1刻(下降沿)

開啟時輸出訊號強度為1或3,關閉時輸出訊號強度0。

當輸入打開時,投擲器將隨機選擇可堆疊或不可堆疊的物品放進漏斗,導致比較器輸出1或3訊號強度。因為充能的投擲器是一個實心/不透明方塊,它也會鎖住漏斗,防止它將物品送回投擲器,直到輸入關閉。

輸出訊號強度可以按原樣使用(例如,在減法模式下從比較器中減去1或3),但更常用的是,把輸出連接到一行兩個的紅石粉,以使輸出為0或非0(隨機為中繼器充能,啟動機器組件等)。

變種:如果投擲器是間接啟動的(例如,透過准連接性或相鄰的充能方塊),則不會鎖住漏斗,並且漏斗會立即將物品推回投擲器中。這將使電路變成一個單穩態上升沿探測器,輸出脈衝為3.5刻(仍具有1或3的隨機訊號強度)。

在投擲器中只有兩個物品的情況下,兩個訊號強度的輸出機率相等。輸出訊號強度的機率可以透過向投擲器加入額外的可堆疊和不可堆疊物品來改變(這些物品必須彼此不同,以便它們不會堆疊)。例如,對於兩個不同的可堆疊物品和三個不同的不可堆疊物品,隨機發生器將在40%的時間內輸出1訊號強度,在60%的時間內輸出3訊號強度。

已知最早發布日期:2013年3月14日[1]

三電平模擬訊號輸出

三電平模擬訊號輸出隨機發生器

投擲器包含一個堆疊上限為64的物品,一個堆疊上限為16的物品,和一個不可堆疊物品。



漏斗的最右邊個堆疊上限為16的物品。

5
1×3×3(體積為9方塊)、1方塊寬、無聲
電路延遲:3刻(上升沿)和1刻(下降沿)
開啟時輸出訊號強度為1、2或4,關閉時輸出訊號強度(但請參閱下面的變種)。
在建立此電路時,等待漏斗被充能的紅石粉鎖住,然後將五個堆疊上限為16的物品放入其最右側的欄位中。然後將一個堆疊上限為64的物品,一個堆疊上限為16的物品,和一個不可堆疊物品放入投擲器。
輸入開啟之前,漏斗的5個堆疊上限為16的物品足以使其比較器產生1級訊號強度(即使是單個堆疊上限為64的物品也可以)。這五個物品應永遠無法回到投擲器,所以比較器的輸出將永遠不會低於1。
當輸入開啟時,投擲器將一個物品送入漏斗,將其放置在漏斗的左槽中。需要23個堆疊上限為64的物品(或5個堆疊上限為16的物品和3個堆疊上限為64的物品,或6個堆疊上限為16的物品)才能產生2級訊號強度,因此,如果堆疊上限為64的物品被送入,則不足以增加輸出訊號強度,但如果堆疊上限為16的物品被送入,則輸出訊號強度將增加到2級。如果不可堆疊的物品被送入,輸出訊號強度將增加到4。
當電路關閉時,漏斗由充能的紅石粉鎖住,當電路開啟時,由充能的投擲器鎖住。但是,當輸入關閉時,投擲器剛關閉的瞬間會有一個短暫的1刻間隙,但是放置其上的火把沒有再次點亮。這允許漏斗啟動一刻,將一個物品送回投擲器。漏斗總是先從左邊的槽中送出物品,因此漏斗會將投擲器送入的物品送回,而不是最右邊槽中的堆疊上限為16的物品中的任何一個,這樣電路就可以自行復位。
變種:玩家可以從投擲器中移除其中一個物品來建立一個雙電平隨機發生器,其輸出訊號強度不同於常規的雙電平隨機發生器:移除堆疊上限為64的物品對應輸出訊號強度為2或4,移除堆疊上限為16的物品對應輸出訊號強度為1或4,移除不可堆疊物品對應輸出訊號強度為1或2。
您可以從漏鬥引出額外的紅石線路到旁邊的一個方塊,然後向下連接到比較器的側面。這種2方塊寬的變種將保證輸入關閉時,比較器的輸出關閉。
在投擲器中只有三個物品的情況下,所有三個輸出訊號強度將以相同的機率選擇。輸出訊號強度的機率可以透過向投擲器加入額外的堆疊上限為64、堆疊上限為16和不可堆疊的物品來改變(這些物品必須彼此不同,這樣它們就不會堆疊)。例如,對於一個堆疊上限為64的物品、一個堆疊上限為16的物品和兩個不同的不可堆疊物品,隨機發生器將在25%的時間內輸出訊號強度為1、25%的時間輸出訊號強度為2、50%的時間輸出訊號強度為4的紅石訊號。
可以向漏斗加入額外的物品,以增加整體的輸出訊號強度。
已知最早發布日期:2013年4月16日[2]

十六電平模擬訊號輸出

5×8×4(體積為160方塊)
電路延遲:8.5刻
開啟時輸出訊號強度為0至15,關閉時輸出訊號強度0。
使用四個雙電平隨機發生器從15級訊號強度中減去1、2、4和/或8級訊號強度。
減少雙電平隨機發生器的數量會減少可能的輸出:3個雙電平隨機發生器產生八電平隨機發生器,2個雙電平隨機發生器產生四電平隨機發生器(確切的訊號強度取決於提供給減法比較器的訊號強度)。
已知最早發布日期:2013年6月10日[3]

示意圖:十六電平模擬訊號輸出隨機發生器

指令隨機發生器

基於隨機刻的設計

Information icon
此特性為Java版獨有。

這個隨機發生器使用重複的指令方塊,每個刻度加1分,然後另一個重複的指令方塊將值截斷到最大值。當需要隨機值時,使用重複的指令方塊來測試特定值。此裝置不是完全隨機的,因為它是基於啟動的時間,但對於大多數目的來說是隨機的。

在本例中,最小值為10,最大值為20。 首先,必須建立一個偽計分板目標來儲存值:/scoreboard objectives add randomizer dummy。接下來,需要兩個重複的指令方塊,都設定為「保持開啟」。第一個在每個刻度上加1分:/scoreboard players add ticks randomizer 1。第二個將值截斷為上述最小值和最大值:/execute if score ticks randomizer matches 21.. run scoreboard players set ticks randomizer 10(其中「21」是最大排外值,「10」是最小值)。最後,需要一組測試每個值的指令方塊,所有這些指令塊都附加到單個輸入;例如,/execute if score ticks randomizer matches 2 run say hi如果10到20之間的隨機值是2,則執行/say hi(將[@] hi發送至聊天框中)。下面的示意圖顯示了一個示例裝置,其中測試每個值的指令方塊附加到同一個輸入:

基於隨機刻的隨機發生器

基於目標選擇器的設計

Information icon
此特性為Java版獨有。

本設計係基於隨機目標選擇器參數 (limit=1,sort=random),為 NOPEname[4] 的設計的拓展。

本設計需要執行下列指令來初始化,為便利起見,你可以把他們放到一個函數中。

scoreboard objectives add RandomBit dummy
execute unless entity @e[type=armor_stand, tag=RandomizerResult] run summon minecraft:armor_stand 0 -1 1 {Marker: 1b, NoGravity: 1b, Invisible: 1b, Silent: 1b}
tag @e[type=armor_stand,x=0,y=-1,z=1] add RandomizerResult
scoreboard players set @e[tag=RandomizerResult] RandomBit 0
execute unless entity @e[type=armor_stand, tag=Randomizer] run summon minecraft:armor_stand 0 -1 0 {Marker: 1b, NoGravity: 1b, Invisible: 1b, Silent: 1b}
execute unless entity @e[type=armor_stand, tag=Randomizer] run summon minecraft:armor_stand 1 -1 0 {Marker: 1b, NoGravity: 1b, Invisible: 1b, Silent: 1b}
tag @e[type=armor_stand,x=0,y=-1,z=0] add Randomizer
tag @e[type=armor_stand,x=1,y=-1,z=0] add Randomizer

其中execute unless的部分不是必須的, 但加上他們可以保證多次執行這一系列指令時本設計仍能正常運作(例如,你把這些指令放到一個函數中,而出於測試目的需要在同一個世界中多次執行這個函數)。

然後,每當你需要獲取一個隨機的比特(即 0 或 1)時,執行下列指令。你可以逐行手動輸入這些指令,或者用指令方塊鏈,或者定義一個函數。

tag @e[type=armor_stand,tag=Randomizer] remove PickedBit
tag @e[type=armor_stand,tag=Randomizer,sort=random,limit=1] add PickedBit
execute store result score @e[type=armor_stand, tag=RandomizerResult] RandomBit run data get entity @e[type=armor_stand, tag=PickedBit,limit=1] Pos[0]

這樣就得到了一個隨機的比特,該比特的值存放在帶有RandomizerResult標籤的盔甲座的名為RandomBit的記分板目標中。

本方法可以輕易拓展成大範的圍隨機整數的發生器。

基巖版本

基巖版本自帶對隨機記分板目標的支持。只需用指令/scoreboard players random ...即可。

參考

Advertisement