ラベル プログラミング_Godot の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング_Godot の投稿を表示しています。 すべての投稿を表示

2026年6月22日月曜日

Godotでフリーセルを作った

GodotというOSSゲームエンジンを使ってフリーセルを作りました


ゲーム本体:フリーセル | マグロにアグロ

GitHub:asurato/godot-freecell · GitHub


作ってみた理由は、

  • Godotとかgdscriptとかを触ってみたかったから
  • GodotはCLIから操作しやすく、AIコーディングに向いてそうだから

の2つ。CLAUDE.mdや仕様書を整備して、AI様の往く末を見守った。


実装は3段階で作成した。1つ目は盤面やカードなどの値オブジェクトで、gdscriptにおけるResource。2つ目はUIを伴わない純粋ロジック層。3つ目はUIが絡むGodot層。

Resourceを最初に定めたのは、セーブやロード、あとはフリーセル特有のUndoやRedoに対応しやすくするため。「データからシステムを考えるのは悪」だとWeb系の方々には言われそうだが、ことゲーム開発においては先に決めといた方が良さそう。GodotではResourcesをJsonやバイナリで出力できるのが大変便利でおススメ。

2つ目の純粋ロジック(非UI)層ではGutを使って単体テストを書かせまくった。それと、データと振る舞いを明確に分離させたくて全メソッドをstaticで書かせたりもした(staticおじさんだと煽るのはやめてください!まだお兄さんなので!)。で、これはオチなんですが、全staticメソッド化は特に効果なかったので真似しなくていいです。単にファイル分ければええねん。

3つ目はGodot層で、UI関係を全部ぶち込んだ。多少だがUI検証用の結合テストも追加した。


色々書いてしまったが、開発に特に効いたのは以下の3点だったと思う

  • 最初にドキュメントを整備した
  • Resourcesを通してセーブ&ロードの仕組みを早めに導入した
  • テストを書かせまくった


というわけで、暇な人は遊んでみてください!