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