TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【バイブコーディング】レトロ戦略ゲームを作る その4(マップ保存/読み込み)

前回、レトロターン制戦略ゲームにマップエディタを実装した。

今回は、マップの保存と読み込みを実装する。
また、テスト用にゲームボーイウォーズのマップを再現して、プレイできることを確認する。

マップの保存と読み込み

マップエディタで、右クリックのメニューから、マップの保存と読み込みができるようにした。

質問:

EditorSceneで、右クリックメニューからマップの保存と読み込みができるようにしたい。
どのように実装すればよいか検討してください。

回答:

おすすめは、右クリックメニューの UI は MainWindow、ファイル状態は ScenarioEditorDocument、表示更新は EditorScene に分ける形です。
...(略)

そのまま実装を指示して、問題なく実装できた。

ゲームボーイウォーズのマップの変換

ゲームボーイウォーズの全マップを画像で掲載しているサイトがあったので、その画像を元に、テンプレートマッチングで地形をデータ化して、今回実装したマップのJson形式に変換を行った。

Codexが使用上限になっていたので、ChatGPTでPythonスクリプトを実装した。
サンプルのJsonを与えるだけで、変換方法は何も指示していないが、変換スクリプトが実装された。

{
    "width": 16,
    "height": 16,
    "day": 0,
    "currentSide": "red",
    "forcedWinner": null,
    "funds": [
        0,
        0
    ],
    "tiles": [
        {
            "coord": {
                "col": 0,
                "row": 0
            },
            "terrain": "sea",
            "owner": null,
            "originalOwner": null,
            "capturePoints": 0
        },
(略)

このような形式に変換できた。

ゲームボーイウォーズのマップ読み込み

コマメ島のマップが読み込みできた。


テストプレイ

テストプレイしたところ、ゲームルールの実装がいろいろ間違っていることがわかった。

  • ゲーム開始時に所持金が0になる
  • 首都や工場で正しいユニットが生産できない
  • ユニットを作ると相手が全滅になってゲームが終了する
  • 輸送ヘリが森や山で降車できる
  • ユニットが与えるダメージが明らかにおかしい

ダメージや降車については、GeminiのDeep Researchの結果が怪しいので、ChatGPTでWebで調べて検証を依頼したところ、間違いが散見された。
GeminiのDeep Researchは信用できない。
ChatGPTでDeep Researchをやり直して、結果をWebで検証させることで、仕様を修正した。

修正版の仕様を元に、Codexで実装に反映した。

実際に最後まで遊んでみる

コマメ島のマップで最後まで遊べるか確認した。

AIが弱く、戦車Bしか作成しない。
あっさり首都を占領して勝てた。
AIが弱すぎて面白くないが、最後までゲームボーイウォーズと同じ挙動でプレイできることは確認できた。


まとめ

マップエディタに保存・読み込み機能を実装した。
ゲームボーイウォーズのマップを画像からテンプレートマッチングで変換し、実際に読み込み・プレイ可能にした。
テストで仕様や実装の誤りを修正し、最終的に一通り遊べる状態を確認した。

AIが弱すぎるので、次はAIをある程度強くしたい。
マップの自動生成も行えるようにしたい。