2020年1月25日土曜日

if 文で多重分岐で列の移動を管理

「if」分を使い「横に列を移動するループを終える」「右回りに列を移動する」「左回りに列を移動する」このように3個の分岐を作ります。コンフィグを設定してタートルの位置によって「0」と「-1」が当てはまるようにコンフィグ値を変更していきます。

岩盤まで掘りぬきましたが当然チェストには、アイテムは入りきれません

タートルのAPIはこちらで確認できます

今までのプログラムでは一面を掘りぬく考え方は、ループYOKOを4回としていましたが、今回は「一列を掘り進む」ループTATEを8回で考えていきます。

基本となる一列を掘り進むループTATE
for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
    turtle.dig()--前を壊す
    turtle.forward()--前に行く
end--ループTATEの終わり

この後の処理を「if」分で3分岐とします
  1番目の分岐:スタート地点に戻るのか
  2番目の分岐:右回りに列を移動するのか
  3番目の分岐:左回りに列を移動するのか

--今回のプログラム
local YOKOcount=0--定義YOKOcountは「0」
for HUKASA=1,100 do--一面を百段掘るループHUKASA
    turtle.digDown()--下を掘る
    turtle.down()--下に行く
    for YOKO=1,8 do--ループYOKOは、1~8まで実行
        for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
        end--ループTATEの終わり
        if YOKO==8 then--もしもループYOKOが「8」なら
            turtle.turnRight()--右を向いてスタート方向を向く
            for HOME=2,8 do--ループHOMEは、2~8まで実行
                turtle.forward()--前に行く
            end--ループHOMEの終わり
            YOKOcount=0--YOKOcountを「0」に変更
        elseif YOKOcount==0 then--もしもYOKOcountが「0」なら
            turtle.turnRight()--右を向く
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
            turtle.turnRight()--右を向く
            YOKOcount=-1--YOKOcountを「-1」に変更
        elseif YOKOcount==-1 then--もしもYOKOcountが「-1」なら
            turtle.turnLeft()--左を向く
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
            turtle.turnLeft()--左を向く
            YOKOcount=0--YOKOcountを「0」に変更
        end--もしもの終わり
    end--ループYOKOの終わり
    turtle.turnLeft()--左を向く(チェストの方を向く)
    for AGARU=1,HUKASA do--ループAGARUは、1~ループHUKASAまで実行
        turtle.up()--上に行く
    end--ループAGARUの終わり
    for SLOT=1,16 do--ループSLOTは、1~16まで実行
        turtle.select(SLOT)--タートルスロット「SLOT」を選択
        turtle.drop()--チェストに入れる
    end--ループSLOTの終わり
    for SAGARU=1,HUKASA do--ループSAGARUは、1~ループHUKASAまで実行
        turtle.down()--下に行く
    end--ループSAGARUの終わり
    turtle.turnRight()--右を向く
    turtle.turnRight()--右を向く
end--ループHUKASA終わり
--今回のプログラムの終わり






コンフィグの定義
local YOKOcount=0--定義YOKOcountは「0」
ユーザーが文字設定して値を指定するルールを決めるようなものです
local␣定義文字=値
YOKOcountの値を初期値「0」と定めます
右回りに列を移動したら「-1」と変更します
左回りに列を移動したら「0」と変更します
ループYOKOが8回終わったら「0」と変更します


1番目の分岐
if YOKO==8 then--もしもループYOKOが「8」なら
ループYOKOが「8回目を終えたら」でスタート地点に戻ります
タートルの位置は「64」です

turtle.turnRight()--右を向いてスタート方向を向く
for HOME=2,8 do--ループHOMEは、2~8まで実行
    turtle.forward()--前に行く
 end--ループHOMEの終わり

YOKOcount=0--YOKOcountを「0」に変更
YOKOcountは「0」になり、次に「8」の位置でタートルは右回りに列を移動します


2番目の分岐
elseif YOKOcount==0 then--もしもYOKOcountが「0」なら
YOKOcountが「0」なら「右回りに列を移動」
タートルの位置は「8、24、40、56」です

turtle.turnRight()--右を向く
turtle.dig()--前を壊す
turtle.forward()--前に行く
turtle.turnRight()--右を向く

YOKOcount=-1--YOKOcountを「-1」に変更
YOKOcountは「-1」になります


3番目の分岐
elseif YOKOcount==-1 then--もしもYOKOcountが「-1」なら
YOKOcountが「-1」なら「左回りに列を移動」
タートルの位置は「16、32、48」です

 turtle.turnLeft()--左を向く
 turtle.dig()--前を壊す
 turtle.forward()--前に行く
 turtle.turnLeft()--左を向く

YOKOcount=0--YOKOcountに「0」に変更
YOKOcountは「0」になります


※プログラムのポイント
elseif(違うなら、もしもこっちなら)とつなげていくことで、分岐を無限に作っていくことができます。難しくなりますが、タートルにより複雑な動きのコントロールも可能になります。

※プログラムのポイント
一番目の分岐にループYOKOとすることが重要となります。「YOKOcount」の右回り「0」、左回り「-1」は、必ずどちらかが当てはまってしましますので、まず横の移動のループYOKOを終える分岐を最初に書き込む必要があります。

※プログラムの考え方
スタート時は、YOKOcountは「0」
①一段掘り下げる
②YOKOcountが「0」なら右回りに列を移動してYOKOcountを「-1」に変更
③YOKOcountが「-1」なら左回りに列を移動してYOKOcountを「0」に変更
これを8回繰り返して
④ループYOKOが「8」ならスタート地点に戻りYOKOcountを「0」に変更
⑤チェストにアイテムを入れる
これを岩盤まで繰り返します


次のページ「往復の採掘でクアーリーの動きを再現」
前のページ「if 文を使用して列の移動を終える」

0 件のコメント:

コメントを投稿