[AWS] Amazon Q CLIでゲーム作成 - サメジャンプゲーム
はじめに
このブログポストは下記の企画向けの内容になります。
ちょっと前にサメまつりネタがTLに流れてきて、サメに頭が支配されたのでサメのゲームというテーマにしました。
今回のソースコードは以下のGitHubリポジトリで公開してます。私自身は、画像ファイルを差し替えただけで他のコードやアセット(音楽含む)は全く触っていません。なお、プラットフォームとしてはpygameを利用しています。
なお、最近Claude Sonnet 4が最近サポートされたので、そちらを今回の開発では利用しています。
> /model
✔ Select a model for this chat session · claude-4-sonnet
Using claude-4-sonnet
出来上がったゲーム (サメジャンプゲーム)
サメジャンプゲームです。サメがジャンプして障害物を飛び越えて進むゲームです。サメや障害物の画像は別口で生成したものですが、それ以外は全てAmazon Q CLIで作成しています。
スペースキーを押している間、パワーゲージが溜まります。スペースキーを離すとジャンプしますが、高さはゲージの溜まり具体によって変わります。魚を取るとポイント、それ以外の障害物に当たるとゲームオーバーです。ステージ制になっていて徐々に難易度が上がっていきます。
生成AI/Amazon Q CLIでアプリを作るということで、どうやって誘導しようかとかプロセスを考えねば、と思ってたものの、実際に聞かれることに答えていくだけで大体ゲームができあがっていて、逆に誘導された感じで。。。
作りたいものがぼんやりしている時でも、アイディア出しから、詳細を詰めていくところを提案してくれたりして、どんどん話が進んでいきます。いくつか会話のやりとりを抜粋します。
実際のやりとり抜粋
ここからAmazon Qと会話をしながらやっていきます。やりとりを抜粋して記載します。
> サメを題材にしたゲームを作りたいと思っています。アイディア出しに付き合ってくれますか?
もちろん、サメを題材にしたゲームのアイディア出しをお手伝いします!いくつかの方向性で考えてみましょう。
## ゲームジャンル別のアイディア
アクション系
• サメになって海中を泳ぎ回り、魚や人間を捕食するサバイバルゲーム
• サメから逃げるダイバーの視点でのホラーアクション
• サメ vs 潜水艦のバトルゲーム
シミュレーション系
• サメの生態系シミュレーター(成長、繁殖、縄張り争い)
• 水族館でサメを飼育・展示するマネジメントゲーム
• 海洋生物学者としてサメを研究するゲーム
パズル・カジュアル系
• サメが迷路のような海中を泳いで餌を集めるパズル
• サメの群れを誘導して目標地点に導くパズル
• タイミングよくサメをジャンプさせる簡単操作ゲーム
RPG・アドベンチャー系
• サメが主人公の海中冒険RPG
• 人間とサメが共存する世界での物語
どのようなジャンルや雰囲気のゲームをお考えでしょうか?また、どのプラットフォーム(PC、モバイル、ブラウザなど)で作成予定ですか?
アイディア出しだけでなく、次に何を考えるべきか質問をしてくれます。私が、Amazon Q CLIに対して、どういう流れで指示していくかがキーかなと思っていたので、ここで出鼻を挫かれます。質問に回答していくだけでどんどん進んでしまう。
どのような操作方法を考えていますか?(マウスクリック、キーボード、長押しでパワー調整など)また、ゲームの難易度やステージ制にするかも教えてください!
> キーボードによる操作です。ゲームはステージ制で、難易度は簡単なものを想定しています。
キーボード操作でステージ制の簡単なサメジャンプゲーム、いいですね!具体的な設計を考えてみましょう。
## 操作方法の提案
シンプルなキー操作
• **スペースキー**: ジャンプ(長押しでパワー調整)
• **左右矢印キー**: 空中での方向調整
• **上下矢印キー**: 着水角度の微調整(オプション)
## ステージ設計
-- 中略 --
どのようなビジュアルスタイルをお考えですか?(カートゥーン調、リアル調など)また、最初に作ってみたい基本機能はありますか?
また、質問してくれる。私がコントロールされている。こんなやりとりをもう一度行ったらもうゲームを実行するところまで持って行ってくれました。
それでは、仮想環境でゲームを実行してみましょう:
-- 中略 --
● Completed in 58.666s
完璧です!ゲームが正常に起動しました。
これで動いたのがこれ。
サメ(?)、どっか行った。
完璧ではない。とはいえ、なんとなくサメっぽいものを基本図形で作り、ジャンプもちゃんとするし、波っぽい動きもするし。最初でここまで行けるのはすごいです。自分でやったらここまでいくまでにかなりの確率で飽きてますね。
ここからはちゃんと考えながらいけないと思い、プランを立てて記録しながらやることを提案しました。
> まずはここまでで決めたどんなゲームを作りたいかをプランとして記録しておきたいです。また、今後、ゲームのプランを変える場合には、コードを変える前にまずはそちらのプランを変えるようにしたいです。あなたにとって、このように進めやすいパス、フォーマットでこのプランを記録したファイルを作成してください。
その上で、下記の変更を依頼。
> 画面上でサメが左右に動くのではなく、サメはその場にとどまり、障害物やパワーアップアイテムが右から来てそれを避ける形に変更したいです。お願いできますか?
素晴らしいアイディアですね!サメが固定位置にいて、障害物やアイテムが流れてくるスタイルに変更しましょ
う。まずはgame_plan.mdを更新してから実装します。
すると、忘れずにgame_plan.mdの更新をやってくれます。偉い。こういうルールを守らない人現実にいっぱいいる。(私)
> どうやら画面上の文字が文字化けしているようです。対処してくれますか?
文字化けの問題ですね。日本語フォントが正しく表示されていない可能性があります。対処しましょう!
...
英語版のテキストも用意して、フォントが見つからない場合に備えましょう:
エラーケースに備えている。えらい。こういうことをやらない人いっぱい(略)
で、そこから2、30回くらいやりとりを繰り返して、出来上がったのが最初のこのGIFのゲームになります。
手で画像差し替えたりもしたけど、それを既存の図形描画から変更して表示したり、サイズ調整したり、透明箇所を判断して位置を調整してくれたり、バックグラウンドの音楽だけでなく、ジャンプ音や着水音などを作ってくれたり、言ったことはなんでもやってくれる。すごい。
さらに、GitHub公開においても、何が必要か聞いたらちゃんと答えてくれます。
> GitHub公開に向けて、以下の作業が推奨されます:
1. LICENSEファイルの作成 - MITライセンスファイル
2. 英語版README - 国際的なユーザー向け
3. スクリーンショット - ゲームプレイ画像
4. requirements.txt - 依存関係の明記
5. .gitignore - 既に存在しますが内容確認
こういう世の中ですでに多数がやっている一般的な手法や気をつけるべきことはとても信頼感ありますね。もちろん気になったところがあれば調べますが。3のスクリーンショットの取得も、自動でやってくれました。
> 3
スクリーンショットの作成を進めましょう!ゲームプレイ画像があると、GitHubでプロジェクトの魅力が伝わりやすくなります。
まず、ゲームを実行してスクリーンショットを撮影するためのスクリプトを作成しましょう。pygameには画面をキャプチャする機能があります。
まとめ
子供の頃から、ゲーム作ってみたいなとか言ってて、着手は何回かするけど、画像や音楽がないとか色々形にならない言い訳をつけてきていました。この生成AIやらの流れで、もはやこの言い逃れはできんな、という気がしました。やれ。
Discussion