
当記事はChatGPTが出力した文章を使用しています。
このゲームの関連記事
前回
3×3 & for / get_world_size() / break / continue 解禁

1) for と range(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) continue と break の使いどころ🛑➡️⏭️
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) ありがちミス💣
-
forとifのコロン:忘れ -
インデント混在(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.BushやEast/Northの大文字小文字&()を正確に。 -
breakを入れると無限じゃなくなるから、今日は使わないでOK。
止め方🛑
-
実行中はエディタの停止(□)で止められるよ。
-
畑や位置を初期化したい時は
clear()が便利(解禁済みなら)。
for の後ろの r や c は何?
変数名のコツ(このゲーム流)
-
好きな名前でOK:
i,j,r,c,row,colなど自由🙆♀️ -
半角英字/数字/アンダーバーが安全(先頭は英字かアンダーバー)。
-
例:
tile_index,row2はOK -
2row,row-col(ハイフン),row col(スペース)はNG
-
-
大文字小文字は別物:
Rowとrowは違う名前。 -
予約語は使わない:
for,if,Trueなどは名前にしないでね。 -
内側ループは別名に:
for r in ...の中でまたfor r in ...とすると読みづらい&上書きの元。rとcみたいに分けよ〜。
使い方イメージ
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点守ればバッチリ!
続き