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

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

 

このゲームの関連記事

www.himajin-block30.com

 

前回

www.himajin-block30.com


「一面カボチャ → 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 で読み込まれる想定だよ。

  • 🎃モードは

    1. 全面カボチャ植え

    2. 2周スイープ:枯れたカボチャを植え替え(なるべく大きなカボチャを作る)

    3. 3周目で全収穫
      を自動で回すよ。

  • 🥕在庫が少なくなったら補給モードに自動切替、回復したら🎃モード再開

  • 肥料は使わず、水だけを所定のしきい値で使用。

しきい値(CARROT_LOW/HIGHWATER_*)は畑の回り具合でチューニングしてね。

 

 

 

 

このゲームの関連記事

www.himajin-block30.com