関数の定義
function␣関数()
処理内容、何行でもOK
end
例
--タートルが上に64ブロック積み上げる関数「UPPLACE()」を定義します
function UPPLACE()--関数UPPLACE
for UE=1,64 do--ループUEは、1~64まで実行
turtle.up()--上に行く
turtle.placeDown()--下に行く
end--ループUEの終わり
end--関数UPPLACAの終わり
--関数「UPPLACE()」を使用してプログラムを作ります
UPPLACE()--関数UPPLACE
turtle.select(2)--タートルはスロット2を選択
UPPLACE()
turtle.select(3)--タートルはスロット3を選択
UPPLACE()
タートルは「64ブロック積み上げる」「スロットを変更」これを繰り返します。このようにプログラム内に何度か出てくる部分を関数としてまとめます。
--今回のプログラム
--露天掘りサイズのコンフィグ
local TATEsize=8--縦のサイズ
local YOKOsize=8--横のサイズ
local HUKASAsize=100--掘る深さ
--定義文字の設定
local DOWNcount=0--定義DOWNcountは「0」
local YOKOcount=0--定義YOKOcountは「0」
local OWARU=0--定義OWARUは「0」
--関数の定義
function SIRABETEMAENIIKU()--岩盤を調べながら前に行く
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名
local ARU,NANIGA=turtle.inspectDown()
--もしもブロック名が岩盤と違うなら
if NANIGA.name~="minecraft:bedrock" then
turtle.forward()--前に行く
else--もしも違うなら
OWARU=OWARU+1--定義OWARUに「+1」
turtle.forward()--前に行く
end--もしもの終わり
end--関数の定義の終わり
--メイン処理
--ループHUKASAは、1~HUKASAsize/2まで実行
for HUKASA=1,HUKASAsize/2 do
--タートルの露天掘り
for OUHUKU=1,2 do--ループOUHUKUは、1~2まで実行
if OWARU==0 then--もしも定義OWARUが「0」なら
turtle.digDown()--下を掘る
turtle.down()--下に行く
DOWNcount=DOWNcount+1--定義DOWNcountに「+1」
end--もしもの終わり
for YOKO=1,YOKOsize do--ループYOKOは、1~YOKOsizeまで実行
for TATE=2,TATEsize do--ループTATEは、2~TATEsizeまで実行
turtle.dig()--前を壊す
SIRABETEMAENIIKU()--岩盤を調べながら前に行く
end--ループTATEの終わり
if YOKO==YOKOsize then--もしもループYOKOが「YOKOsize」なら
if OUHUKU==2 then--もしもOUHUKUが「2」なら終える
else--もしも違うなら
turtle.turnRight()--右を向く
turtle.turnRight()--右を向く
end--もしもの終わり
elseif YOKOcount==0 then--もしもYOKOcountが「0」なら
turtle.turnRight()--右を向く
turtle.dig()--前を壊す
SIRABETEMAENIIKU()--岩盤を調べながら前に行く
turtle.turnRight()--右を向く
YOKOcount=-1--YOKOcountを「-1」に変更
elseif YOKOcount==-1 then--もしもYOKOcountが「-1」なら
turtle.turnLeft()--左を向く
turtle.dig()--前を壊す
SIRABETEMAENIIKU()--岩盤を調べながら前に行く
turtle.turnLeft()--左を向く
YOKOcount=0--YOKOcountを「0」に変更
end--もしもの終わり
end--ループYOKOの終わり
end--ループOUHUKUの終わり
--タートルがチェストに戻る
--ループAGARUは、1~定義DOWNcountまで実行
for AGARU=1,DOWNcount do
turtle.up()--上に行く
end--ループAGARUの終わり
--タートルがチェストにアイテムを入れる
for SLOT=1,16 do--ループSLOTは、1~16まで実行
turtle.select(SLOT)--タートルスロット「SLOT」を選択
turtle.drop()--チェストに入れる
end--ループSLOTの終わり
if OWARU==0 then--定義OWARUが「0」なら
--タートルが露天掘り場所に戻る
--ループSAGARUは、1~定義DOWNcountまで実行
for SAGARU=1,DOWNcount do
turtle.down()--下に行く
end--ループSAGARUの終わり
turtle.turnRight()--右を向く
turtle.turnRight()--右を向く
--タートルが露天掘りを終える
else--もしも違うなら
break--プログラムを終わらせます
end--もしもの終わり
end--ループHUKASA終わり
--今回のプログラムの終わり
「turtle.forward()--前に行く」の部分は、下のブロックが岩盤かどうか調べながらタートルは、前に行くプログラムとなっていますので長くなってしまっています。これを3回使用しているので関数として定義します。
関数名は「SIRABENAGARAMAENIIKU()」とします
--定義、下を調べる、ARUは、何がある、NANIGAは、ブロック名
local ARU,NANIGA=turtle.inspectDown()
--もしもブロック名が岩盤と違うなら
if NANIGA.name~="minecraft:bedrock" then
turtle.forward()--前に行く
else--もしも違うなら
OWARU=OWARU+1--定義OWARUに「+1」
turtle.forward()--前に行く
end--もしもの終わり
end--関数の定義の終わり
プログラム内のタートルAPI、if 文、for 文などで作られた部分で何度か出てくる同じ部分を関数とすることでタートルの動き(メイン処理)の部分をわかりやすくすることができます。
次のページ「MOBによるタートルの位置ずれを防止する」
前のページ「コンフィグを設定してサイズを可変式に」
0 件のコメント:
コメントを投稿