2019年8月10日土曜日

プログラム4

16台のタートルのタートルで自動植林を行うプログラムです。タートルのスロット1は苗木、2は骨粉、3は木炭で固定しています。各アイテムは規定数より少なくなるとプログラムを停止します。原木を伐採、上昇、原木がなくなれば下降、地面につけば下降を終えます。他の植林の葉っぱが下降を妨げることを対処することが重要となります。


タートルのインベントリと横のチェストの関係が重要となります


黄色のタートルが自動植林のタートルです
横のチェストからアイテムを入手


16個の自動植林タートルにプログラムを起動させるのは面倒くさいですが、この問題は検討中です。


スロット1が苗木、スロット2が骨粉、スロット3が木炭
苗木と木炭が2 、骨粉が10個を下回るとプログラムはスリープになります
スロット1.2.3に違うアイテムが入るとエラーを起こします


原木を伐採して横のチェストに原木を入れます




プログラムの流れ


  • 横のチェストからアイテムを入手
  • スロット1に苗木、スロット2に骨粉、スロット3に木炭を移動
  • 燃料レベルが80より少なければ燃料の補給
  • 苗木を植える
  • 骨粉を散布
  • 前のブロックが原木になれば伐採
  • 上昇、上昇できなければ上を破壊
  • 前のブロックが原木でないなら下降
  • 下が土か草ブロックで下降を終える
  • アイテムが規定数より少なくなるとチェストから入手
  • スロット1.2.3以外のアイテムをチェストに戻す



複数タートルでの自動植林 プログラム4
4.のプログラムはここから
--####自動植林プログラム
local Sleep=60
turtle.turnRight()
turtle.turnRight()
while true do--メイン処理の無限ループ
    while true do--アイテム補充の無限ループの実行
        if turtle.getItemCount(1)<2 or--スロット1の下限
            turtle.getItemCount(2)<10 or--スロット2の下限
            turtle.getItemCount(3)<2 then--スロット3の下限
            for A=4,16 do--スロット4~16までアイテムをチェストから入手
                turtle.select(A)
                turtle.suck()
                local Slot=turtle.getItemDetail()
                if Slot then
                    if Slot.name=="minecraft:sapling" then--苗木なら
                        turtle.transferTo(1)--スロット1に入れる
                    elseif Slot.name=="minecraft:dye" then--骨粉なら
                        turtle.transferTo(2)--スロット2に入れる
                    elseif Slot
                        .name=="minecraft:coal" then--木炭なら
                        turtle.transferTo(3)--スロット3に入れる
                    end
                end
            end
            for A=4,16 do--スロット4~16までのアイテムをチェストに戻す
                turtle.select(A)
                turtle.drop()
            end
        else
            break--アイテムの補充の無限ループを終える
        end
        if turtle.getItemCount(1)<2 or
            turtle.getItemCount(2)<10 or
            turtle.getItemCount(3)<2 then
            print("Item_Supply:OsSleep",Sleep,"ms")
            os.sleep(Sleep)--アイテムが足りなかったらスリープ
        end
    end
    turtle.turnRight()
    if turtle.getFuelLevel()<80 then--タートルの燃料が80より少ないなら
        turtle.select(3)
        turtle.refuel(1)--燃料の補給
    end
    turtle.select(1)
    turtle.place()--苗木を植える
    turtle.select(2)
    for A=1,9 do--骨粉を巻く無限ループの実行
        local There,What=turtle.inspect()
        if There then
            if What.name=="minecraft:log" then--前が原木なら
                break--骨粉を巻く無限ループを終える
            else--原木でないなら
                turtle.place()--骨粉散布
                os.sleep(1)
            end
        end
    end
    for A=1,100 do--原木伐採のループの実行
        local There,What=turtle.inspect()
        if There then
            if What.name=="minecraft:log" then--前が原木なら
                turtle.dig()--原木を破壊
                if turtle.up() then
                else--上昇できなければ
                    turtle.digUp()--上の葉を破壊
                    turtle.up()
                end
            else
                break--原木でないなら原木伐採ループを終える
            end
        end
    end
    while true do--下降の無限ループ
        local There,What=turtle.inspectDown()
        if There then
            if What.name=="minecraft:grass" or--下が草ブロック
                What.name=="minecraft:dirt" then--下が土ブロック
                break--下降の無限ループを終える
            end
        else
            turtle.down()
        end
    end
    turtle.suck()
    turtle.turnLeft()
end
4.のプログラムはここまで



1台のタートルでの自動植林ならドロップした苗木をタートルを移動して回収することも可能ですが、極力動きを少なくすることがエラーを出さない条件となりますので行いません。また葉っぱを刈るために回転しながら破壊を試してみましたが、メインの分配タートルを破壊してしまいました。

次のプログラムです
複数タートルでの自動植林 プログラム5

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

0 件のコメント:

コメントを投稿