2019年7月11日木曜日

露天掘りプログラム

サバイバルのいかなる条件でもタートルは確実に戻って来て、アイテムをチェストに入れて燃料を補給する露天掘りプログラム(クアーリー)です。MOBとの接触でタートルの移動位置が変わることを防止していますので、規則正しい採掘が可能です。採掘範囲は可変式ですが、タートルのインベントリが16スロットであることを考えると最大、24x24となります。回収するアイテムを指定すれば、クアーリープラスの最大サイズの256x256も可能になるでしょう。

タートルが失踪することなく、確実にチェストに戻って来てくれます


サバイバルではこのような土地でも採掘しなければなりません、スタート時には左から燃料のチェストに木炭、石炭を入れます、次にアイテムを入れる空のチェスト、マイニングタートルでプログラムスタートです。

※左手にツルハシ、右手に斧か剣となります

前を掘る、前に行く、下を掘るのプログラムなので前もって整地をする必要がありません


前に原木があってもツルハシで破壊してくれます

タートルは、適正ツールで破壊できるではなく、アイテム回収ができるかが、基本となります。ダイヤのツルハシで石や鉱石類の採掘はもちろん、原木の破壊、MOBへの攻撃も可能です。斧では石や鉱石類の破壊はできますが、アイテム回収はできずに消滅します。


1番目のチェストに採掘アイテムを入れ、2番目のチェストで燃料を補給します

燃料はタートル内にもプールすることができますので、前もって燃料満タンにしておくことができます。さらにコンフィグで燃料なしで動かすこともできますので、初心者は燃料に関してこだわらない方がプログラムを組みやすくなります。

# Configuration file

普通のタートル
#カメの燃料限界
    I:turtleFuelLimit = 20000

Advanced タートル
#高度なカメの燃料限界
    I:advancedTurtleFuelLimit = 100000

燃料を必要としない場合は
#カメが移動するために燃料を必要とするかどうかを設定します
    B:turtlesNeedFuel = true → false に変更


ラージチェスト1個では容量が全く足りません


採掘アイテムがあふれてしまいます。輸送タートルのプログラムを作ったり、ホッパーを使ったり、MODチェストなどの使用をお勧めします。




MOBに当たると押し込んでいきます


押し込んだまま壁に当たると1ブロック分、計算したプログラムがズレてしまいます。このプログラムは、タートルが前や下に行けなかった場合は、MOBに攻撃を繰り返します。


建築ではMOBの影響を受けにくいんですが、露天掘りは地下の状況が見えませんし、MOBの出現によるエラーも考えられます。スタート地点に戻ってくるプログラムには、タートルを規則正しく動かす必要があります。前進や上昇、下降などの動きがズレることは絶対にタブーですので、予測できないMOBへの対処が重要となります。


タートルはカメなので溶岩なんて関係ありません


※MOBに阻まれて上に行けないことは、ないと考えています
※クリーパーの爆発の影響は不明です
※タートルは水流や溶岩の影響は受けません


岩盤まで掘りぬいたタートルはスタート位置に戻ってきます

チェストをセットしてタートルに多少の燃料の補給してプログラムをスタートさせます。

24x24の露天掘りプログラム
--####コンフィグ設定
local TATE=24--縦のサイズ、変更可能
local YOKO=24--横のサイズ、変更可能
local HUKASA=120--深さ、下が岩盤ならプログラムは終了
--ループに使用する変数
local COUNT=0--横に移動する変数
local UP=0--上下に移動する変数
--####何がなんでも前に行く関数
function MAENIIKU()--関数名、MAENIIKU()を定義
    if turtle.forward() then--もしも1、前に行けたらendに飛ぶ
    else--もしも1、前に行けなかったら
        while true do--無限ループを実行
            turtle.dig()--前を破壊
            turtle.attack()--前を攻撃
            if turtle.forward() then--もしも2、前に行けたら
              break--無限ループのブレーク
            end--もしも2、の終わり
        end--無限ループの終わり
    end--もしも1、の終わり
end--関数の終わり
--####何がなんでも下に行く関数
function SITANIIKU()--関数名、SITANIIKU()を定義
    if turtle.down() then--もしも1、下に行けたらendに飛ぶ
    else--もしも1、下に行けなかったら
        while true do--無限ループを実行
            turtle.digDown()--下を破壊
            turtle.attackDown()--下を攻撃
            if turtle.down() then--もしも2、下に行けたら
              break--無限ループのブレーク
            end--もしも2、の終わり
        end--無限ループの終わり
    end--もしも1、の終わり
end--関数の終わり
--####メインの処理
for A=1,HUKASA do--ループA、1~HUKASAまで実行
    for B=1,YOKO/2 do--ループB、1~YOKOまで実行
--奇数列の採掘
        turtle.digDown()--下を壊す
        for C=1,TATE-1 do--ループCは、1~TATE-1まで実行
            MAENIIKU()--関数、前に行く
            turtle.digDown()--下を壊す
        end--ループEの終わり
--列の移動
        turtle.turnRight()--右を向く
        MAENIIKU()--関数、前に行く
        if turtle.turnRight() then--もし右を向いたら
            COUNT=COUNT+1--変数、COUNTに+1追加
        end--もしもの終わり
--偶数列の採掘
        turtle.digDown()--下を壊す
        for D=1,TATE-1 do--ループDは、1~TATE-1まで実行
            MAENIIKU()--関数、前に行く
            turtle.digDown()--下を壊す
        end--ループDの終わり
--列を移動して採掘するか、チェストに行くかを判断
        if COUNT*2==YOKO then--もしCOUNTx2がYOKOのサイズと同じなら
            turtle.turnRight()--右を向く
            UP=UP+1--変数、UPに+1を追加
        else--もしCOUNTx2=YOKOでないなら
            turtle.turnLeft()--左を向く
            MAENIIKU()--関数、前に行く
            turtle.turnLeft()--左を向く
        end--もしもの終わり
    end--ループBの終わり
    COUNT=0--COUNTのリセット
--スタート地点の戻る 
    for E=1,UP do--ループEは、1~UPまで実行
        turtle.up()--上に行く
    end--ループEの終わり
    for F=1,YOKO-1 do--ループFは1~YOKO-1まで実行
        MAENIIKU()--関数、前に行く
    end--ループFの終わり
--チェストにアイテムを入れる 
    MAENIIKU()--関数、前に行く
    for G=1,16 do--ループGは、1~16回まで実行
        turtle.select(G)--アイテムスロットはループGを選択
        turtle.dropDown(64)--アイテムを64個チェストに入れる
    end--ループGの終わり 
--燃料の補給 
    MAENIIKU()--関数、前に行く
    MAENIIKU()--関数、前に行く
    turtle.suckDown(10)--下から入手
    turtle.refuel()--燃料補給
    turtle.turnRight()--右を向く
    turtle.turnRight()--右を向く
    MAENIIKU()--関数、前に行く
    MAENIIKU()--関数、前に行く
    MAENIIKU()--関数、前に行く
    turtle.turnLeft()--左を向く
--採掘の再開する場所に移動 
    for H=1,UP+1 do--ループHは、1~UP+1まで実行
    SITANIIKU()--関数、下に行く
    end--ループHの終わり
--下が岩盤ならループAのHUKASAを終わる
    local ARU,NANIGA=turtle.inspectDown()
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名 
    if ARU then--もしも1、下にブロックがあるなら
        if NANIGA.name=="minecraft:bedrock" then
--もしも2、ブロック名が岩盤と同じなら
            for I=1,UP do--ループIは、1~UPまで実行
                turtle.up()--上に行く
            end--ループIの終わり
            break--ブレークする
        end--もしも2、の終わり
    end--もしも1、の終わり
end--ループAの終わり



24x24の露天掘りプログラムの解説

--####コンフィグ部分
TATE、YOKOを変更できます
HUKASAは下が岩盤ならプログラムを終了します
COUNTで横の動きの制御
UPで上下移動の制御

--####関数部分
前に行けなかったら攻撃と破壊を無限ループをMAENIIKUで関数定義
下に行けなかったら攻撃と破壊の無限ループをSITANIIKUで関数定義

--####メイン部分、採掘
ループAで1面を採掘、チェストへの移動、一段下がり、採掘再開
ループBで1面を採掘
ループCで1番目のブロックと1列-1を掘り進む
列の移動、変数COUNT+1を追加
ループDで1番目のブロックと1列-1を掘り進む
COUNTOとYOKOで列の移動かスタート地点に戻るかの選択
「列の移動」ならばループBに戻る
「スタート地点に戻る」ならばループBの終了、変数UPに+1を追加
変数COUNTのリセット
ループEで変数UP分+1上がる
ループFでYOKOに移動した分-1戻る

--####チェストでのタートル動き
1番目のチェストへの移動
ループGでスロットを1~16まで切り替えながらアイテムを落とす
2番目のチェストへの移動
燃料を補給

--####次の段の採掘へのタートルの動き
スタート地点に戻る
ループHで採掘を再開する場所まで下がる
もし下が岩盤ならばループAを終了
ループIでUP分だけ上がりプログラムの終了
もし岩盤でないのなら

--####次の段の採掘
ループBの開始


今後の展開
回収するアイテムを指定して256x256の露天掘りを可能にする
チェストが満杯ならばプログラムを一時停止
燃料が一定量以上タートルに入っているなら燃料を補充しない
回収タートルがチェストのアイテムを回収して倉庫に移動

0 件のコメント:

コメントを投稿