2019年8月12日月曜日

野菜の自動農業プログラム

ジャガイモやニンジンの自動農業プログラムです。野菜は種が成長して小麦となるのではなく収穫した作物を種として植え付けるので使用するチェストは、木炭、作物、骨粉の3個となります。今回は骨粉と木炭のチェストからアイテムを入手できない、また作物がチェストに入らないとタートルは待機します。

プログラムの流れ
前のチェストから燃料
上昇
農地へ移動
無限ループの開始
農地を耕す(2回目以降は収穫)
チェストへ移動
余った骨粉をドロップ
チェストの移動
収穫した作物をドロップ
ドロップできなければ待機
チェストの移動
燃料レベルが500より低くなれば燃料補給
木炭が不足していたら待機
チェストの移動
作物を1スタック入手
チェストの移動
骨粉を3スタック入手
骨粉を3スタック以上入手できなければ待機
農地へ移動
作物を植える
骨粉を散布(3周)
無限ループの終わり


8x8の野菜の自動農業


タートルとチェストの配置、畑でのタートルの動きです。詳しくは小麦の自動農業プログラムの方で確認願います。


ファーミングタートルとチェスト


タートルの前のチェストは木炭、タートルの燃料レベルの下限を設定をしていますので、ここまでの木炭は必要ありません


真ん中のチェストに作物を1スタック、収穫後は、このチェストに作物をドロップしますので1スタックで十分です


骨粉は3周の散布なので最初に不足します、また余った骨粉はこのチェストに戻します




--####野菜の自動農業プログラム、簡易版
--####燃料の補給
turtle.select(1)
turtle.suck()
turtle.refuel()
turtle.up()
--####農地に移動
for A=1,6 do
    turtle.forward()
end
--####無限ループの開始
while true do
--####耕すと収穫のループ
    for A=1,3 do
        turtle.digDown() 
        for A=1,7 do
            turtle.forward()
            turtle.digDown()
        end
        turtle.turnRight()
        turtle.forward()
        turtle.turnRight()
        turtle.digDown() 
        for A=1,7 do
            turtle.forward()
            turtle.digDown()
        end
        turtle.turnLeft()
        turtle.forward()
        turtle.turnLeft()
    end
    turtle.digDown() 
    for A=1,7 do
        turtle.forward()
        turtle.digDown()
    end
    turtle.turnRight()
    turtle.forward()
    turtle.turnRight()
    turtle.digDown() 
    for A=1,7 do
        turtle.forward()
        turtle.digDown()
    end
--####チェストに戻る
    turtle.turnRight()
    for A=1,7 do
        turtle.forward()
    end
    turtle.turnRight()
    turtle.back()
--####骨粉のチェストに余った骨粉をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        local Dye=turtle.getItemDetail()
        if Dye then
            if Dye.name=="minecraft:dye" then
                turtle.dropDown()
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end
--####作物のチェストに作物をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        turtle.dropDown()
    end
    for A=1,2 do
        turtle.back()
    end
--####燃料補給
    if turtle.getFuelLevel()>500 then
        turtle.select(1)
        turtle.suckDown()
        turtle.refuel()
    end
    for A=1,2 do
        turtle.forward()
    end
--####スロット1に作物の補給
    turtle.select(1)
    turtle.suckDown()
    for A=1,2 do
        turtle.forward()
    end
--####スロット2~4に骨粉の補給
    for Slot=2,4 do
        turtle.select(Slot)
        turtle.suckDown()
    end
    turtle.forward()
--####作物の植え付けと骨粉の散布3回
    for Slot=1,4 do
        turtle.select(Slot)
        for A=1,3 do
            turtle.placeDown()
            for A=1,7 do
                turtle.forward()
                turtle.placeDown()
            end
            turtle.turnRight()
            turtle.forward()
            turtle.turnRight()
            turtle.placeDown()
            for A=1,7 do
                turtle.forward()
                turtle.placeDown()
            end
            turtle.turnLeft()
            turtle.forward()
            turtle.turnLeft()
        end
        turtle.placeDown()
        for A=1,7 do
            turtle.forward()
            turtle.placeDown()
        end
        turtle.turnRight()
        turtle.forward()
        turtle.turnRight()
        turtle.placeDown()
        for A=1,7 do
            turtle.forward()
            turtle.placeDown()
        end
        turtle.turnRight()
        for A=1,7 do
            turtle.forward()
        end
        turtle.turnRight()
    end
end
--####野菜の自動農業プログラム、簡易版の終わり




簡易版は木炭と骨粉の不足、作物チェストが満杯で入らないなどの問題が起きてしまいます。完成版では、os.sleep() でこのような不具合で待機するようにしています。またスリープ時間のコンフィグや print() でタートル画面へのエラー表示、燃料レベルの表示をするようにしています。




--####野菜の自動農業プログラム、完成版
--####コンフィグ
--####アイテム入手とアイテムドロップのエラーでの待機時間
local Sleep=60
--####燃料の補給
turtle.select(1)
turtle.suck()
turtle.refuel()
turtle.up()
--####農地に移動
for A=1,6 do
    turtle.forward()
end
--####無限ループの開始
while true do
--####耕すと収穫のループ
    for A=1,3 do
        turtle.digDown() 
        for A=1,7 do
            turtle.forward()
            turtle.digDown()
        end
        turtle.turnRight()
        turtle.forward()
        turtle.turnRight()
        turtle.digDown() 
        for A=1,7 do
            turtle.forward()
            turtle.digDown()
        end
        turtle.turnLeft()
        turtle.forward()
        turtle.turnLeft()
    end
    turtle.digDown() 
    for A=1,7 do
        turtle.forward()
        turtle.digDown()
    end
    turtle.turnRight()
    turtle.forward()
    turtle.turnRight()
    turtle.digDown() 
    for A=1,7 do
        turtle.forward()
        turtle.digDown()
    end
--####チェストに戻る
    turtle.turnRight()
    for A=1,7 do
        turtle.forward()
    end
    turtle.turnRight()
    turtle.back()
--####骨粉のチェストに余った骨粉をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        local Dye=turtle.getItemDetail()
        if Dye then
            if Dye.name=="minecraft:dye" then
                turtle.dropDown()
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end
--####作物のチェストに作物をドロップ
    for Slot=1,16 do
        turtle.select(Slot)
        while true do
            turtle.dropDown()
            if turtle.getItemCount(Slot)==0 then
                break
            else
                print("Chest_Full:OsSleep",Sleep,"ms")
                os.sleep(Sleep)
            end
        end
    end
    for A=1,2 do
        turtle.back()
    end
--####燃料補給
    local FuelLevel=turtle.getFuelLevel()
    print("FuelLevel:",FuelLevel)
    if turtle.getFuelLevel()<500 then
        turtle.select(1)
        while true do
            turtle.suckDown()
            if turtle.getItemCount(Slot)==64 then
                turtle.refuel()
                break
            else
                print("Fuel_Supply:OsSleep",Sleep,"ms")
                os.sleep(Sleep)
            end
        end
    end
    turtle.select(2)
    turtle.dropDown()
    for A=1,2 do
        turtle.forward()
    end
--####スロット1に作物の補給
    turtle.select(1)
    turtle.suckDown()
    for A=1,2 do
        turtle.forward()
    end
--####スロット2~4に骨粉の補給
    for Slot=2,4 do
        turtle.select(Slot)
        while true do
            turtle.suckDown()
            if turtle.getItemCount(Slot)==64 then 
                break
            else
                print("BoneMeal_Supply:OsSleep",Sleep,"ms")
                os.sleep(Sleep)
            end
        end
    end 
    turtle.forward()
--####作物の植え付けと骨粉の散布3回
    for Slot=1,4 do
        turtle.select(Slot)
        for A=1,3 do
            turtle.placeDown()
            for A=1,7 do
                turtle.forward()
                turtle.placeDown()
            end
            turtle.turnRight()
            turtle.forward()
            turtle.turnRight()
            turtle.placeDown()
            for A=1,7 do
                turtle.forward()
                turtle.placeDown()
            end
            turtle.turnLeft()
            turtle.forward()
            turtle.turnLeft()
        end
        turtle.placeDown()
        for A=1,7 do
            turtle.forward()
            turtle.placeDown()
        end
        turtle.turnRight()
        turtle.forward()
        turtle.turnRight()
        turtle.placeDown()
        for A=1,7 do
            turtle.forward()
            turtle.placeDown()
        end
        turtle.turnRight()
        for A=1,7 do
            turtle.forward()
        end
        turtle.turnRight()
    end
end
--####野菜の自動農業プログラム、完成版の終わり

0 件のコメント:

コメントを投稿