2020年1月25日土曜日

スタート地点に戻りチェストにアイテムを入れる

下に掘り進んでいくとタートルのインベントリは、いっぱいになってしまい採掘してもアイテム入手ができなくなってしまいます。「一面を掘る」「チェストに戻りアイテムを入れる」「採掘場所に戻り」「一面を掘る」このようなプログラムに変更し露天掘りプログラムを完成させます。



一段を掘ったあとスタート位置に戻るプログラム

一段を全面掘りぬいて「64」の位置で止まったタートルは、右「49」の方向を向いて「1」の位置まで進みます。

ループHOMEで「49.48.33.32.17.16.1」7ブロック分進みます

--1.のプログラム
turtle.turnRight()--右「49」の方向を向く
for HOME=2,8 do--前に行くを7回繰り返すループHOME
    turtle.forward()--前に行く
end--ループHOMEの終わり
--1.のプログラムの終わり



タートルは、スタート地点の「1」の位置の一段下で停止


一面を掘るプログラムをループカウンターで10回繰り返す

最初の「下を掘る、下に行く」「一面を掘る」「スタート位置に戻る」をループカウンター「HUKASA」で繰り返せば露天掘りプログラムが完成します。

1.のプログラムの後に右を向くことでタートルの進行方向を合わせます
turtle.turnRight()--右「2」の方向を向く


--2.のプログラム
for HUKASA=1,10 do--面を十段掘るループHUKASA
    turtle.digDown()--下を掘る
    turtle.down()--下に行く
    for YOKO=1,3 do--2列を破壊して進むループを3回繰り返すルーツYOKO
        for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
        end--ループTATEの終わり
        turtle.turnRight()--右を向く
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
        turtle.turnRight()--右を向く
        for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
        end--ループTATEの終わり
        turtle.turnLeft()--左を向く
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
        turtle.turnLeft()--左を向く
    end--ループYOKOの終わり
    for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
    end--ループTATEの終わり
    turtle.turnRight()--右を向く
    turtle.dig()--前を壊す
    turtle.forward()--前に行く
    turtle.turnRight()--右を向く
    for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
    end--ループTATEの終わり
--1.のプログラム
    turtle.turnRight()--右「49」の方向を向く
    for HOME=2,8 do--前に行くを7回繰り返すループHOME
        turtle.forward()--前に行く
    end--ループHOMEの終わり
--1.のプログラムの終わり
    turtle.turnRight()--右「2」の方向を向く
end--ループHUKASA終わり
--2.のプログラム




スタート位置のY座標に戻る

画像のようにマイニングタートルとチェストを配置します
--2.のプログラム
for HUKASA=1,10 do--面を十段掘るループHUKASA

このループHUKASAには「1.2.3.4.5.6.7.8.9.10」と1から10までの数字が代入されていきます。ループHUKASAの中にタートルAPIの「turtle.down()--下に行く」が一度しか使用していませんのでループHUKASAの回数がタートルが下に行った回数となります。

HUKASAループの回数=タートルの下がったブロック数

タートルが上に上がるループカウンターAGARUでプログラムを作ります

--3.のプログラム
for AGARU=1,HUKASA do--ループAGARUは、1~ループHUKASAまで実行
    turtle.up()--上に行く
end--ループAGARUの終わり
--3.のプログラムの終わり

チェストにタートルのインベントリ内のアイテムをすべて入れる

一面を掘りぬいたタートルのスロットには、入手したアイテムが入ります。そのアイテムをすべてチェストに入れるプログラムを考えます。

スロット1から16まで順番にアイテムをチェストに入れていきます。

turtle.select(1)--タートルスロット「1」を選択
turtle.drop()--チェストに入れる
turtle.select(2)--タートルスロット「2」を選択
turtle.drop()--チェストに入れる
turtle.select(3)--タートルスロット「3」を選択
turtle.drop()--チェストに入れる




「タートルスロット選択」「チェストに入れる」を16回行う必要があります

ループ「SLOT」を定義して「turtle.select()」に反映させるプログラムです

--4.のプログラム
for SLOT=1,16 do--ループSLOTは、1~16まで実行
    turtle.select(SLOT)--タートルスロット「SLOT」を選択
    turtle.drop()--チェストに入れる
end--ループSLOTの終わり
--4.のプログラムの終わり


※プログラムのポイント
ループの定義「SLOT」には、「1.2.3....」と1~16まで順番に数字が入ります。これを「turtle.select(SLOT)」とすることでタートルの選択スロットが「1を選び、アイテムを正面に落とす」「2を選び、アイテムを正面に落とす」を繰り返し16スロットまで、すべてのアイテムをチェストに入れることができます。


上がった分だけ下がり採掘場所まで戻る


チェストにアイテムを入れた後に採掘場所に戻ります

ループ「SAGARU」でループ「HUKASA」の実行数だけタートルは下がりますので、逆にループSAGARUを定義して「HUKASA」分だけ下がり採掘の再開位置まで戻ります。

--5.のプログラム
for SAGARU=1,HUKASA do--ループSAGARUは、1~ループHUKASAまで実行
    turtle.down()--下に行く
end--ループSAGARUの終わり
--5.のプログラムの終わり


プログラムを完成させます

--今回のプログラム
--2.のプログラム
for HUKASA=1,100 do--一面を百段掘るループHUKASA
    turtle.digDown()--下を掘る
    turtle.down()--下に行く
    for YOKO=1,3 do--2列を破壊して進むループを3回繰り返すルーツYOKO
        for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
        end--ループTATEの終わり
        turtle.turnRight()--右を向く
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
        turtle.turnRight()--右を向く
        for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
        end--ループTATEの終わり
        turtle.turnLeft()--左を向く
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
        turtle.turnLeft()--左を向く
    end--ループYOKOの終わり
    for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
    end--ループTATEの終わり
    turtle.turnRight()--右を向く
    turtle.dig()--前を壊す
    turtle.forward()--前に行く
    turtle.turnRight()--右を向く
    for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
    end--ループTATEの終わり
--1.のプログラム
    turtle.turnRight()--右「49」の方向を向く
    for HOME=2,8 do--前に行くを7回繰り返すループHOME
        turtle.forward()--前に行く
    end--ループHOMEの終わり
--1.のプログラムの終わり
    turtle.turnLeft()--左を向く(チェストの方を向く)
--3.のプログラム
    for AGARU=1,HUKASA do--ループAGARUは、1~ループHUKASAまで実行
        turtle.up()--上に行く
    end--ループAGARUの終わり
--3.のプログラムの終わり
--4.のプログラム
    for SLOT=1,16 do--ループSLOTは、1~16まで実行
        turtle.select(SLOT)--タートルスロット「SLOT」を選択
        turtle.drop()--チェストに入れる
    end--ループSLOTの終わり
--4.のプログラムの終わり
--5.のプログラム
    for SAGARU=1,HUKASA do--ループSAGARUは、1~ループHUKASAまで実行
        turtle.down()--下に行く
    end--ループSAGARUの終わり
--5.のプログラムの終わり
    turtle.turnRight()--右を向く
    turtle.turnRight()--右を向く
end--ループHUKASA終わり
--2.のプログラム
--今回のプログラムの終わり

※プログラムのポイント
今までは露天掘りの深さは「10」としていましたが、岩盤まで掘り下げることを考えてループHUKASAを「100」としています。
for HUKASA=1,100 do--一面を百段掘るループHUKASA

※プログラムのポイント
タートルは正面か上か下にしかアイテムを落とすことができませんので、ループHOMEの後にタートルは左を向いてチェストの方を向いています。
turtle.turnLeft()--左を向く(チェストの方を向く)

※プログラムのポイント
採掘を再開するには、タートルの向きを考えます。チェストの方を向いた後は、180度向きを変える必要がありますので「右を向くx2」もしくは「左を向くx2」が必要となります。
turtle.turnRight()--右を向く
turtle.turnRight()--右を向く

このプログラムで露天掘りプログラムは完成といえますが、今後は「if」分を使用して効率よくプログラムを組んだり、コンフィグを設定してサイズの可変式、岩盤に到達したらプログラムを終える、MOBによるブロックずれの回避などより高度なプログラムに発展させていきます。


次のページ「if 文を使用して列の移動を終える」
前のページ「列の移動のループを作成して一面を掘りぬく」

0 件のコメント:

コメントを投稿