はじめに
8月3日(火)の AWS JumpStart Next #1 に参加してきました。去年の8月あたりに新人研修もかねて JumpStart に参加していたご縁的なやつです。 (Gemini のハンズオンで Google のオフィスに行けて、今回で AWS に行けたので残すは Meta だけですね?)
このイベントで本来はAmazon Q CLI というAIコーディングエージェントを用いたハンズオンができるはずでしたが、いろいろあってできなくなってしまい…。ただ、そこで"Amazon Q CLI でゲームを作ろう Tシャツキャンペーン"というのがあることを知り、せっかくなので作ってみました!!!
Amazon Q CLI でゲームを作ろう Tシャツキャンペーン
前提
Amazon Q CLI でゲームを作ろう Tシャツキャンペーン
このキャンペーンは何なの?
「Amazon Q CLI でゲームを作ろう」キャンペーンは、AIコーディングアシスタントを実際に体験し、Amazon Q CLI を使って自分のペースで新しいゲームを作り出すための創造性と想像力を発揮する機会です。
何をしたらTシャツがもらえる?
1: Amazon Q CLI を使ってゲームを作ろう
2: あなたが何をどのように作ったかについてブログを書くか、あなたの体験についての動画を録画して、ソーシャルメディアに投稿しよう
3: Amazon Q ブランドの T シャツをゲットしよう
作ったもの
ボールバトルアリーナ らしいです(命名も任せた)(プレイリンク)
Readme の内容
# ボールバトルアリーナ概要
ボールバトルアリーナは、プレイヤーとCPUが対戦するシンプルで楽しいブラウザゲームです。中央の穴にボールを入れるか、相手のフィールドにボールを送り込むことで勝利を目指します。
遊び方
- プレイヤーは左側のフィールドからスタートします
- ボールをクリック&ドラッグして、発射方向と強さを決めます
- マウスを離すとボールが発射されます
- 中央の穴にボールを入れるか、相手のフィールドにボールを送り込むことが目標です
- すべてのボールを穴に入れるか相手フィールドに送り込んだ方が勝利です
特徴
- 物理エンジンによるリアルな動きと衝突
- 中央をピークとする擬似傾斜効果
- 戦略的なCPU AI
- モダンで美しいビジュアルデザイン
- 直感的な操作性
技術的詳細
- HTML5 Canvas を使用したグラフィック描画
- JavaScript による物理演算
- カスタム衝突検出システム
- 視覚効果(グロー、トレイル、グラデーション)
開発者向け情報
このゲームは以下のファイル構成になっています:
index.html
- メインのHTMLファイルcss/style.css
- スタイルシートjs/game.js
- ゲームのメインロジックjs/physics.js
- 物理エンジン
Amazon Q CLI を使ってみて
35回の会話?35個のプロンプト?で完成しました。(もうちょっと早く終わると思った…)
デフォルトだと Sonnet 3.7 を使うらしい?そこらへんがわかりませんでしたが、まあまあいい感じに動いてくれました
最初の画面、かっこいい
これは最初のプロンプトの結果ですが、結構できていて驚いた
* **操作方法**: クリック&ドラッグで玉を発射(方向・強さを指定)
* **ステージ**: 長方形フィールド中央に縦向きの壁+中央に穴(穴径=玉径×2)
* **物理挙動**: 擬似傾斜で穴を外した玉は自陣側に戻る
* **勝利条件**: 自分の玉を4つすべて相手陣地に送り切る
* **CPU挙動**: 定期的に自陣の最前列の玉を穴に向けて発射し、プレイヤーの玉を衝突で戻そうとする
このようなゲームを作りたいです
あと、最初のほうは自分で git add . && git commit -m "num"
を実行してましたが、(これから最終的な作業が終わるごとにgit add .とgit commit -m "num" (今回のnumは11、次は12のようにインクリメントされます)してください
, (コミットメッセージは"num: やったこと"の形式で書いてください)
のように書いたら勝手にやってくれたのでめちゃ楽になった。issue作ってくれたり、PR作ってくれたりするようにもできただろうが、まあいいかになってしまった。
裏企画?Sonnet 4 で同じゲームを作ってもらおう
Sonnet 4 で最初のプロンプトを投げて作ってもらいました。
19回のやり取りで、よりいい感じに作ってくれましたね…(個人的にはこっちのゲームのほうが好きです)
(ただ、Amazon Q CLI でも Sonnet 4 を使えるようになったらしいので、あまり意味はないかも?)
(/model
でモデルを選択するらしいが、エラーが出てしまいました…)
GitHub MCP に脆弱性があった~みたいな話もあり、使っていないので git 管理がめんどくさかったですね
readme.md
(本当は19回だが、うち3回は何も変更点がなかったのでまあそんなもんか?)今までの開発プロセスを番号付きでまとめます:
玉入れ対戦ゲーム開発プロセス
1. 基本仕様の設定
- 操作方法: クリック&ドラッグで玉を発射(方向・強さを指定)
- ステージ: 長方形フィールド中央に縦向きの壁+中央に穴(穴径=玉径×2)
- 物理挙動: 擬似傾斜で穴を外した玉は自陣側に戻る
- 勝利条件: 自分の玉を4つすべて相手陣地に送り切る
- CPU挙動: 定期的に自陣の玉を穴に向けて発射し、プレイヤーの玉を衝突で戻そうとする
2. 初期配置の修正
- 玉の初期配置を縦に4つ並べる形に変更
3. 物理システムの改良
- 中央の壁を高く、両端を低くする山型の傾斜システム実装
- 玉が下や中央に集まる問題を解決
4. スコアリングシステムの修正
- 相手陣地に入った玉のスコア判定を即座に実行
- スコア判定のタイミング遅延問題を解決
5. 相手陣地玉の表示方法変更
- 相手陣地に入った玉を削除せず残す
- 操作不可だが衝突は可能にする
6. 傾斜システムの詳細調整
- 画面端(a,e)が最低、中央(c)が最高、中間点(b,d)が同じ高さの山型傾斜
- 上下方向は傾斜に無関係、X座標のみで重力を決定
7. Y方向重力の削除
- 左下・右下に玉が集まる問題を解決
- X方向の傾斜重力のみに変更
8. ミラー表示システムの実装
- 相手陣地の玉を自分陣地にミラー表示
- 点数が入るほど自分陣地に邪魔な玉が増える戦略的バランス
9. ミラー玉との衝突処理
- ミラー玉との衝突判定を実装
- アクティブ玉のみ弾かれ、ミラー玉は固定
10. ゲームリセット機能の完全実装
- 「もう一度プレイ」ボタンで確実に初期状態に戻る
- ゲームループの管理改善
11. 壁抜け防止システム
- 高速移動時の壁抜け問題を解決
- 連続衝突判定(Continuous Collision Detection)の実装
- 移動を細分化して確実な衝突判定
12. 速度制限システム
- 発射速度の上限を設定(表記・実際ともに最大20)
- パワー表示と実際の速度を統一
最終的な特徴
- 戦略性: ミラー玉システムによる邪魔要素
- 物理演算: X方向の傾斜重力による自然な玉の動き
- 確実性: 壁抜け完全防止、正確なスコアリング
- バランス: 点数を取るほど難易度が上がるゲーム設計
さいごに
Amazon Q CLI を使ってゲームを作ってみて、正直 CLI の良さがわからず…になってました。が、よくよく調べてみると git worktree なるものを使うとそれぞれの CLI でブランチを切って並列開発が出来るそうですね。今回は「一つのゲームを作る」という目的なので並列開発しづらいですが、複数作りたい機能があってそれが独立していれば Claude Desktop や GitHub Copilot などを使うよりも断然早く開発が出来そう!
今度はもうちょっと大きな、並列で開発できるものを作ってみたいですね!!!