2020年2月18日火曜日

64台のタートルを動かして64x64を掘り抜く 失敗編

一番の問題は、タートルの動きが遅いってことです。そこをカバーするには、タートルの数を増やすのが最良だと言えます。同じプログラムをタートルに組み込み動作させることでこの問題を解決します。

露天掘りのタートルを32台、輸送のタートルを32台、ラージチェストを64個で採掘範囲64x64の露天掘りを行います。

タートルとチェストの配置


露天掘りの範囲

露天掘りタートル1台で二列掘りぬきます



--露天掘りのタートルのプログラム
--今回のプログラム
--露天掘りサイズのコンフィグ
local TATEsize=64--縦のサイズ
local HUKASAsize=100--掘る深さ
--定義文字の設定
local OWARU=0--定義OWARUは「0」
--タートルが前に行く関数の定義
function SIRABETEMAENIIKU()--岩盤を調べながら絶対に前に行く関数
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名
    local ARU,NANIGA=turtle.inspectDown()
--もしも①ブロック名が岩盤と違うなら
    if NANIGA.name~="minecraft:bedrock" then
        if turtle.forward() then--もしも②前に行けたら終わり
        else--もしも②前に行けなかったら
            while true do--無限ループを実行
                turtle.attack()--前を攻撃
                if turtle.forward() then--もしも③前に行けたら終わり
                    break--前に行けたら無限ループを終わらせる
                end--もしも③の終わり
            end--無限ループの終わり
        end--もしも②の終わり
    else--もしも下のブロックが岩盤なら
        OWARU=OWARU+1--定義OWARUに「+1」
    end--もしも①岩盤でないならの終わり
end--関数の定義の終わり
--メイン処理
--ループHUKASAは、1~HUKASAsizeまで実行
for HUKASA=1,HUKASAsize do
--タートルの露天掘り
    if OWARU==0 then--もしも定義OWARUが「0」なら
        turtle.digDown()--下を掘る
        turtle.down()--下に行く
    end--もしもの終わり
    for TATE=2,TATEsize do--ループTATEは、2~TATEsizeまで実行
        turtle.dig()--前を壊す
        SIRABETEMAENIIKU()--岩盤を調べながら前に行く
    end--ループTATEの終わり
    turtle.turnRight()--右を向く
    turtle.dig()--前を壊す
    SIRABETEMAENIIKU()--岩盤を調べながら前に行く
    turtle.turnRight()--右を向く
    for TATE=2,TATEsize do--ループTATEは、2~TATEsizeまで実行
        turtle.dig()--前を壊す
        SIRABETEMAENIIKU()--岩盤を調べながら前に行く
    end--ループTATEの終わり
    turtle.turnRight()--右を向く
    turtle.forward()--前に行く
    turtle.turnRight()--右を向く
--露天掘りを続けるか、終えるかの分岐
    if OWARU==0 then--定義OWARUが「0」なら
--アイテムの受け渡しの為にプログラムを一時停止
--定義、上を調べる、ARUは、何がある、NANIGAは、ブロック名
        while true do--無限ループ    
            local ARU,NANIGA=turtle.inspectUp()        
--もしもブロック名がアドバンスタートルなら
            if NANIGA.name=="computercraft:turtle_advanced" then
                os.sleep(1)--1秒プログラムを停止
            else--もしもアドバンスタートルでないなら
                break--無限ループを終わらせる
            end--もしもの終わり
       end--無限ループの終わり
--タートルが露天掘りを終える
    else--もしも違うなら
        break--プログラムを終わらせる
    end--もしもの終わり
end--ループHUKASA終わり
--今回のプログラムの終わり




--輸送タートルのプログラム
--今回のプログラム
--定義文字の設定
local DOWNcount=0--定義DOWNcountは「0」
--タートルの位置を合わせる動き
turtle.turnLeft()--左を向く
turtle.forward()--前に行く
turtle.turnLeft()--左を向く
--メイン処理
for PIPE=1,100 do--ループPIPEは、1~100まで実行
--採掘アイテムを受け取りに行く
--ループSAGARUは、1~DOWNcountまで実行
    for SAGARU=1,DOWNcount do
        turtle.down()--下に行く
    end--ループSAGARUの終わり
--アイテムの受け渡し
    while true do--無限ループ
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名
        local ARU,NANIGA=turtle.inspectDown()
--もしもブロック名がアドバンスタートルなら
        if NANIGA.name=="computercraft:turtle_advanced" then
            for SLOT=1,16 do--ループSLOTは、1~16まで実行
                turtle.select(SLOT)--タートルスロットは、SLOTを選択
                turtle.suckDown()--下からアイテムを吸い上げる
            end--ループSLOTの終わり
            break--無限ループを終わらせる
        end--もしもの終わり
    end--無限ループの終わり
--アイテムを入手できなければプログラムを終える
    if turtle.getItemCount(1)==0 then--もしもスロット1のアイテムが0なら
        break--プログラムを終わらせる
    end--もしもの終わり
--チェストに戻る
--ループAGARUは、1~DOWNcountまで実行
    for AGARU=1,DOWNcount do
        turtle.up()--上に行く
    end--ループAGARUの終わり
--1段目のチェストにアイテムを入れる     
    for SLOT=1,16 do--ループSLOTは、1~16まで実行
        turtle.select(SLOT)--タートルスロットは、SLOTを選択
        turtle.drop()--前にアイテムを落とす
    end--ループSLOTの終わり
--2段目のチェストにアイテムを入れる
    turtle.up()--上に行く
    for SLOT=1,16 do--ループSLOTは、1~16まで実行
        turtle.select(SLOT)--タートルスロットは、SLOTを選択
        turtle.drop()--前にアイテムを落とす
    end--ループSLOTの終わり
    turtle.down()--下に行く
--タートルの上下移動に数値を追加
    DOWNcount=DOWNcount+1--DOWNcountに「+1」追加
end--ループPIPEの終わり
--今回のプログラムの終わり

何も考えないで動かしてみたところ


数台の露天掘りタートルが砂利に行く手を阻まれていました


採掘場は水源で水浸しになりました

64x64の露天掘りとなると整地をする、水源をできるだけ消す必要があります

砂利への回避策としては
前に行く関数に「turtle.attack()--前を攻撃」の後に「turtle.dig()--前を壊す」を追加するか、露天掘り開始位置を露天掘り場所の一番高くにすることで回避できそうです。ただ輸送タートルがアイテムを受け取れないとプログラムを終えてしまいます。

輸送タートルの位置ずれの可能性が
これだけのタートルを動かすとMOBに阻まれて下降や上昇ができないことも想定に入れなければならないようです。以前使用した関数で回避する必要があります。上昇の回数は、チェストを見つけたら止まるプログラムの方が効率がよさそうです。

64x64の露天掘りをする前に整地とタートルとチェストを設置するプログラムを先に考えた方がよさそうです。あとは64台のタートルにプログラムの呼び出しをするのが大変です。

次のページ「64台のタートルを動かして64x64を掘り抜く 成功編」
前のページ「チェストの数を増やしてよりリアルな露天掘りにして完成」

0 件のコメント:

コメントを投稿