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

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

 

このゲームの関連記事

www.himajin-block30.com

 

前回

www.himajin-block30.com

 

感覚アンロック

  • いま足元の座標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)資材チェックしてから!


 

続き

www.himajin-block30.com

 

このゲームの関連記事

www.himajin-block30.com