🐷

Amazon Q CLIでワイヤーアクション系タイミングゲームを作る

に公開

きっかけ

Amazonイベント系のTシャツに憧れがあり、手軽に手に入れられるイベントが開催されていたので参加してみる
https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/

Amazon Q CLIとは?

ターミナル環境内で自然言語の会話、質問、応答をチャットするためのコマンドラインインターフェイス。

あまりゲームを簡単に作れるイメージは湧かない

セットアップ(Mac)

https://community.aws/content/2ulGwNwLFj5grS8hXJBMCN78Qwl/the-essential-guide-to-installing-amazon-q-developer-cli-on-linux?trk=6f6cb092-f1ba-456b-8644-73ed7ccbd567&sc_channel=el_

MacOS用インストール方法に従ってインストール

pygameのインストール

  809  python3 -m pip install -U pygame --user
  810  python3 -m venv path/to/venv
  811  source path/to/venv/bin/activate
  812  python3 -m pip install -U pygame --user\n
  813  pip install --upgrade pip
  816  python3 -m pip install -U pygame

どんなゲームを作るか考える

ワイヤーアクション系のゲームが好みなので、SppedRunnersの様に適切なタイミングでワイヤーを抜き差しすることで最大速度を出す快感に特化したスコアアタックゲームを作る。
https://store.steampowered.com/app/207140/SpeedRunners/?l=japanese

プロンプト定義

とりあえず、どんなもんか分からないので殴り書きでお願いしてみます

Pygameを使って飛距離を競うワイヤーアクションのゲームを作ってください。プレイヤーは高台からジャンプしてスタートします。プレイヤーの操作はワイヤーを伸ばすこと、離すことのみで、全てスペースキーで完結させてください。ワイヤーをひっかけるピンは3段飛びの要領で、3つあります。ワイヤーを伸ばした時点でのプレイヤーとピンの距離は一定です(ワイヤーは撓んだりしません)。ワイヤーを接続したとの挙動は振り子を想定してください。ワイヤーを離すと、その時点で持っている速度と角度に則ってプレイヤーは飛びます。最終的に地面に着地した時点での距離をスコアとします。リトライ可能にし、ハイスコアを記録できる様にしてください。

回答一発目


ほんとにゲームが生成されてる上に、実行コマンドまで教えてくれてます。すごい。

ですが不具合がいくつかありました

  • スペースキーを押してもワイヤーが出ない
  • 日本語が文字化けしている

加えて要望もお願いしていきます

  • ピン同士の間隔を2倍にして欲しい
  • 重力を今の2/3にしてほしい

プロンプトは以下のようにかきました。

2点不具合の修正をお願いします。1. スペースキーを押してもワイヤーが出ない。2. 日本語が文字化けしている。加えて、以下の修正をお願いします。3. ピン同士の間隔を2倍にして欲しい。4. 重力を今の2/3にしてほしい。

回答2発目


要望通りピンの間隔が増えています。ただしワイヤーが出ない不具合は残ったままの上、プレイヤーが着地するとx軸がズレるバグも発生してみます。シンプルに起きていることを伝えてみました。

修正ありがとうございます。スタート地点からスペースキーを押すと「Wire connection attempt: Failed」とコンソールに表示され、ワイヤーを出すことができません。また、プレイヤーが着地した(ゲームオーバーになった)際、x軸が左に100ずれている様に見えます(着地位置が0だったら100にずれてしまう。)修正をお願いします。

回答3発目

プロンプト上では1回目は強制的にピンに接続すると言っていましたが、実際にはまれに接続できるもののタイミングがシビアになっていました。また、ピンを刺した後の挙動も怪しく上向きに進んでしまったりしていました。修正を依頼します。

スタート地点からピンを接続するタイミングが死ぬほどシビアです。また、ピンを刺した後プレイヤーが上向きに飛んで行ったり挙動が不安定です。ピンを刺した時点で上向きの慣性は0にしてもらえますか?

回答4回目

今度は最初からピンとワイヤーが接続されている状態で開始する様になりましたwしかもスペースを押すとピンが外れて2度とピンが伸ばせなくなります。

流石に、ただ「修正してくださいだけ」では限界を感じたので改善案を出してみます。

ワイヤーの接続で問題があるので、接続可能なロジックを以下の様にしてもらえますか?1. スペースを押したら1つ前のピンに必ず接続される。2. 一度接続したピンには2回以上接続できない。3. 自分より後ろにあるピンには接続されない。

回答5回目

ピンはちゃんと刺さる様になりましたが、ピンを刺すと上向きにぶっ飛んでいきますw改善してもらいます。

https://youtu.be/HY9jrgU2oDY

ピンの問題は解決しましたが、ピンを刺した時プレイヤーが上向きに飛んでしまいます。落下している状態でピンを刺したらきちんと下向きに落ちる様に改善できますか?

回答6回目

全く改善しないのでロジックを作り直す様に指示します。

すみません、プレイヤーの挙動が怪しいので、ピンの選定ロジックのみ踏襲して全てのロジックを作り直してもらえますか?

回答7回目

かなり改善しました!挙動はバッチリ。作り直しは有効みたいです(慣性の指示をミスってた気がする)残るは、スクロールの問題です。

ありがとうございます。スクロール関連の問題を修正して欲しいです。まず、横軸についてはプレイヤーに完全に追従する様にしてください。(常に画面の左1/3にプレイヤーがいる状態)。そして、スクロールした際にワイヤーの描画がズレるので、修正してください。

回答8回目

カメラの問題は完璧に解消したが、再びプレイヤーの挙動が怪しくなってしまいました。カメラをそのままにロジックを作り直してもらいましょう。

ありがとうございます。カメラの追従はいい感じですが、またプレイヤーの挙動が怪し
くなってしまいました。物理計算のロジックを組み直してもらえますか?

回答9回目

プレイヤーの挙動が気が狂ってるので、シンプルに作ってもらいます。

プレイヤーの挙動が安定しません。物理演算をシンプルにしたいです。1. ワイヤーに接続されていない状態では下向きに重力がかかっており、それ以外加速度は生じない。2.ワイヤーに接続された際、その時にプレイヤーが持っている下向きの速度のみを回転の速度として採用し、ピンを中心に回転する。回転速度は重力の影響を受けて加減速する。3. ワイヤーを離した時、その時点での縦軸、横軸の速度をもったままワイヤーから解放される。

限界を感じる

どう指示してもプレイヤーの挙動が全く安定しないので、一度アプローチを変えてみる。まず自由にワイヤーアクションのゲームを作らせて、挙動の土台を作ってから今回の三段跳びルールを適用する。

作り直し

超、シンプルにゲームを作ってもらう。

ワイヤーアクションのゲームをpygameでつくってください

いい感じの挙動でワイヤーアクションゲームができたのでそれをベースにこれまでの指示を投げてみる

完成品

完成!スピード感は全くないけど要件は満たしている。
満足なゲームかと言われるとまだ突き詰めたいレベル感w
物理演算周りが不安定すぎるので、AIに作ってもらうのは難しいジャンルな気がしました。
https://youtu.be/qJ7XebFVxPc

感想

  • 良いと思った点
    • 修正の内容、コードを色分けして出してくれるのがめちゃくちゃみやすい
    • pygameがインストールされているかインタラクティブにコマンドを叩いて確認してくれる
  • 難しいと思った点
    • ゲームは不具合を文字で伝えづらい(どんな挙動かなど)動画で不具合起票したくなった
    • 物理演算っぽい部分はまだまだ弱そう
  • 総括
    • コード書いてください!もいいけど環境構築するときにめっちゃ便利そう。コマンドの例を出してくれて、実行するか選べる
    • Vibeコーディングゴルフとかやったら面白そう、何手で仕様通りのソフトを作れるかみたいなw

Discussion