「タートルのスロットを制すものは、プログラムを制す!」ですね
チェストひとつで自動植林システム
ラージチェスト、横にタートル
タートルのインベントリは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 件のコメント:
コメントを投稿