【農家は Replace() されました】第5回 for文 |ギャルから学ぶドローン農業【超初心者向け攻略】

当記事はChatGPTが出力した文章を使用しています。

 

このゲームの関連記事

www.himajin-block30.com

 

前回

www.himajin-block30.com

 

3×3 & for / get_world_size() / break / continue 解禁

1) forrange(n) の超基礎 ✨

  • for決めた回数ぶん、ブロックを繰り返す

  • range(n)0 〜 n-1 の並び(n回分)を作る子。

for i in range(5):
    do_a_flip()   # 5回クルッと回る

💡コロン :インデント(TabだけorSpaceだけ)を絶対に統一!


2) get_world_size() で“盤の一辺の長さ”を取る🌍

  • 畑が3×3なら 3 を返す。5×5なら 5

  • これでどんなサイズでも動く汎用コードが書けるよ。

for i in range(get_world_size()):
    harvest()
    move(East)  # 1列ぶん右に進む(端を超えると反対側にラップ)

3) 3×3全域の“基本スキャン”テンプレ(行ごと)🧭

端ラップを利用して「右へn歩×下へ1歩」を繰り返すだけで、全マスを順番に踏めるよ。

# —— 全域スキャン(動作確認用の素体)——
for r in range(get_world_size()):            # 行の数だけ
    for c in range(get_world_size()):        # 列の数だけ
        # ここでそのマスに対してやりたい処理を書く
        move(East)
    move(South)                               # 次の行へ

4) 実戦投入:茂み版「刈ったら即植え」🍃

いま使える:if / can_harvest / harvest / plant(Entities.Bush) / move だけで構成

A. ベーシック(待ちなし)

for r in range(get_world_size()):
    for c in range(get_world_size()):
        if can_harvest():
            harvest()
            plant(Entities.Bush)   # 草に戻る前に即リカバリ
        move(East)
    move(South)

B. “ちょい待ち”入り(熟し待ちを入れて取りこぼし減らす)

for r in range(get_world_size()):
    for c in range(get_world_size()):
        if can_harvest():
            harvest()
            plant(Entities.Bush)
        else:
            do_a_flip()            # 1tick待つ(必要なら2回に増やして)
        move(East)
    move(South)

迷ったら B から。空振り多い畑ほど効くよ👌


5) continuebreak の使いどころ🛑➡️⏭️

continueその周の残りをスキップして次へ

未成熟なら「移動だけして次タイルへ」がサラッと書ける。

for r in range(get_world_size()):
    for c in range(get_world_size()):
        if can_harvest():
            move(East)
            continue          # ここから下は飛ばす
        harvest()
        plant(Entities.Bush)
        move(East)
    move(South)

breakそのループを即終了(内側だけ)

例)「各行で 最初に刈れる1マスだけを狙って、見つけたら次の行へ」

for r in range(get_world_size()):
    for c in range(get_world_size()):
        if can_harvest():
            harvest()
            plant(Entities.Bush)
            break            # 内側のforだけ抜ける(次の行へ)
        move(East)
    move(South)

ただし全収穫したい時は不向き。用途は“1つ見つけたらOK”みたいな探索系だよ。


6) “ジグザグ走査”(視認しやすい版)↔️

同じ方向だけでもOKだけど、「右→下→左→下…」の方が目で追いやすい派にはこれ。

# 行1(→)
for c in range(get_world_size()):
    if can_harvest():
        harvest()
        plant(Entities.Bush)
    else:
        do_a_flip()
    move(East)
move(South)

# 行2(←)
for c in range(get_world_size()):
    if can_harvest():
        harvest()
        plant(Entities.Bush)
    else:
        do_a_flip()
    move(West)
move(South)

# 上の2ブロックを必要な行数ぶん繰り返す(サイズが奇数なら最後の行は片方だけ)

※ そのうち“奇数/偶数行で方向を切り替える”時に計算を使うテクも教えるけど、
今はコピペでOK。読みやすさ優先で十分。


7) ありがちミス💣

  • forifコロン : 忘れ

  • インデント混在(Tab+Space)→ どちらかに統一

  • can_harvest() 抜け・全角カッコ

  • Entities.Bush / East / South大文字小文字ミス


8) どれを使えばいい?あいらのおすすめ🌟

  • まずは「4-B」(待ち1tick入りの全域スキャン)で安定運用。

  • 成熟が早いなら do_a_flip()0回に、遅いなら2回に増やして調整。

  • 「行の最初にだけ刈れればOK」みたいなアチーブ狙いはbreakが便利。

  • 未成熟スキップをスッキリ書くならcontinueも気持ちいい。


 

無限ループ

“いま解禁済み”だけで書くね(while / for / move / do_a_flip / can_harvest / harvest / plant(Entities.Bush) など)。


いちばんカンタン(その場で永遠に回る)

while True:
    do_a_flip()
  • 1ループ=約1tick。完全に無限で回り続けるよ。


パトロール無限(盤面をグルグル)

while True:
    move(North)
  • 端でラップするから、ずっと歩き続けるやつ🙆‍♀️


収穫しながら無限周回(茂み即植え戻し付き)

while True:
    if can_harvest():
        harvest()
        plant(Entities.Bush)
    move(East)
  • 右へ1歩ずつ進みながら、刈れたら即リカバリ→周回で永遠運転🌿

空振りが多いなら“待ち1tick”を入れてリズム調整👇

while True:
    if can_harvest():
        harvest()
        plant(Entities.Bush)
    else:
        do_a_flip()   # 待ち1tick(必要なら2回に増やす)
    move(East)

盤面フル走査+無限(外側while + 中でfor)

while True:
    for r in range(get_world_size()):
        for c in range(get_world_size()):
            if can_harvest():
                harvest()
                plant(Entities.Bush)
            move(East)
        move(South)
  • 全マスを1周→また最初から。取りこぼしに強い定番構成だよ👌


注意ポイント💣

  • while True:if ...:コロン : 忘れ厳禁

  • インデントは統一(Tabだけ or Spaceだけ)。混在はエラー。

  • Entities.BushEast/North大文字小文字() を正確に。

  • break を入れると無限じゃなくなるから、今日は使わないでOK。

止め方🛑

  • 実行中はエディタの停止(□)で止められるよ。

  • 畑や位置を初期化したい時は clear() が便利(解禁済みなら)。

 

for の後ろの rc は何?

変数名のコツ(このゲーム流)

  • 好きな名前でOKi, j, r, c, row, col など自由🙆‍♀️

  • 半角英字/数字/アンダーバーが安全(先頭は英字かアンダーバー)。

    • 例:tile_index, row2 はOK

    • 2row, row-col(ハイフン), row col(スペース)はNG

  • 大文字小文字は別物Rowrow は違う名前。

  • 予約語は使わないfor, if, True などは名前にしないでね。

  • 内側ループは別名にfor r in ... の中でまた for r in ... とすると読みづらい&上書きの元。rcみたいに分けよ〜。

使い方イメージ

for row in range(get_world_size()):
    for col in range(get_world_size()):
        if can_harvest():
            harvest()
            plant(Entities.Bush)
        move(East)
    move(South)

row / colいまは使ってなくてもOK(“この行・この列を処理中だよ”ってメモみたいなもの)。
将来、行ごとに動きを変えたい時に役立つよ(※演算子が解禁されてからね)。

使わない変数なら「捨て変数」もアリ

for _ in range(get_world_size()):
    move(East)

_ は“使わないよ”の合図。読みやすくなるからおすすめ✨


まとめ💡
r/c任意でOK。ただし半角・分かりやすい名前・内外で別名の3点守ればバッチリ!

 

続き

www.himajin-block30.com

 

このゲームの関連記事

www.himajin-block30.com