2020年1月25日土曜日

if 文を使用して列の移動を終える

露天掘りのプログラムに「if」文を使用して「もしも何々だったらどうする」「何々でなかったらこうする」このような分岐を作ってプログラムを短く簡略化しつつ、より高度なものにします。


1ブロック分タートルがはみ出してしまわないように列の移動を終える分岐 

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

「if」文を使って横の移動を終わらせる


ループYOKOを4回に増やしてループYOKOが4回目なら左回りに列の移動を行わずにスタート位置に戻るプログラムを考えます。

--1.のプログラム
if YOKO<4 then--もしもループYOKOが4より小さいなら
    turtle.turnLeft()--左を向く
    turtle.dig()--前を壊す
    turtle.forward()--前に行く
    turtle.turnLeft()--左を向く
else--もしもが当てはまらないなら
    turtle.turnRight()--右を向いてスタート方向を向く
    for HOME=2,8 do--ループHOMEは、2~8まで実行
       turtle.forward()--前に行く
    end--ループHOMEの終わり
end--もしもの終わり
--1.のプログラムの終わり


※プログラムのポイント
if(もしも)、何々が、then(正、正しい場合)
    Aの処理
else(偽、違う場合)
    Bの処理
end(もしもの終わり)

このような書き方が「if」文の基本形です

※プログラムのポイント
2列を掘り進んでいくとYOKOは、1.2.3.4と増えていきます。「4」よりも値が小さい場合は「左回りに列を移動、ループYOKOを繰り返す」、小さくない(同じ)場合は「右を向いてスタート地点に戻る」となります。




前回のプログラムに「if」分を組み込んだプログラムに変更します

--今回のプログラム
for HUKASA=1,100 do--一面を百段掘るループHUKASA
    turtle.digDown()--下を掘る
    turtle.down()--下に行く
    for YOKO=1,4 do--2列を破壊して進むループを4回繰り返すループYOKO
        for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
        end--ループTATEの終わり
        turtle.turnRight()--右を向く
        turtle.dig()--前を壊す
        turtle.forward()--前に行く
        turtle.turnRight()--右を向く
        for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
        end--ループTATEの終わり
--1.のプログラム
        if YOKO<4 then--もしもループYOKOが4より小さいなら
            turtle.turnLeft()--左を向く
            turtle.dig()--前を壊す
            turtle.forward()--前に行く
            turtle.turnLeft()--左を向く
        else--もしもが当てはまらないなら
            turtle.turnRight()--右を向いてスタート方向を向く
            for HOME=2,8 do--ループHOMEは、2~8まで実行
                turtle.forward()--前に行く
            end--ループHOMEの終わり
        end--もしもの終わり
    end--ループYOKOの終わり
--1.のプログラムの終わり
    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終わり
--今回のプログラムの終わり


※プログラムのポイント
今回は、もしも当てはまらないなら「スタート位置の戻る」としていますが、「else」から「end」までの処理は短くても長くても構いません。

※プログラムのポイント
for YOKO=1,4 do--2列を破壊して進むループを4回繰り返すループYOKO
ループYOKOを3回から4回に増やして「7、8」列目を処理を省いていますので一面を掘りぬくプログラムは短くなりました。

前回のプログラムとタートルの動作は、同じですが「if」文を用いることによってプログラムが短くなりました。次は「if」文の分岐を増やしていきます。


次のページ「if 文で多重分岐で列の移動を管理」
前のページ「スタート地点に戻りチェストにアイテムを入れる」

0 件のコメント:

コメントを投稿