
当記事はChatGPTが出力した文章を使用しています。
このゲームの関連記事
前回
感覚アンロック

-
いま足元の座標:
get_pos_x() / get_pos_y() -
足元の中身:
get_entity_type()(例:Entities.Bush/ ニンジンならEntities.Carrot/ 何も無いならNone) -
足元の地面:
get_ground_type()(Grounds.Soil/Grounds.Grassland) -
手持ち資材:
num_items(Items.Hay / Items.Wood …)
…が見えるようになったから、安全に耕す・賢く植える・スマートに動くができるのよ💅
じゃ、感覚を使って“3×3で ニンジン🥕/茂み🌳/草🌿 をバランス良く回す”完全版を出すね。
常時運転:感覚フル活用の“賢い蛇行”♾️
-
列0(ニンジン):収穫できたら刈る→(まだGrassなら)耕す→資材があれば植え直す
-
列1(茂み):刈れたら刈って必ず植え直し(木材供給)
-
列2(草):刈れたら刈るだけ(干し草供給)
-
端ガード:ラップしない(見た目キレイ✨)
size = get_world_size()
going_right = True # 次の列へ進む向き(Trueなら東へ、Falseなら西へ)
going_up = True # 現在の列での縦移動方向(Trueなら北上、Falseなら南下)
# —— 列0(x%3==0):ニンジン畝を作る ——
for r in range(get_world_size()):
# 端でラップしない移動(列0へ寄せる)用に、西向きで並ぶ
while get_pos_x() != 0:
move(West)
# 列0を下へ縦に処理
if get_ground_type() == Grounds.Grassland:
till() # Grass → Soil(ここだけで使う)
plant(Entities.Carrot)
move(North)
# —— 列1(x%3==1):茂み列を作る ——
for r in range(get_world_size()):
while get_pos_x() != 1:
move(East)
plant(Entities.Bush)
move(North)
while True:
# —— いまいるタイルの作業 —— #
# 列の種類を x%3 で決める(0:ニンジン / 1:茂み / 2:草)
if get_pos_x() % 3 == 0:
# ニンジン列
if can_harvest():
harvest()
# ニンジンはSoil必須。もし草地に戻ってたら耕す(安全!)
if get_ground_type() == Grounds.Grassland:
till()
# 資材がある時だけ植え直し(木&干し草を温存)
if num_items(Items.Hay) >= 1 and num_items(Items.Wood) >= 1:
plant(Entities.Carrot)
elif get_pos_x() % 3 == 1:
# 茂み列(木材供給)
if can_harvest():
harvest()
plant(Entities.Bush) # 収穫したら即リカバリ
else:
# 草列(干し草供給)
if can_harvest():
harvest() # 草は植え直し不要
# —— 列ベース蛇行:端ガードで永遠往復 —— #
if going_up:
# 北上中:頂点に着いたら次の列へ横移動し、縦向きを反転
if get_pos_y() == size - 1:
if going_right:
if get_pos_x() == size - 1:
going_right = False
move(West)
else:
move(East)
else:
if get_pos_x() == 0:
going_right = True
move(East)
else:
move(West)
going_up = False # 次の列は南下
else:
move(North)
else:
# 南下中:底に着いたら次の列へ横移動し、縦向きを反転
if get_pos_y() == 0:
if going_right:
if get_pos_x() == size - 1:
going_right = False
move(West)
else:
move(East)
else:
if get_pos_x() == 0:
going_right = True
move(East)
else:
move(West)
going_up = True # 次の列は北上
else:
move(South)
解説ポイント
-
get_ground_type()を見ることで、tillのトグル事故(Soil→Grasslandに戻しちゃう)を回避✨ -
num_items(...)で資材チェック 👉 足りない時は植えないから資材が枯渇しない。 -
列の役割は
x%3で決めてるから、途中で位置がズレても自己修復して安定運用できるよ。
調整用の“ちょい待ち”オプション(空振り多いとき)
成長が遅くて空振りが多いなら、各列で何もしなかったときに1tick待ちを入れると安定することがあるよ👇
# 例:草列だけ待つ(必要に応じて他の列にも)
else:
if can_harvest():
harvest()
else:
do_a_flip() # 待ち1tick(多ければ2回に増やす)
デバッグの味付け(必要なときだけ)
ログりたいなら、イベント時だけ軽く出すと読みやすい👇
if can_harvest():
harvest()
print("HARVEST", get_pos_x(), get_pos_y(), get_entity_type())
大量ログになりそうなら quick_print(...) にしてね。
ありがちミス💣
-
:(コロン)忘れ/インデント混在NG(Tab or Space 片方だけ) -
列判定は 半角% を使う(
get_pos_x() % 3)。 -
till()は地面がGrasslandのときだけ。 -
plant(Entities.Carrot)は資材チェックしてから!
続き