😎
Amazon Q CLI で Python 製ミニゲームを作成してみた 🎮
はじめに
AWS 公式ブログで開催中の Amazon Q CLI ゲーム開発キャンペーン に参加し、
Python(Pygame)製のワンクリックゲーム「刺身たんぽぽ」を作成しました。
開発環境
項目 | 値 |
---|---|
Mac | MacBook Air (M1, 16 GB RAM) |
OS | macOS Sequoia 15.5 |
Amazon Q CLI | 1.12.1 |
セットアップは公式ドキュメント通りに実行し、詰まるポイントはありませんでした。
https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html
作成したゲーム「刺身たんぽぽ」
なぜこの題材?
- インターネットミーム由来で認知度が高い
https://dic.nicovideo.jp/a/刺身の上にタンポポのせる仕事- 初めてこのネットミームを知ったのはこりんさんの「VR刺身たんぽぽ」でした
https://vrsashimi.com/
- 初めてこのネットミームを知ったのはこりんさんの「VR刺身たんぽぽ」でした
-
クリックのみ で遊べ、実装がシンプル
- マウスイベント取得
- オブジェクト落下
- 当たり判定
- スコア計算
- 機能を段階的に拡張しやすい(レベル制・エフェクトなど)
Amazon Q CLI を活用したプロンプトテクニック
目的 | プロンプト例 | 備考 |
---|---|---|
アイデア出し | このゲームに対して改善案を列挙し、game_improvements.md に書いて |
/context add <ファイル名>でコンテキスト読み込み可能 |
開発ログ生成 | 今までの作業を dev-log.md に追記して |
日を跨いでも作業内容を思い出せる |
ブログ下書き | 選定理由・プロンプト例などを blog.md に箇条書きで書いて |
Zenn 記事のたたき台に使用 |
アイデア出しで作成されたドキュメントは以下になりました。(一部抜粋)
# 刺身たんぽぽゲーム改善案
## 概要
現在の刺身たんぽぽゲームをより楽しく、やりがいのあるゲームにするための改善提案です。
## 実装済み機能 ✅
### 基本ゲームシステム
- **ベルトコンベアシステム**: 刺身パックが右から左に流れる ✅
- **たんぽぽ投下システム**: クリックでたんぽぽを落下させる ✅
- **衝突判定**: たんぽぽと刺身パックの当たり判定 ✅
- **スコアシステム**: たんぽぽが乗った刺身パックが左端に到達するとポイント獲得 ✅
### 難易度調整システム(実装済み)
- **動的速度調整**: スコアが上がるにつれてベルトコンベアの速度が段階的に上昇 ✅
- **出現間隔の変化**: 刺身パックの出現間隔を短縮して難易度を上げる ✅
- **レベルシステム**: レベル表示とレベルアップ時の視覚・音響効果 ✅
- **レベルアップエフェクト**: 金色のテキストとキラキラエフェクト ✅
### UI表示(実装済み)
- **スコア表示**: 現在のスコア ✅
- **レベル表示**: 現在のレベル ✅
- **速度表示**: 現在のベルトコンベア速度 ✅
- **次レベル表示**: 次のレベルまでに必要なポイント ✅
- **操作説明**: 画面下部に操作方法を表示 ✅
- **たんぽぽ投下位置表示**: 投下位置を示すライン ✅
おもしろかったコード
改善案が書かれたgame_improvements.mdを/context addして、「難易度調整システムの実装」を指示しただけで以下のレベルアップエフェクトが実装されました。
# level_up.py (生成コードを抜粋)
def draw_level_up_effect(self, screen):
"""レベルアップエフェクトを描画"""
if self.level_up_effect:
# 背景を少し暗くする
overlay = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))
overlay.set_alpha(100)
overlay.fill(BLACK)
screen.blit(overlay, (0, 0))
# レベルアップテキスト
level_text = self.big_font.render(f"LEVEL {self.level}!", True, GOLD)
text_rect = level_text.get_rect(center=(SCREEN_WIDTH//2, SCREEN_HEIGHT//2))
screen.blit(level_text, text_rect)
# キラキラエフェクト(簡単な星形)
for i in range(10):
x = random.randint(50, SCREEN_WIDTH - 50)
y = random.randint(50, SCREEN_HEIGHT - 50)
size = random.randint(3, 8)
pygame.draw.circle(screen, GOLD, (x, y), size)
細かい指示を出さなくても “ゲームあるある” であるレベルアップエフェクトを理解していることに驚きました。
完成したアプリ
映像はこちらです。
Githubリポジトリは以下になります
出来れば GitHub Pages で体験可能にしたかったのですが、GitHub Actions の設定が間に合わず泣く泣く断念しました。
おわりに
Amazon Q CLI と Pygame を今回初めて本格的に使いましたが、プロンプトを書くだけで想定通り動作するゲームが完成しました。
要望として、Claude Code における CLAUDE.md のような「常に守るルール」ファイルを標準でサポートしてもらえると嬉しいです。
毎回プロンプトにルールを記述する手間が省けるうえ、ルール保持期間を気にせず済むためです。
Discussion