
当記事はChatGPTが出力した文章を使用しています。
このゲームの関連記事
前回
「一面カボチャ → 2周スイープ(枯れだけリセット)→ 全収穫」を“🎃モード”として実装、🥕が減ったら補給モード(🥕🌳🌿)に自動切替
ファイルは分割でいくよ(main.py / pumpkin.py / jobs.py / movement.py / supply.py)。そのままコピペOK💅
ファイル名を忘れずにね。
main(司令塔:モード切替+移動)
import jobs
import movement
import pumpkin
import supply
# ── 在庫しきい値(好みに調整OK) ──
CARROT_LOW = 120 # ここ未満なら補給モードへ
CARROT_HIGH = 240 # ここ超えたらカボチャ再開
def main():
size = get_world_size()
going_right, going_up = True, True
pumpkin_mode = True
pumpkin.start(size) # 🎃モードを初期化
while True:
carrots = num_items(Items.Carrot)
if pumpkin_mode and carrots < CARROT_LOW:
pumpkin_mode = False # 補給モードへ
elif (not pumpkin_mode) and carrots > CARROT_HIGH:
pumpkin_mode = True
pumpkin.start(size) # 🎃に戻るたび毎回リセット
# そのマスの仕事
if pumpkin_mode:
pumpkin.tick(size) # 🎃の状態機械で1ステップだけ実行
else:
supply.do_supply_job() # 既存の🥕🌳🌿運用
# 1マスだけ移動(端ガード蛇行)
going_right, going_up = movement.snake_step(size, going_right, going_up)
if __name__ == "__main__":
main()
pumpkin(🎃モード:植える→2周スイープ→全収穫)
# pumpkin.py —— 植え→(先頭で)2フリップ→2周スイープ→収穫&植え付け→(先頭で)2フリップ→…ループ
import jobs # WATER_PUMPKIN / water_if_needed を使う
# ステート
_stage = "PLANT_ALL" # "PLANT_ALL" → "WAIT_FLIP" → "SWEEP_1" → "SWEEP_2" → "HARVEST_AND_PLANT" → "WAIT_FLIP" → …
_steps_left = 0 # そのステージで残タイル数
def start(size):
global _stage
global _steps_left
_stage = "PLANT_ALL"
_steps_left = size * size # 一面植えは盤サイズぶん
def _finish_step(size):
global _stage
global _steps_left
_steps_left -= 1
if _steps_left > 0:
return
if _stage == "PLANT_ALL":
# 植え終わったら、先頭タイルだけで2フリップへ
_stage = "WAIT_FLIP"
_steps_left = 1 # ★先頭タイルだけ
elif _stage == "WAIT_FLIP":
# フリップ終わり→2周スイープの1周目へ
_stage = "SWEEP_1"
_steps_left = size * size
elif _stage == "SWEEP_1":
# 2周目へ
_stage = "SWEEP_2"
_steps_left = size * size
elif _stage == "SWEEP_2":
# 収穫&植え付けへ
_stage = "HARVEST_AND_PLANT"
_steps_left = size * size
else: # "HARVEST_AND_PLANT"
# 次サイクル:また先頭だけ2フリップ→2周スイープへ
_stage = "WAIT_FLIP"
_steps_left = 1
def tick(size):
# いま居る1タイル分だけ処理(移動は main/movement 側)
if _stage == "PLANT_ALL":
# 全面をパンプキン化(肥料なし・水だけ)
if get_ground_type() == Grounds.Grassland:
till() # Soil 化
if get_entity_type() != Entities.Pumpkin and num_items(Items.Carrot) >= 1:
plant(Entities.Pumpkin)
jobs.water_if_needed(jobs.WATER_PUMPKIN)
elif _stage == "SWEEP_1" or _stage == "SWEEP_2":
# 巡回中:収穫不可のパンプキンは即その場で植え替え(成長中/枯れを区別しない)
if get_entity_type() == Entities.Pumpkin and (not can_harvest()):
if get_ground_type() == Grounds.Grassland:
till()
if num_items(Items.Carrot) >= 1:
if get_entity_type() == Entities.Carrot:
jobs.do_carrot()
elif get_entity_type() ==Entities.Tree:
jobs.do_tree()
elif get_entity_type() ==Entities.Grass:
jobs.do_grass()
else:
plant(Entities.Pumpkin)
jobs.water_if_needed(jobs.WATER_PUMPKIN)
else: # "HARVEST_AND_PLANT"
# 収穫できるものは収穫→空きは即パンプキン植え直し
if can_harvest():
harvest()
if get_entity_type() != Entities.Pumpkin:
if get_ground_type() == Grounds.Grassland:
till()
if num_items(Items.Carrot) >= 1:
plant(Entities.Pumpkin)
jobs.water_if_needed(jobs.WATER_PUMPKIN)
_finish_step(size)
jobs(共通ジョブ:草/木/ニンジン+水やり)
# 水位の目安(好みで調整OK)
WATER_PUMPKIN = 0.30
WATER_TREE = 0.30
def water_if_needed(threshold):
if get_water() < threshold and num_items(Items.Water) > 0:
use_item(Items.Water)
def do_grass():
if can_harvest():
harvest()
# Soilのままだと草が生えない→空きSoilならGrasslandへ戻す
if get_entity_type() == None and get_ground_type() == Grounds.Soil:
till()
def do_tree():
if can_harvest():
harvest()
plant(Entities.Tree)
elif get_entity_type() == None:
plant(Entities.Tree)
water_if_needed(WATER_TREE)
def do_carrot():
if can_harvest():
harvest()
if get_entity_type() == None:
if get_ground_type() == Grounds.Grassland:
till()
if num_items(Items.Hay) >= 1 and num_items(Items.Wood) >= 1:
plant(Entities.Carrot)
movement(端ガード付き“縦スネーク”)
def snake_step(size, going_right, going_up):
x = get_pos_x(); y = get_pos_y()
if going_up:
if y == size - 1:
if going_right:
if x == size - 1: going_right = False; move(West)
else: move(East)
else:
if x == 0: going_right = True; move(East)
else: move(West)
going_up = False
else:
move(North)
else:
if y == 0:
if going_right:
if x == size - 1: going_right = False; move(West)
else: move(East)
else:
if x == 0: going_right = True; move(East)
else: move(West)
going_up = True
else:
move(South)
return going_right, going_up
supply(補給モード:🥕🌳🌿+残存🎃の強制更生)
import jobs
def do_supply_job():
x = get_pos_x()
y = get_pos_y()
lane = x % 3 # 0=🥕, 1=🌳(間引き), 2=🌿
# カボチャ残骸/現役がいたらその列の正しい作物で上書きして除去
if get_entity_type() == Entities.Pumpkin:
if lane == 0:
if get_ground_type() == Grounds.Grassland:
till()
if num_items(Items.Hay) >= 1 and num_items(Items.Wood) >= 1:
plant(Entities.Carrot)
return
elif lane == 1:
if (x + y) % 2 == 0:
plant(Entities.Tree)
else:
plant(Entities.Bush)
return
else:
plant(Entities.Bush) # 草に戻すための暫定(後で刈って草へ)
return
# 通常運用:1=🥕, 2=🌳(チェッカーボード), 3=🌿
if lane == 0:
jobs.do_carrot()
elif lane == 1:
if (x + y) % 2 == 0:
jobs.do_tree()
else:
jobs.do_grass()
else:
jobs.do_grass()
使い方&ポイント
-
main を実行、他は同じフォルダに置いて
importで読み込まれる想定だよ。 -
🎃モードは
-
全面カボチャ植え
-
2周スイープ:枯れたカボチャを植え替え(なるべく大きなカボチャを作る)
-
3周目で全収穫
を自動で回すよ。
-
-
🥕在庫が少なくなったら補給モードに自動切替、回復したら🎃モード再開。
-
肥料は使わず、水だけを所定のしきい値で使用。
しきい値(CARROT_LOW/HIGH や WATER_*)は畑の回り具合でチューニングしてね。