使用するタートルAPIは、turtle.inspectDown()--下を調べる
まず前回作成したプログラムの最後、ループHUKASAの終わりの前に以下のプログラムを追加しました。
--1.のプログラム
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名
local ARU,NANIGA=turtle.inspectDown()
--もしもブロック名が岩盤と同じなら
if NANIGA.name=="minecraft:bedrock" then
--ループAGARUは、1~ループHUKASAx2まで実行
for AGARU=1,HUKASA*2 do
turtle.up()--上に行く
end--ループAGARUの終わり
break--プログラムを終える
end--もしもの終わり
--1.のプログラムの終わり
1.のプログラムの考え方
タートルはチェストにアイテムを入れた後に採掘再開まで下降します。その時に下のブロックを調べるタートルAPIを使用して岩盤ならタートルが下がった分だけ上昇してプログラム全体を繰り返すループHUKASAを終了します。
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名
local ARU,NANIGA=turtle.inspectDown()
定義文字に「ARU」「NANIGA」作り、下のブロックを調べます
local␣ ブロックがあるか,何があるか=turtle.inspectDown()
「ARU」「NANIGA」に返り値を当てはめさせます
turtle.inspectDown()--下のブロックを調べる
岩盤の上でタートルに「lua」エンター
turtle.inspectDown()、エンター
こうすると下のブロック情報を調べることができます
まずブロックがある「true」を返します
次にブロックのデータを返します
ブロックのデータの中の「name = "minecraft:bedrok"」と比べて同じならプログラムを終了させます
--もしもブロック名が岩盤と同じなら
if NANIGA.name=="minecraft:bedrock" then
if␣定義名.name=="マインクラフト:ブロックID"␣then
このような形式で書くことでブロック名を比べることができます
break--プログラムを終える
プログラムを終了させることができます。ただこの後に処理がある場合はプログラム全体を終えることはできませんので、ループHUKASAの「end」前に書き込む必要があります。
for AGARU=1,HUKASA*2 do
turtle.up()--上に行く
end--ループAGARUの終わり
break--プログラムを終える
end--もしもの終わり
end--ループHUKASA終わり
--今回のプログラム
local YOKOcount=0--定義YOKOcountは「0」
for HUKASA=1,100 do--一面を百段掘るループHUKASA
for OUHUKU=1,2 do--ループOUHUKUは、1~2まで実行
turtle.digDown()--下を掘る
turtle.down()--下に行く
for YOKO=1,8 do--ループYOKOは、1~8まで実行
for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
turtle.dig()--前を壊す
turtle.forward()--前に行く
end--ループTATEの終わり
turtle.turnRight()--右を向く
turtle.dig()--前を壊す
turtle.down()--下に行く
for YOKO=1,8 do--ループYOKOは、1~8まで実行
for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
turtle.dig()--前を壊す
turtle.forward()--前に行く
end--ループTATEの終わり
if YOKO==8 then--もしもループYOKOが「8」なら
if OUHUKU==2 then--もしもOUHUKUが「2」なら終える
else--違うなら次の処理をしてループOUHUKUの2回目を処理
turtle.turnRight()--右を向く
turtle.turnRight()--右を向く
end--もしもの終わり
elseif YOKOcount==0 then--もしもYOKOcountが「0」ならif OUHUKU==2 then--もしもOUHUKUが「2」なら終える
else--違うなら次の処理をしてループOUHUKUの2回目を処理
turtle.turnRight()--右を向く
turtle.turnRight()--右を向く
end--もしもの終わり
turtle.turnRight()--右を向く
turtle.dig()--前を壊す
turtle.forward()--前に行く
turtle.turnRight()--右を向く
YOKOcount=-1--YOKOcountを「-1」に変更
elseif YOKOcount==-1 then--もしもYOKOcountが「-1」なら
turtle.turnLeft()--左を向く
elseif YOKOcount==-1 then--もしもYOKOcountが「-1」なら
turtle.turnLeft()--左を向く
turtle.dig()--前を壊す
turtle.forward()--前に行く
turtle.turnLeft()--左を向く
YOKOcount=0--YOKOcountを「0」に変更
YOKOcount=0--YOKOcountを「0」に変更
end--もしもの終わり
end--ループYOKOの終わり
end--ループYOKOの終わり
end--ループOUHUKUの終わりw
--ループAGARUは、1~ループHUKASAx2まで実行
for AGARU=1,HUKASA*2 do
turtle.up()--上に行く
end--ループAGARUの終わり
for SLOT=1,16 do--ループSLOTは、1~16まで実行
turtle.select(SLOT)--タートルスロット「SLOT」を選択
turtle.drop()--チェストに入れる
end--ループSLOTの終わり
--ループSAGARUは、1~ループHUKASAx2まで実行
for SAGARU=1,HUKASA*2 do
turtle.down()--下に行く
end--ループSAGARUの終わり
turtle.turnRight()--右を向く
--ループAGARUは、1~ループHUKASAx2まで実行
for AGARU=1,HUKASA*2 do
turtle.up()--上に行く
end--ループAGARUの終わり
for SLOT=1,16 do--ループSLOTは、1~16まで実行
turtle.select(SLOT)--タートルスロット「SLOT」を選択
turtle.drop()--チェストに入れる
end--ループSLOTの終わり
--ループSAGARUは、1~ループHUKASAx2まで実行
for SAGARU=1,HUKASA*2 do
turtle.down()--下に行く
end--ループSAGARUの終わり
turtle.turnRight()--右を向く
turtle.turnRight()--右を向く
--1.のプログラム
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名
local ARU,NANIGA=turtle.inspectDown()
--もしもブロック名が岩盤と同じなら
if NANIGA.name=="minecraft:bedrock" then
--ループAGARUは、1~ループHUKASAx2まで実行
for AGARU=1,HUKASA*2 do
turtle.up()--上に行く
end--ループAGARUの終わり
break--ブレークする
end--もしもの終わり
--1.のプログラムの終わり
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名
local ARU,NANIGA=turtle.inspectDown()
--もしもブロック名が岩盤と同じなら
if NANIGA.name=="minecraft:bedrock" then
--ループAGARUは、1~ループHUKASAx2まで実行
for AGARU=1,HUKASA*2 do
turtle.up()--上に行く
end--ループAGARUの終わり
break--ブレークする
end--もしもの終わり
--1.のプログラムの終わり
end--ループHUKASA終わり
--今回のプログラムの終わり
プログラムを動かした結果
岩盤が整地されていないので「1」の位置の下のブロックに岩盤が必ず最初に現れるとは限らないので失敗でした。岩盤に行く手を阻まれて位置ずれを起こしてしまいました。このプログラムは岩盤が平たん化されていないと使えません。
そして岩盤に行く手を阻まれてしまい位置ずれを起こしました
次のページ「岩盤に到達したらプログラムを終える(成功編)」
前のページ「往復の採掘でクアーリーの動きを再現」
0 件のコメント:
コメントを投稿