當個創世神 掃雷製作圖文教學

當個創世神 掃雷製作圖文教學 掃雷怎麼製作 ,《當個創世神 Minecraft》中有些玩家做出了掃雷這個windows經典小遊戲了,然而很多玩家想要學在當個創世神 Minecraft中做掃雷小遊戲,下面蝦米攻略小編就為大家帶來當個創世神 Minecraft掃雷製作圖文教學,告訴大家掃雷怎麼做,希望對各位玩家有所幫助。

當個創世神 掃雷製作圖文教學

下載地址:點擊進入

當個創世神 掃雷製作圖文教學 掃雷怎麼製作

 

一、整理思路

掃雷,一個風靡全球的小遊戲,簡單的規則,然而卻能夠吸引很多的玩家挑戰。那麼我們現在來分析一下掃雷的規則:

每個被翻開的格子,如果其不是雷,則會寫出其周圍8個格子所包含的雷數,如果是0則會翻開周圍8個格子。翻開的是雷則遊戲結束。

2. 翻開的第一個格子永遠不會是雷。

好的,那麼現在我們確定了一個目標,製作掃雷,那麼我們就可以根據規則列出一張掃雷的遊戲流程表。(由於在初期計劃階段,我們大概畫畫就好。)

Ok,那麼現在我們有了一個初始的計劃圖,現在,由於我們是要在mc里製作這樣一個遊戲,那我們現在開始就要將其模塊化條理化並添加mc元素進去。容我們來梳理一下思路:

開局:由於我們要保證第一步翻開的格子肯定不是雷,那麼顯而易見,我們需要在開局,即翻開第一個格子的時候,生成整個棋局,才能完全保證我們所翻的格子不是雷。而我們也要保證生成完棋局的時候確實那個格子是被翻開的。同時呢,計時器也要開始工作。

遊戲中:這個地方很簡單,我們需要檢測玩家的類左鍵操作和類右鍵操作。同時對其進行處理,而我們還需要統計場上出現的旗幟數。最後,我們還需要進行勝利判定。

勝利/失敗:這個重點不多,我們只需要將地圖剩餘未標記的雷和標記錯誤的格子進行反饋。可能者計算出玩家的時間是否能夠開啟修改英雄榜的方法。

重新開局:這個地方也是非常簡單的。直接就可以重置地圖,統計,還有時間。

英雄榜:將現有玩家的分數打印出來,同時給予玩家打印自己名字的權限。簡單的說就是個打字機。

讓我們簡潔的整理下思路:

開局:生成雷局,開始計時器。

遊戲中:檢測輸入,統計旗幟,檢測勝利。

勝利:檢查時間是否低於最優記錄。

失敗:反饋未正確標記的格子。

重新開局:重置雷局,重置計時器。

仔細看看其實我們要做的也不是特別多嘛,壓力還是不大的。那麼我們現在可以再將整理過的思路進行填充,增加實現方法。在開工各個部分之前,我們需要定一個整體的規劃,這樣就可以使我們建造出來的各個模塊能夠協同工作,可以理解為是某種協議。

首先,掃雷需要是哪種顯示方法?當然有很多選擇,但是我這裡使用的是展示框配合地圖的顯示方法,因為展示框不是方塊,是一個實體,那麼就可以很方便的用選擇器來進行選擇及操作,它可以響應左鍵右鍵和中鍵,而其和地圖的聯動讓其的顯示效果絲毫不亞於方塊。而操作方法也就在這時候定下來了,單純的左鍵右鍵以及中鍵。

其次我們現在可以考慮模塊之間有哪幾種交流。生成雷局的時候,由於我定的規模是初級掃雷,那麼就會有十個格子被標記為雷,而這個會在遊戲中和失敗兩個模塊里用到。計時器會在勝利模塊中用到。旗幟會在失敗模塊里用到。

 

二、開工

那麼現在我們可以開工了。由於我們選擇的是展示框顯示屏,所以我們只能通過高頻檢測的情況來進行正常遊戲。

這裡我將我的電路截圖進行說明,有圖為證,整個掃雷的電路的確是模塊化的產品:

製作開始。

這裡是將地圖進行預加載的地方,然而由於失誤,我漏掉了沒有雷的格子。

註:文中指令方塊部分使用了絕對坐標,具體製作中請參考具體地圖位置。

開局

這是我的棋局的剖面圖,這裡我的開局使用的是石質按鈕開局,原因是我不希望高頻一直啟動著,這裡選擇用按鈕是在效果和性能之間的折中選擇。

每個按鈕都可以激活前兩層的命令方塊,共計六個,第一層可以放置互相干擾也沒問題的命令方塊第一層的指令為:

setblock 16 3 -15 redstone_block

該指令的作用為開啟生成棋局的命令方塊陣列第二層的指令為:

setblock ~ ~ ~2 air

該指令的作用為對這個格子進行一個標記,使生成雷局的時候不會在這個格子生成雷(其實這種處理方式沒必要這麼麻煩,然而我懶的找按下的按鈕的數據值)。

開局模塊:

其中中繼器末尾就是上文紅石塊的放置位置,再配合這個命令就可以輸出一個脈衝:

setblock ~ ~-1 ~ air

另外一個命令方塊是上文標記系統的第二部分,指令如下:

/execute @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] ~ ~ ~ detect ~ ~ ~ air 0 /scoreboard players set @e[c=1,type=ItemFrame] kill 1

這條指令的作用是給棋局內部按鈕被消去的格子里的展示框的kill計分板分數+1。

中繼器之後接的命令是如下幾條:

這條指令沒什麼必要,提供一個按下的格子變成禁止符號的標記,純粹的視覺效果:

entitydata @e[score_kill=1,score_kill_min=1] {Item:{id:"minecraft:barrier",Count:1b,Damage:0s}}

這條指令是用來清除所有的石質按鈕。因為石質按鈕只是在開局時使用的。

fill 19 17 23 27 25 23 air 0

這條指令為激活左邊的命令陣列

setblock ~ ~1 ~1 redstone_block

該陣列由複製十次的模塊組成

模塊講解:

每個模塊都有

setblock~ ~-1 ~ air

setblock ~ ~1 ~1 redstone_block

兩條指令,這兩條指令的作用就是複位本個模塊並往下一個模塊輸出信號。

每個模塊又包含生成雷局的核心指令:

scoreboard players set @r[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_kill_min=0,score_kill=0,score_high=0,score_high_min=0] high 1

@r自帶隨機功能,而選擇器內選擇kill分數為0而且high分數也為0的展示框,使其high計分板的分數為1(high計分板就是標記這個格子是否有雷的計分板)。

其作用翻譯成人話就是:除去剛按下的那個,然後隨便找一個沒標記的展示框標記一下。

這條指令會被激活十次,所以雷局裡會有十個雷。

命令陣列執行到最後,會往遠處那個中繼器里輸出信號,

後面接著的五個命令方塊是用來給每個格子寫入數字,即我們在玩掃雷時看到的數字,指令如下:

execute @e[type=ItemFrame,score_high=1,score_high_min=1] ~ ~ ~ /scoreboard players remove @e[r=1,type=ItemFrame] mine 1

execute @e[type=ItemFrame,score_high=1,score_high_min=1] ~ ~ ~ /scoreboard players add @e[dx=1,dy=1,type=ItemFrame] mine 1

execute @e[type=ItemFrame,score_high=1,score_high_min=1] ~ ~ ~ /scoreboard players add @e[dx=1,dy=-1,type=ItemFrame] mine 1

execute @e[type=ItemFrame,score_high=1,score_high_min=1] ~ ~ ~ /scoreboard players add @e[dx=-1,dy=1,type=ItemFrame] mine 1

execute @e[type=ItemFrame,score_high=1,score_high_min=1] ~ ~ ~ /scoreboard players add @e[dx=-1,dy=-1,type=ItemFrame] mine 1

非常相似的指令,總的來說就是給每個雷周圍8個展示框里的數字+1。

最後一條指令,開啟「遊戲中」模塊:

setblock -3 4 -15 redstone_block

遊戲中

指針所指之處為fill高頻。上面的紅石塊將放置在此處。

由於該模塊的核心為fill高頻。所以電路結構非常簡單,就是很多命令方塊圍著一根紅石塊棒子,我就不上截圖了。

然而其中的時序是非常嚴謹的。由於fill高頻是有一個更新順序,這個順序是由坐標決定,站里也有人研究,因此在這裡不詳細說明了。

下面我將按照時序介紹指令而不是邏輯順序。

①這個命令是將所有問號格子的旗幟標記取消。即取消標記:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] flag 0 {ItemRotation:0b,Item:{id:"minecraft:filled_map",Count:1b,Damage:106s}}

②高頻產生:

fill ~-1 ~-1 ~ ~15 ~-1 ~ redstone_block

fill ~-1 ~1 ~ ~15 ~1 ~ air

給予所有的格子左鍵標誌:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] l 1

將所有被旋轉過一次的未翻開格子給予右鍵標誌:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_mark=0,score_mark_min=0] r 1 {ItemRotation:1b,Item:{id:"minecraft:filled_map",Count:1b,Damage:1s}}

③將上方狀態欄的展示框撥正:

entitydata @e[18,27,22,dx=10,dy=3,dz=1] {ItemRotation:0b}

取消所有未旋轉的展示框的右鍵標記:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_mark=0,score_mark_min=0] r 0 {ItemRotation:0b}

取消所有有裝地圖的展示框的左鍵標記:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] l 0 {Item:{id:"minecraft:filled_map"}}

將所有被插旗的格子的內容變為旗幟:

entitydata @e[type=ItemFrame,score_flag=1,score_flag_min=1] {Item:{id:"minecraft:filled_map",Count:1b,Damage:105s}}

此四條不重時序,將空白格子的周圍格子翻開:

execute @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_mark_min=2,score_mark=2] ~ ~ ~ scoreboard players set @e[dx=1,dy=1,dz=1,type=ItemFrame,score_flag=0,score_flag_min=0,score_high=0,score_high_min=0] l 1 {Item:{id:"minecraft:filled_map",Count:1b,Damage:1s}}

execute @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_mark_min=2,score_mark=2] ~ ~ ~ /scoreboard players set @e[dx=1,dy=-1,dz=1,type=ItemFrame,score_flag=0,score_flag_min=0,score_high=0,score_high_min=0] l 1 {Item:{id:"minecraft:filled_map",Count:1b,Damage:1s}}

execute @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_mark_min=2,score_mark=2] ~ ~ ~ /scoreboard players set @e[dx=-1,dy=1,dz=1,type=ItemFrame,score_flag=0,score_flag_min=0,score_high=0,score_high_min=0] l 1 {Item:{id:"minecraft:filled_map",Count:1b,Damage:1s}}

execute @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_mark_min=2,score_mark=2] ~ ~ ~ /scoreboard players set @e[dx=-1,dy=-1,dz=1,type=ItemFrame,score_flag=0,score_flag_min=0,score_high=0,score_high_min=0] l 1 {Item:{id:"minecraft:filled_map",Count:1b,Damage:1s}}

將所有被旋轉的旗幟格子進行右鍵標記:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_mark=0,score_mark_min=0] r 2 {ItemRotation:1b,Item:{id:"minecraft:filled_map",Count:1b,Damage:105s}}

探測是否有被踩中的雷(此條接比較器,往失敗模塊輸出):

testfor @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_high_min=1,score_high=1] {Item:{id:"minecraft:filled_map",Count:1b,Damage:108s}}

④將所有旗幟格子進行旗幟標記:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] flag 1 {ItemRotation:0b,Item:{id:"minecraft:filled_map",Count:1b,Damage:105s}}

將所有被標記的格子的數字調整到非法值:

scoreboard players set @r[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_high=1,score_high_min=1] mine 9

將旋轉的問號格子進行右鍵標記:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_mark=0,score_mark_min=0] r 3 {ItemRotation:1b,Item:{id:"minecraft:filled_map",Count:1b,Damage:106s}}

⑤將所有沒有方塊依附的展示框後方放上方塊:

/execute @e[type=ItemFrame] ~ ~ ~ detect ~ ~ ~-1 air 0 setblock ~ ~ ~-1 command_block 0 keep {Command:"setblock 16 3 -15 redstone_block"}

將所有擁有右鍵標記的空白格子內容變為旗幟:

entitydata @e[score_r=1,score_r_min=1,type=ItemFrame] {ItemRotation:0,Item:{id:"filled_map",Damage:105}}

將所有擁有右鍵標記的旗幟格子內容變為問號:

entitydata @e[score_r=2,score_r_min=2,type=ItemFrame] {ItemRotation:0,Item:{id:"filled_map",Damage:106}}

將所有擁有右鍵標記的問號格子內容變為空白(這裡之所以格式不同是因為留個中鍵的接口):

execute @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_r=3,score_r_min=3] ~ ~ ~ setblock ~ ~ ~-4 redstone_block

勝利檢測,當空白格子、問號格子和旗幟格子之和為10時遊戲勝利(輸出接勝利模塊):

testfor @a[score_s=10,score_s_min=10]

旗幟數目檢測(輸出接旗幟統計):

testfor @e[score_flag=1,score_flag_min=1,type=ItemFrame]

將所有被踩中的雷進行標記:

scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_high_min=1,score_l_min=1,score_l=1] mark2 1

翻開被踩中的空白格子(其餘數字也有各自的指令,暫不詳述):

entitydata @e[type=ItemFrame,score_l=1,score_l_min=1,score_mine=0,score_mine_min=0] {ItemRotation:0b,Item:{id:"filled_map",Damage:104}}

對滿足勝利條件的格子進行標記:

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] mark 3 {Item:{id:"minecraft:filled_map",Count:1b,Damage:105s}}

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] mark 5 {Item:{id:"minecraft:filled_map",Count:1b,Damage:106s}}

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] mark 4 {Item:{id:"minecraft:filled_map",Count:1b,Damage:1s}}

⑥探測滿足勝利條件的格子

testfor @e[score_mark=5,score_mark_min=3,type=ItemFrame]

⑦重置所有的標記

/scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame] mark 0

好的…實際上到這裡,整個掃雷的主體已經完工,接下來就是一些非常簡單的玩意兒。

勝利模塊

進行勝利宣言:

title @a title {text:"YOU WIN!",color:"red",bold:"true"}

停止遊戲中的高頻:

setblock -3 6 -15 redstone_block

你懂得,就是顯示遊戲勝利戴墨鏡的那張臉:

entitydata @e[name=face] {Item:{id:"minecraft:filled_map",Count:1b,Damage:102s}}

比較此次成績與最好紀錄:

/scoreboard players operation @a timeall -= @a best

testfor @a[score_timeall=0]

一旦此次成績更好,則設定此次成績為最好成績,同時開啟英雄榜:

setblock 27 18 41 redstone_block

/scoreboard players operation @a timeall += @a best

/scoreboard players operation @a best = @a timeall

重置時間:

scoreboard players set @a time2 0

scoreboard players set @a time1 0

scoreboard players set @a time 0

失敗模塊

你懂得,還是那張臉:

entitydata @e[name=face] {Item:{id:"minecraft:filled_map",Count:1b,Damage:103s}}

停止高頻:

setblock -3 6 -15 redstone_block

將踩中的雷變成紅色爆炸的雷。

scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_high_min=1,score_high=1] mark2 1 {Item:{id:"minecraft:filled_map",Count:1b,Damage:104s}}

entitydata @e[score_mark2_min=1,score_mark2=1] {ItemRotation:0b,Item:{id:"minecraft:filled_map",Count:1b,Damage:108s}}

將未標記的雷指出。

scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_high_min=1,score_high=1] mark2 2 {Item:{id:"minecraft:filled_map",Count:1b,Damage:1s}}

entitydata @e[score_mark2_min=2,score_mark2=2] {ItemRotation:0b,Item:{id:"minecraft:filled_map",Count:1b,Damage:107s}}

將錯誤標記指出

scoreboard players set @e[19,17,22,dx=9,dy=9,dz=1,type=ItemFrame,score_high_min=0,score_high=0,score_flag=1,score_flag_min=1] mark2 3

entitydata @e[score_mark2_min=3,score_mark2=3] {ItemRotation:0b,Item:{id:"minecraft:filled_map",Count:1b,Damage:118s}}

來源:gamersky

更多《當個創世神 Minecraft》實用攻略/模組/技巧:

  1. 當個創世神 1.8版智能化蜘蛛命令方塊使用教學
  2. 當個創世神 實用生存技巧詳解
  3. 當個創世神 自動工作台紅石製作圖文教學
  4. 當個創世神 合成表
  5. 當個創世神 1.8版方塊變異人指令用法圖文教學

我來說兩句...