Q Developer CLI × PygameでDDDなリバーシを作ってみた!〜色が突然反転!? 特殊ルール搭載AI対戦リバーシ〜

に公開

Q Developer CLI × PygameでDDDなリバーシを作ってみた!〜色が突然反転!? 特殊ルール搭載AI対戦リバーシ〜

はじめに

同僚から「Q Developerが無料枠でもすごい」という話を聞いて触ってみたくなりました。
これはやらねばと思い立って、Q Developer CLIを使って、Pygameでリバーシゲームを開発しました。

今回は「コンピュータと対戦できるGUIゲームをAIと一緒に作る」という体験にフォーカスしつつ、設計、UI、演出、リファクタリング、特殊ルール追加までステップを分けて構築していきました。


開発のステップ

1. 初期開発

  • Pygameで8x8のリバーシボードを作成
  • プレイヤー vs コンピュータ(AI)の基本的な対戦機能を実装
  • 最初はシンプルな構成で動作を確認
  • 💬 入力プロンプト:

    "pygamesでコンピュータと対戦できるリバーシを作りたい、シンプルな構造で一度検討して実装してみて"

2. 環境構築

  • requirements.txtを使って依存パッケージをインストール
  • Pythonのvenvを活用して仮想環境を構築し、実行環境を分離
  • 💬 入力プロンプト:

    "pip install -r requirements.txt"
    "venvを作って"

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

3. UI・言語設定

  • インターフェースを日本語から英語に変更
    日本語フォントの扱いに時間をかけたくなかったため、トラブル回避の意図も含めて英語化を選択
  • 💬 入力プロンプト:

    "uiは英語にして"

4. アーキテクチャ改善

  • コードを**DDD(ドメイン駆動設計)**の原則に沿って再構築
    • Domain層(盤面・石・ルールのエンティティやドメインサービス)
    • Application層(ゲームの流れ、入力処理)
    • Infrastructure層(Pygameによる描画、入力、音)
  • 使用していないファイルや関数を削除し、コードベースをクリーンに整理
  • 💬 入力プロンプト:

    "リバーシの処理を、DDDの原則に基づいて、リファクタしてみて"
    "利用していないことを確認して、不要なファイルは削除して"

5. ゲーム体験向上

  • 自分とAIのターン切り替えを視覚的・時間的に分かるように演出
  • 待機時間を少し短縮し、テンポ良くサクサク進むように調整
  • 💬 入力プロンプト:

    "自分のターンと相手のターンが分かるように間を入れて"
    "ウェイトをもう少し短くして、サクサクプレイできるようにして"

6. UI表示改善

  • フォントサイズを調整し、ウィンドウから文字がはみ出す問題を解決
  • 💬 入力プロンプト:

    "ウィンドウから文字がはみでているので、文字のサイズを小さくして"

7. 特殊機能追加(石の色が突然反転!)

  • ゲーム中、ちょうど半分=32個の石を置き終えたタイミングで
    50%の確率で盤上の石の色が全て反転するルールを追加
  • 発生した場合は**「Color Flip!」などの演出表示**を追加し、意外性を演出
  • 💬 入力プロンプト:

    "ちょうど半分の石を起き終わったタイミングで、盤上の石の色が反転する処理を1/2の確率でいれてください、反転する場合はその旨の描画もいれてください"

8. リプレイ機能

  • ゲーム終了後に**「Play Again」ボタンで再戦可能に**
  • ゲーム中断→再開ができるように、プレイ履歴の保存・復元機能も実装
  • 💬 入力プロンプト:

    "ゲーム終了後にリプレイできるようにして"
    "途中でやめて再開始する機能をつけて"


技術的な実装結果

アーキテクチャ

  • ドメイン駆動設計(DDD)に基づいた構成
    • Domain層:Board, Disk, Rule, GameEntity など
    • Application層:GameService, InputHandler
    • Infrastructure層:Pygame UI, Sound, Storage
  • 責務の分離により、テストや機能追加がしやすい設計

主要機能

  • 8x8の標準リバーシボード
  • 人間 vs コンピュータの対戦モード
  • コンピュータの戦略は以下のいずれかをランダムで選択:
    • 角優先
    • 辺優先
    • 最大反転数
  • 石の色反転イベント(32個目で1/2確率)
  • 勝敗判定・リアルタイムスコア表示
  • ターン間の簡易演出(ウェイト・色表示)
  • Play Again / 中断→再開機能

UI/UX改善

  • 英語インターフェース(多言語対応を見越して)
  • フォントサイズと位置の調整で視認性向上
  • ターンの明示による操作性の改善
  • サクサクしたレスポンス速度
  • 特殊ルール発生時の演出メッセージで没入感アップ

所感と学び

今回、Q Developer CLIを使ってみて以下のような所感を持ちました。

  • 自然言語で段階的に構成・設計・修正の指示ができるため、実質的にはペアプログラミングに近い体験
  • シンプル→複雑構成へリファクタリングしても破綻しない柔軟性
  • DDDの設計にも対応してくれる点に驚き(promptに「DDDで」と入れたら即分割してくれた)
  • 特に盤面の特殊ルール(色反転)の追加など、一風変わった仕様も自然言語で実現可能
  • DDDにリファクタすることで、コードの構造が人間にも理解しやすくなっただけでなく、AIにとっても文脈を持ったコード理解がしやすくなり、自然言語による修正指示がより的確に反映されるようになったと感じた

今後やってみたいこと

  • 難易度選択モード(Easy / Normal / Hard)を追加
  • オンライン対戦(ソケット通信)
  • プレイ履歴のリッチ表示(リプレイを1手ずつ確認)

まとめ

  • Q Developer CLIを使うことで、PythonとPygameでAIリバーシを段階的に実装できた
  • 要件定義からUI演出、構造設計、特殊ルールまですべて自然言語で指示可能
  • プロンプト設計が柔軟で、実装力・理解力ともに高水準
  • 開発プロセスを通じて、AIとのコラボレーション開発の可能性を強く実感

おまけ

💻 GitHubリポジトリ

Discussion