2019年7月19日金曜日

自動植林プログラム

ひとつのチェストで1本の苗木を植えて伐採するプログラムです。タートルの移動が少ないので比較的だと思いますが、一番の難所はタートルのインベントリの操作です。チェストを苗木用、骨粉用、燃料用、回収した原木用と4個設置すればいいんですが、それでは物足りないので、このプログラムはタートルのスロットのAPIを使いこなすことを目的として考えています。
「タートルのスロットを制すものは、プログラムを制す!」ですね


チェストひとつで自動植林システム


ラージチェスト、横にタートル


タートルのインベントリは1に苗木、2に骨粉、3に木炭


ラージチェストの3分の1くらいにランダムに苗木と骨粉と木炭を入れておきます


タートルは前に苗木を植えて1秒おきに骨粉を6回与えます


タートルの前に原木が現れると伐採開始


タートルは右回りに1周しながら苗木を回収してチェストの方向を向きます


一度チェストからタートルのスロット1~16のアイテムを入手
次にスロット4~16までのアイテムをチェストに戻します




このプログラムは問題は多いですが、基本となる伐採部分は使えると思います
タートルが動かないので苗木が回収できていない


周囲を歩き回りながらアイテム回収のAPIを使ってプログラムに追加

turtle.suck()
turtle.forward()


葉っぱが消えるのが遅い


タートルが下降するときに1周まわりながら葉を刈るプログラムを追加

for A=1,COUNT do
    for B=1,4 do     
        turtle.dig()
        turtle.turnRight()
    end
turtle.down()
end


チェストの最初の16スロットが原木になるとアイテムの補充ができない

チェストが原木で満杯のなるのが早ければ問題はないかもしれませんが、そうはなりません。ラージチェストの中を調べたり、入手スロットやアイテムを入れるスロットの指定ができません。一度タートルのインベントリに移動すれば色々なことができますが、タートルのインベントリは16スロットというのは大きな壁となります。

解決策は
一度チェスト内のアイテムを入手して捨てて欲しいものが出るまで繰り返すですかね。

あとは小さいことですが
骨粉がもったいない、燃料はどうでもいいんですが、苗木が育つ確率がつかめないので前のブロックが原木になったら骨粉散布をやめるという無限ループも考えられます。



改良プログラムをこの先考えるとして、まずは第一段階です。

--####自動植林プログラム
local COUNT=0
while true do
    turtle.turnLeft()
    turtle.select(1)
    for A=1,16 do
        turtle.select(A)
        turtle.suck()
    end
    turtle.select(1)
    for A=4,16 do
        turtle.select(A)
        turtle.drop()
    end
    turtle.turnRight()
    turtle.select(1)
    turtle.place()
    turtle.select(2)
    for A=1,7 do
        turtle.place()
        os.sleep(1)
    end
    turtle.select(3)
    turtle.refuel(1)
    while true do
        local ARU,NANIGA=turtle.inspect()
        if ARU then
            if NANIGA.name=="minecraft:log" then
                turtle.dig()
                if turtle.up() then
                    COUNT=COUNT+1
                else
                    turtle.digUp()
                    turtle.up()
                    COUNT=COUNT+1
                end
            else break
            end
        end
    end
    for A=1,COUNT do
        turtle.down()
    end
end

プログラムの内容

上に上がった数にCOUNTを定義
チェストの方を向いて
スロット1~16までチェストから補給
スロット4~16までチェストに入れる
右を向いて
苗木を植える
骨粉を1秒ごとに7回散布
燃料を補給
無限ループ開始
前が原木なら前を破壊
上に上がったらCOUNTに+1
上がれなかった
上を破壊して上に上がりCOUNTに+1
前が原木でないなら無限ループの終了
COUNTの数だけ下に行く


ポイント
ループカウンターは、使い捨てのようで、今回はすべて「A」にしてみました。連続処理はエラーが出やすいようなので、上に行く処理は、もしも上に行けなかったら上を破壊としています。

今回は目的の「タートルのスロットを制すものは、プログラムを制す!」は、達成できていないので敗北感が強いのですが、プログラム歴1か月、「CC初めての自動植林プログラム」って感じで納得しておきます。

関連サイト
コンピュータークラフトを極める その2

0 件のコメント:

コメントを投稿