タートルのAPIはこちらで確認できます
--前回のプログラム
local YOKOcount=0--定義YOKOcountは「0」
for HUKASA=1,100 do--一面を百段掘るループHUKASA
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」なら
turtle.turnRight()--右を向いてスタート方向を向く
for HOME=2,8 do--ループHOMEは、2~8まで実行
turtle.forward()--前に行く
end--ループHOMEの終わり
YOKOcount=0--YOKOcountを「0」に変更
elseif YOKOcount==0 then--もしもYOKOcountが「0」ならturtle.turnRight()--右を向いてスタート方向を向く
for HOME=2,8 do--ループHOMEは、2~8まで実行
turtle.forward()--前に行く
end--ループHOMEの終わり
YOKOcount=0--YOKOcountを「0」に変更
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の終わり
turtle.turnLeft()--左を向く(チェストの方を向く)
for AGARU=1,HUKASA do--ループAGARUは、1~ループHUKASAまで実行
turtle.up()--上に行く
end--ループAGARUの終わり
for SLOT=1,16 do--ループSLOTは、1~16まで実行
turtle.select(SLOT)--タートルスロット「SLOT」を選択
turtle.drop()--チェストに入れる
end--ループSLOTの終わり
for SAGARU=1,HUKASA do--ループSAGARUは、1~ループHUKASAまで実行
turtle.down()--下に行く
end--ループSAGARUの終わり
turtle.turnRight()--右を向く
for AGARU=1,HUKASA do--ループAGARUは、1~ループHUKASAまで実行
turtle.up()--上に行く
end--ループAGARUの終わり
for SLOT=1,16 do--ループSLOTは、1~16まで実行
turtle.select(SLOT)--タートルスロット「SLOT」を選択
turtle.drop()--チェストに入れる
end--ループSLOTの終わり
for SAGARU=1,HUKASA do--ループSAGARUは、1~ループHUKASAまで実行
turtle.down()--下に行く
end--ループSAGARUの終わり
turtle.turnRight()--右を向く
turtle.turnRight()--右を向く
end--ループHUKASA終わり
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の終わり
--ループ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()--右を向く
end--ループHUKASA終わり
end--ループHUKASA終わり
ループOUHUKUを設置して2回実行するようにします。1回目処理でタートルは、「64」の位置で「右を向く」を2回行い、一段下に下がり「63」から「1」まで逆方向に掘り進んでいきます。それに伴い、列の移動方法も右左が逆になりますので、YOKOcountの部分を考える必要があります。またループOUHUKUの2回目の終わりを「if」文で設定します。
※プログラムのポイント
一面を掘りぬくループOUHUKUを2回繰り返して二面を掘りぬきます。ループOUHUKU先頭に「一段下を掘り、下がる」を含ませることが重要です。
for OUHUKU=1,2 do--ループOUHUKUは、1~2まで実行
turtle.digDown()--下を掘る
turtle.down()--下に行く
~一面を掘りぬくループYOKO~
end--ループOUHUKUの終わり
※プログラムのポイント
一面を掘りぬく処理を往復しますので、スタート位置に戻る必要がなくなります。一番目の分岐「ループYOKOが終わりなら右を向いてスタート位置まで戻る」を変更します。
if YOKO==8 then--もしもループYOKOが「8」なら
turtle.turnRight()--右を向いてスタート方向を向く
for HOME=2,8 do--ループHOMEは、2~8まで実行
turtle.forward()--前に行く
end--ループHOMEの終わり
YOKOcount=0--YOKOcountを「0」に変更
↓if YOKO==8 then--もしもループYOKOが「8」なら
if OUHUKU==2 then--もしもOUHUKUが「2」なら終える
else--違うなら次の処理をしてループOUHUKUを終える
turtle.turnRight()--右を向く
turtle.turnRight()--右を向く
end--もしもの終わり
if OUHUKU==2 then--もしもOUHUKUが「2」なら終える
ループOUHUKUが2回目の処理ならループOUHUKUが終わり、チェストの座標まで上がることになります。ここでのポイントは、もしも正しいならの処理はありません。ただループOUHUKUが終わるだけとなります。
else--違うなら次の処理をしてループOUHUKUの2回目を処理
一面目は「64」の位置で掘り終わりますので「右を向くx2」行い「63」を向きループOUHUKUの2回目の処理の先頭に戻ります。
YOKOcount=0--YOKOcountを「0」に変更
二段目の最初の列の移動は左回りとなりますので、YOKOcountは「-1」のままでよいのでこの部分は削除します。
※プログラムのポイント
ループHUKASAは、1回の処理でですが、ループOUHUKUの処理で「一段下を掘り、下がる」が2回行われていますので、チェストのY値は「HUKASAx2」となります。注意点は掛け算の場合 Lua 言語では「HUKASA*2」と書きこむ必要があります。
チェストへ上がる
--ループAGARUは、1~ループHUKASAx2まで実行
for AGARU=1,HUKASA*2 do
採掘再開場所へ下がる
--ループSAGARUは、1~ループHUKASAx2まで実行
for SAGARU=1,HUKASA*2 do
次のページ「岩盤に到達したらプログラムを終える(失敗編)」
前のページ「if 文で多重分岐で列の移動を管理」
0 件のコメント:
コメントを投稿