2019年8月10日土曜日

プログラム3

このプログラムはラージチェストを32個設置してアイテムを輸送するプログラムです。プレーヤーは決められたチェストに骨粉、ジャングルの苗木、木炭を入れる必要があります。

自動植林なのですが、チェストとタートルの設置を自動でしたところで、プレーヤーは必ずアイテムを入れる必要があります、その場所を1か所だけにする、MODの大容量チェストやホッパーを使用しないことがこだわりです。このせいで全プログラムの構築に時間が掛かったのも事実ですが、ただ見ていて気持ちがいいだけです。タートルの動きはかなり遅くなります。

2.のプログラムの横のタートルです。紫色に染色しています


1.のプログラムで木炭とチェストが入っています


プログラムのスタート
 この部分のチェストを設置してスタート地点で待機


チェストの設置が終わればタートルはアイテムを入手するまで待機します


無限ループに入れていないのでプログラムの停止は最初だけです

--####骨粉を入手するまで待機
turtle.select(1)
    while true do
        if turtle.suckDown() then
        break
        else
            print("Item_Supply:OsSleep",Sleep,"ms")
            os.sleep(Sleep)
        end
    end




チェストにアイテムを入れます

骨粉に16個のチェスト
苗木に8個のチェスト
木炭に8個のチェストを割り当てています
待機中のタートルの下のチェストと左のチェストは骨粉


タートルの左、3番目のチェストはジャングルの苗木


左端のチェストは木炭

アイテム輸送の流れ

1番目のチェストからアイテムを入手
2番目~7番目のチェストはアイテムをドロップして入手
中央のチェストにアイテムをドロップ
バックしながらドロップ
列を変更
※中央の骨粉の1個なので1列目の動きは少し違います

これで中央のチェストからアイテムが埋まっていきます、前からドロップしていくことも考えましたが、ここがこだわりのポイントです。

--####アイテム入手の関数
function SuckDownALL()
    for A=1,16 do
        turtle.select(A)
        turtle.suckDown()
    end
end
--####アイテムドロップの関数
function DropDownALL()
    for A=1,16 do
        turtle.select(A)
        turtle.dropDown()
    end
end

中央のチェストにアイテムを入れる時は1段下がり、他のタートルとぶつからないようにしています

--####メインのチェストにアイテムを入れる関数
function DropMainChest()
    turtle.forward()
    turtle.forward()
    turtle.down()
    for A=1,16 do
        turtle.select(A)
        turtle.drop()
    end
end

中央の木炭のチェストで燃料レベルが300より少なくなったら燃料を補給します

--####燃料補給
    if turtle.getFuelLevel()<300 then
        turtle.select(1)
        turtle.suck()
        turtle.refuel()
    end




複数タートルでの自動植林 プログラム3
3.のプログラムはここから
--####アイテム輸送プログラム
local Sleep=60
--チェスト設置の関数
function PlaceDownChest()
    turtle.placeDown()
    turtle.forward()
    turtle.forward()
    turtle.placeDown()
end
--####燃料補給
turtle.select(1)
turtle.refuel()
--####チェスト設置
turtle.up()
turtle.select(2)
turtle.forward()
turtle.forward()
turtle.turnRight()
turtle.forward()
for A=1,7 do
    for A=1,3 do
        PlaceDownChest()
    end
    turtle.turnLeft()
    turtle.forward()
    turtle.turnLeft()
    for A=1,3 do
        PlaceDownChest()
    end
    turtle.turnRight()
    turtle.forward()
    turtle.forward()
    turtle.turnRight()
end
for A=1,3 do
    PlaceDownChest()
end
    turtle.turnLeft()
    turtle.forward()
    turtle.turnLeft()
for A=1,3 do
    PlaceDownChest()
end
--####アイテム入手の関数
function SuckDownALL()
    for A=1,16 do
        turtle.select(A)
        turtle.suckDown()
    end
end
--####アイテムドロップの関数
function DropDownALL()
    for A=1,16 do
        turtle.select(A)
        turtle.dropDown()
    end
end
--####列の移動の関数
function NextLine()
    turtle.turnLeft()
    turtle.forward()
    turtle.forward()
    turtle.turnRight()
end
--####メインのチェストにアイテムを入れる関数
function DropMainChest()
    turtle.forward()
    turtle.forward()
    turtle.down()
    for A=1,16 do
        turtle.select(A)
        turtle.drop()
    end 
end
--####骨粉を入手するまで待機 
turtle.select(1)
    while true do
        if turtle.suckDown() then
        break
        else
            print("Item_Supply:OsSleep",Sleep,"ms")
            os.sleep(Sleep)
        end
    end 
--####アイテム輸送の無限ループ
while true do
    turtle.turnLeft()
    SuckDownALL()
    for A=1,7 do
        for A=1,3 do
            turtle.forward()
        end
        DropDownALL()
        SuckDownALL()
    end
    turtle.turnLeft()
    turtle.forward()
    turtle.forward()
    turtle.turnRight()
    DropMainChest()
    turtle.up()
    turtle.turnRight()
    turtle.forward()
    turtle.forward()
    turtle.turnLeft()
    turtle.back()
    turtle.back()
    for A=2,16 do
        turtle.select(A)
        turtle.dropDown()
    end 
    for A=1,6 do
        for A=1,3 do
            turtle.back()
        end
        DropDownALL()
    end
    for A=1,3 do
        turtle.back()
    end
    DropDownALL()
    for A=1,2 do
        NextLine()
        SuckDownALL()
        for A=1,7 do
            for A=1,3 do
               turtle.forward()
            end
            DropDownALL()
            SuckDownALL()
        end
        DropMainChest()
        turtle.up()
        turtle.back()
        turtle.back()
        DropDownALL()
        for A=1,7 do
            for A=1,3 do
                turtle.back()
            end
            DropDownALL()
        end
    end
    NextLine()
    SuckDownALL()
    for A=1,7 do
        for A=1,3 do
            turtle.forward()
        end
        DropDownALL()
        SuckDownALL()
    end
    DropMainChest()
--####燃料補給
    if turtle.getFuelLevel()<300 then
        turtle.select(1)
        turtle.suck()
        turtle.refuel()
    end
    turtle.up()
    turtle.back()
    turtle.back()
    DropDownALL()
    for A=1,7 do
        for A=1,3 do
            turtle.back()
        end
        DropDownALL()
    end
    turtle.turnRight()
    for A=1,6 do
        turtle.forward()
    end
end
3.のプログラムはここまで

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

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

0 件のコメント:

コメントを投稿