🎮

Amazon Q Developer CLI と Pygame でストライク判定ゲームを作った。 #AmazonQCLI

に公開

はじめに

AWS主催の「Amazon Q CLIでゲームを作ろう Tシャツキャンペーン」に参加し、自然言語の指示だけで野球ゲームを開発してみました。
完成したゲームは、ピッチャーが投げる多彩な球種を「ストライク」か「ボール」か判定する、審判体験ゲームです。

URL: Amazon Q CLIでゲームを作ろう Tシャツキャンペーン

なぜこのゲームを作ろうと思ったのか

私はネットワークエンジニアですが、子供の頃からゲームが大好きで、特に野球ゲームにはよく熱中していました。
いつか自分でゲームを作りたいという夢はありましたが、いざコードを書くとなるとハードルが高く感じていました。

しかし、最近ではAI技術が進化し、自然言語で指示を出すだけでコードを生成できるツールが登場しています。
そんな中でAmazon Q Developer CLIを知り、「これなら自分にもゲームが作れるかも」と思い、今回挑戦してみました。

Amazon Q Developer CLIとは?

Amazon Q Developer CLIは、一言でいえば「ターミナル上で対話しながらコーディングをサポートしてくれるAIアシスタント」です。

「こういう機能を持つPythonのコードを書いて」と日本語や英語で伝えるだけで、AIがコードを生成・提案してくれます。
アイデアをすぐに形にしたいときや、新しいライブラリを学びたいときに非常に役立つツールです。

Amazon Q Developer CLIでゲームを作る

今回の開発はすべてAmazon Q Developer CLIを使って行い、自分では一度もコードを書いていません。

フェーズ1:ゲームの土台作り

まずはゲームの基本的な骨格を作るようお願いしました。

プロンプト:
pygame を使って、野球のストライク・ボール判定ゲームの基本的なコードを作ってください。画面中央にストライクゾーンを表示し、ピッチャーの位置からボールが投げられるようにしてください。」

最初はこのように大まかな指示を出しただけだったため、生成されたコードは最低限の構造だけでした。

フェーズ2:ゲーム性の向上

次に、ゲームをもっと面白くするための機能を追加しました。

プロンプト:
「ボールに複数の球種(ストレート、カーブ、スライダー)を持たせたいです。球種ごとにボールの軌道が変化するようにしてください。」

何度かやり取りを重ねるうちに、Amazon Qは私の意図を理解し、より具体的なコードを生成してくれるようになりました。

ただ、実際に実行してみると、必ずボール判定になってしまうバグがあり、このままではゲームになりません。

プロンプト:
「必ずボールが投げられるのではなく、ランダムに球種が選ばれるようにしてください。」

Amazon Qはこの問題を理解し、軌道計算を見直してバグを修正してくれました。

軌道計算を完全に見直しました。今度は:

## 🔧 修正内容

1. フレームベースの移動システム
   • 進行度ベースから固定フレーム数ベースに変更
   • 目標位置に確実に到達するように計算

2. シンプルな直線移動
   • 複雑な速度計算を排除
   • フレームごとの移動量を事前計算

3. 変化球効果の調整
   • 効果量をさらに減少(30, 50に調整)
   • 最終位置計算でも同じ効果を適用

開発を進める中で、やりたいことを細かく分割し、段階的に指示を出すのが重要だと実感しました。

フェーズ3:UIの改善

プロンプト:
「スコア表示、残り投球数、球種の説明などを画面右上に配置してください。また、ゲームオーバー画面では最終スコアと正答率、評価メッセージを表示するようにしてください。」

驚くべきことに、Amazon Qはこうした具体的な要望にも的確に応え、デザインやレイアウトまで考慮したコードを生成してくれました。

特に、ゲームの状態(待機中、投球中、判定中、結果表示など)に応じて画面表示を切り替えるロジックは、自分一人で実装していたらもっと時間がかかっていたと思います。


ゲームの心臓部:Ballクラス

今回作成したコードの中心である Ball クラスと Game クラスは、ほとんどAmazon Qとの対話によって完成しました。

class Ball:
    def __init__(self):
        self.pitch_types = {
            "Straight": {"curve": 0, "speed": 1.0, "color": WHITE, "description": "Fastball - No movement"},
            "Curve": {"curve": 0.3, "speed": 0.7, "color": YELLOW, "description": "Curveball - Big break"},
            "Slider": {"curve": -0.2, "speed": 0.8, "color": BLUE, "description": "Slider - Lateral movement"},
            "Fork": {"curve": 0, "speed": 0.6, "drop": 0.4, "color": RED, "description": "Forkball - Sharp drop"},
            "Sinker": {"curve": 0.1, "speed": 0.8, "drop": 0.2, "color": (255, 165, 0), "description": "Sinker - Slight drop"}
        }
        self.reset()
    
    def update(self):
        # 軌道計算ロジック
        if progress > 0.3:
            curve_effect = self.curve_amount * (progress - 0.3) * 30
            drop_effect = self.drop_amount * (progress - 0.3) ** 2 * 50
            self.x += curve_effect
            self.y += drop_effect

完成した「野球キャッチャーゲーム」

こうして完成したのが、この「野球キャッチャーゲーム」です。

  • 直感的な操作:ボールが止まった瞬間に S(ストライク)または B(ボール)を押すだけ。
  • 詳細なフィードバック:判定後には、正解・不正解に加え、実際の球種やコースがグラフィカルに表示されます。
  • 成績評価:10球終わると「審判力」として正答率と評価メッセージが表示されます。

Amazon Q Developer CLIを使ってみた感想

良かった点

  • 驚異的な開発スピード
    アイデアを伝えると数秒で動くコードの雛形が手に入り、プロトタイピングの速度が劇的に上がりました。

  • 学習ツールとして優秀
    Pygameのような初めて扱うライブラリでも、どう書けばよいかすぐに例を得られ、学習のハードルが大きく下がりました。

  • 日本語対応が非常に高精度
    ほとんど日本語だけで指示しましたが、意図を正確に理解してくれました。

苦労した点・気づき

  • プロンプトは具体的に
    「いい感じにして」ではなく、「〇〇を右上に、サイズは〇〇で」と細かく段階的に伝える必要がありました。

  • デバッグは必須
    自動生成されたコードには予期しないバグもあります。特にゲームのロジックや状態管理は自分でチェック・修正が必要です。

  • AIはあくまで道具
    複雑なアルゴリズムではAIが出すコードが最適とは限らず、自分の要件やイメージを明確にする重要性を再認識しました。


まとめ

今回のチャレンジを通じて、Amazon Q Developer CLIがどれだけ強力な開発パートナーになり得るかを実感しました。
特に「アイデアはあるけれど、コードにするのが大変」と感じている方にとって、創造性を解放してくれる最高のツールだと思います。

ぜひ皆さんも、#AmazonQCLI を使って自分だけのオリジナルゲームやアプリケーション作りに挑戦してみてください!

Discussion