👾

Amazon Q CLI + Pygameで早押しゲームを作ってみた

に公開

はじめに

Amazon Q CLIでゲームを作るとTシャツがもらえるというキャンペーンを知り、せっかくの機会なので作ってみることにしました。ゲーム開発は初めてです。ここでは、作成したゲームと作成過程を紹介します。
https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/

作成したゲーム - 早押しゲーム-

作成した早押しゲームは以下のgifです。2人対戦用で、画面に「!」マークが表示されたら素早くキーを押し、先に押した方が勝ちです。

基本仕様

• 2人対戦のリアクションゲーム
• プレイヤー1はAキー、プレイヤー2はLキーを使用
• 各プレイヤーは初期HP100を持つ
• HPが0になるとゲームオーバー

ゲームの流れ

  1. ランダムな待機時間(2〜5秒)後にマークが表示される
  2. マークの種類:
    • 「!」マーク:素早く押した方が勝ち
    • 「?」マーク:押すと負け

ダメージシステム

• 早押し失敗:20ダメージ
• はてなマーク押下:30ダメージ
• びっくりマーク:基本20ダメージ+反応時間差×100の追加ダメージ
• 勝者は相手が受けるダメージの5分の1を回復

準備

Amazon Q Developer for CLIをインストールします。私はMacOSを使用しているため、homebrewからインストールしました。

% brew install amazon-q

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html#command-line-installing-macos

Pygameをインストールします。

% python3 -m pip install -U pygame --user

Amazon Qにログインします。今回は無料で進めたいので、[Use for Free with Builder ID]を選択します。

% q login
? Select login method ›
❯ Use for Free with Builder ID
  Use with Pro license

この後、AWS Builderのサインイン画面に遷移するのでサインインします。次に[Amazon Q Developer for command line がデータにアクセスすることを許可しますか?]と聞かれるため、アクセスを許可します。
コンソールに以下が表示されればログイン完了です。

Device authorized
Logged in successfully

q chat でAmaznon Qとのチャットセッションを開始します。

% q chat

作成過程

初回作成

作りたいゲームのイメージを伝えます。

生成したコードと作成したファイルの概要やゲームの遊び方が表示されました。
Amazon Qが指示にはなかったキーの定義やびっくりマーク時間表示までの時間設定、びっくりマークの表示より先に押した場合は、負けなどの処理を自動で追加してくれました。

以下はこの時点での画面です。シンプルですが、イメージしていた方法で遊べました。
ゲーム開始時
キー入力後

事前に考えていたイメージを反映

以下を入力し修正してもらいました。(画面キャプチャ撮り忘れました..)

以下の修正を加えてください。

  • 背景をウエスタン風にする
  • キャラはドット絵のガンマン風にする
  • ゲームの開始画面を作成する
  • 続けて対戦する場合は勝敗をカウントする
  • びっくりマークが出たときの二人のキー入力までの時間の差に応じて負けた方のHPを減らす。0になったら負け

ゲームの動作は想定どおりのものができたのですが、ドット絵が小さかったり、文字が図と重なっていたり、文字が背景と同系色になり可読性が低いといった見た目で気になる点がありました。このあたりは人の目で判断してAmazon Qに修正を依頼する必要がありそうです。ただ、具体的な指示が難しく(大きくするっといってもどれくらいが良いか私がわかっておらず指示できない)、一旦、「キャラを大きくして」という曖昧な指示を送り、AmazonQから返ってきた「ピクセルサイズを4から6に拡大」という具体的な修正内容をもとに、次の指示を明確に出すようにして修正していきました。
余談:
見た目は最近観た某カードゲームアニメのウエスタン編が印象に残っていたため、ウエスタン風にしてもらいました。Amazon Qの配慮により、ゲームタイトルが「ウエスタン・デュエル」、びっくりマークとともに「DRAW!」が表示されるようになりました。笑いました。

処理内容の説明と提案を受けての反映

HPを減らす機能を追加してもらいましたが、どの程度減るのかはAmazon Qにおまかせしていました。
以下は処理を確認した時の回答です。コードを読まなくても知りたいことを例を踏まえて教えてくれるの楽でした。

今の機能の説明によると0.1秒差未満は追加ダメージが入らないようです。対戦すると0.01秒差で勝利することもあるため、その分も追加ダメージで計算して欲しいということを伝えるとゲームバランスを考えた上で新しいダメージ計算式を提案してくれました。

備考

なお、Qとの会話履歴は/saveでjsonファイルで保存できます。

> /save contents.json

✔ Exported conversation state to contents.json

保存した会話履歴は/loadで読み込めます。

> /load contents.json

✔ Imported conversation state from contents.json

まとめ

Amazon Q CLI と Pygameで早押しゲームを作成しました。大まかなイメージのみを伝えただけでも、必要な処理を補ってコードを生成するAmazon Qの技術に感動しました。Satisfactionです。
また「キャラを大きくして」という曖昧な指示でもAmazon Qは「ピクセルサイズを4から6に拡大」と具体的な修正内容を示した上で直してくれたので、その結果と回答内容を元に次の指示を明確に出すことができ、イメージ通りの大きさになりました。曖昧な表現でもいいのでまずは指示を出す、Amazon Qから返ってきた内容を使って微修正の指示を出すと効率が良いと感じました。

Discussion