Godot 4 で作っている、現実の時間と一緒に土地を育てるライフシム「Kin's Domain Life Planner」に、ゲームのはじめに 47 都道府県から土地を選ぶ機能を入れました。選んだ土地の気候で季節がめぐり、植えられる木や野菜、訪れる生き物も変わります。今日は 7 つのコミットで、自動テストは 2,739 件から 3,438 件になりました。
今日やったこと
- 47 都道府県を選ぶ画面を作った(地方 → 県 → 気候と育つ木を見て決める。一度決めたら変えられない)
- 気候を 8 つの区分にした。冬の長さ・雪・霜・雨の多さが変わり、日の出と日の入りは県庁所在地の緯度・経度で計算する
- 木を 6 種類から 40 種類にした(北海道ならエゾマツ、沖縄ならガジュマルなど)
- 生き物を地域で入れ替えた(北海道はエゾリスとキタキツネ、本州から九州はタヌキ、沖縄はヤンバルクイナなど)
- 野菜を 6 種類から 22 種類にし、選ぶキーを 6 つの組(根菜・いも・実もの・葉もの・豆と穀物・香味)にした
- 料理と保存食を 10 品から 26 品にした(干し柿・梅干し・たくあん・ゴーヤチャンプルーなど)
- 土地の外に自然の林を置いた。種は樹種ごとに年に 3 日だけ落ち、その日しか拾えない
詰まったところと、どう解いたか
一番「ほう」と思ったのは、どこで地域の情報を持つかです。地域ごとに「植えられる木の一覧」を持つ形だと、木を足すたびに 8 つの一覧を直すことになります。そこで逆に、木や野菜や生き物の側に「育つ気候区分の一覧」を持たせました。新しい木を足すときは、その木の行に地域を書くだけで済みます。実際、この日のうちに木を 3 回に分けて足しましたが、どれもこの形のまま増やせました。
# 植物の側に「育つ土地」を持たせる(例)
"yamazakura": {"name": "ヤマザクラ", "zones": ["tohoku", "pacific", "south"], "drop_months": [6]}
# 種が落ちる日は、樹種と年から乱数の種を作って選ぶ(保存しなくても毎回同じ日になる)
rng.seed = ("drop:%s:%d" % [species, year]).hash()もう一つよかったのは、「県を選ぶ前は今までのルールで動く」ようにしたことです。こうしておくと、すでにある約 2,700 件のテストは、県を選ばない状態でほとんどそのまま通ります。地域ごとのテストは別に足していき、最後は 410 件になりました。
詰まったところも、テストとスクリーンショットが見つけてくれました。たとえば「霜の降りない沖縄では、春か秋にまく野菜を冬にもまける」というルールを入れたら、ゴーヤまで冬にまけてしまいました。暑さを好む野菜に印を付けて、冬には外しました。また、前に決めていた「野菜の育つ日数は 3〜7 日」という方針がテストに書いてあったので、新しい野菜を 8〜9 日にしていたことにすぐ気づけました。
品数が増えると、市場の画面が 1 列 15 行に収まらなくなりました。全部の品を持った状態で行数を数えるテストを足し、木の苗木、野菜、保存食などでページを分けました。ほかにも、「霜が近い(12 月)」という知らせが月を決め打ちしていて、北海道では 11 月にずれる、というものも見つかりました。
生き物は、日本に野生のハリネズミがいないので、県を選ぶと出なくなるようにしました。代わりに、北海道ではキタキツネが雪に一直線の足跡を残し、沖縄では夜にオリイオオコウモリが木の上を飛びます。

都道府県を選べるようにして増えたもの。木は 6 から 40、野菜は 6 から 22、料理と保存食は 10 から 26、土地の生き物は 11 から 20 種類になり、テストは 2,739 件から 3,438 件になった。

土地の外の自然の林。境界の外の帯に 56 本の木があり、種は樹種ごとに年 3 日だけ落ち、売れるが買えない。
気づき
地域に合わせると、「何を足すか」を現実が決めてくれます。沖縄にリスはいない、北海道ではサツマイモをほとんど作らない、クリは「桃栗三年」で樹齢 3 年から実る。こうした事実を一つずつ当てはめていくと、数字を考えるときの迷いが減りました。一方で、ルールを広く書くと、ゴーヤのように例外がこぼれます。方針をテストに書いておくと、あとから足したものでも、方針から外れたときに気づけます。
次にやること
- 実際のセーブで県を選んで遊び、地域ごとの割り当てを確かめる
- 畑や道具まわりの作業の手触りを見直す
