はじめに
いざCodexをインストールしてなにをしようかと思っていたところ、Game Studioというプラグインが公式から用意されていることを知った。
ゲームを作るのは分かりやすいので早速使ってみることにした。
Game Studioとは
Webで動くゲームを作るためのOpen AI公式のプラグイン。
実際に使ってみた人のブログを見るとちゃんとしっかりとしたゲームが作れるらしい。
note.com
note.com
面白そうなので早速使ってみる。
インストール
Codex CLIの場合は以下のコマンドでインストールできる。
codex plugin add game-studio@openai-curated
デスクトップアプリの場合はプラグインを検索してインストールできる。

何か作ってみる
実際に使っている人の例を見るとやはり曖昧な指示ではなく、ゲームデザインも含め明確にドキュメント化しないとクオリティの高いものにはならないらしい。
さすがに「なんか面白いゲーム作って」と投げるわけにもいかないが、特にこれといったものが思いついてない状態でガチガチにドキュメント化するのもやりにくいな。。。
まあとりあえず投げてみた。
なんとなく3Dゲームかな、だとしたら一人称視点がいいなと思い一旦聞く。

うおおおお、作れるらしい。
というわけでちょっと深堀りしてまた雑に投げた。

そこから何度かやりとりをして最初の要件を出してもらう。
最初の要件定義
# 一人称視点3D避けゲーム 実装要件 以下の要件で、ブラウザで動作する一人称視点の3D避けゲームを実装してください。 ## 技術構成 - TypeScript - Vite - Three.js - 必要なら軽量な物理・衝突判定ライブラリを使用してよい - UIはHTML/CSSのDOMオーバーレイで実装 - PCブラウザを対象とする - 不要に複雑なフレームワークは導入しない - ゲーム状態とThree.jsの描画処理を分離する ## ゲーム概要 プレイヤーが一人称視点でフィールド内を移動し、四方八方から転がってくる木の丸太をジャンプで越えて得点する、短時間で遊べるエンドレス避けゲームを作る。 ## 基本操作 - `WASD`:前後左右への移動 - マウス:視点操作 - `Space`:ジャンプ - `Esc`:ポーズ/マウスロック解除 - 画面クリックでPointer Lockを開始 - ゲームオーバー画面でボタンまたはキー入力によりリスタート ## プレイヤー - 一人称カメラを使用する - 地面上を自由に移動できる - 重力とジャンプを実装する - 空中で連続ジャンプできないようにする - フィールド外へ出られないようにする - 移動速度、ジャンプ力、重力は定数として調整可能にする - フレームレートに依存しない移動・物理計算にする ## フィールド - 正方形または円形の平坦な競技場 - 周囲に壁、柵、森などを配置し、プレイ範囲を視覚的に分かりやすくする - 丸太はフィールド外周付近から中央方向へ出現する - 初期版はプリミティブ形状だけで構わない - 地面、空、照明、影を設定し、状況を見やすくする ## 丸太 - 木の丸太は円柱形の3Dオブジェクトとして表現する - 木らしい色と簡単な質感を付ける - 横向きの状態で地面を回転しながら移動させる - 外周のランダムな方向から出現し、フィールドを横切る - 見た目の回転速度を移動速度と自然に一致させる - プレイヤーまたは他の丸太の真上に突然出現させない - プレイヤーが対処できる最低予告時間を確保する - フィールドを通過した丸太は確実に破棄する - 長時間プレイしてもオブジェクトやメモリが増え続けない設計にする ## 衝突とゲームオーバー - 丸太とプレイヤーの当たり判定を実装する - 丸太に接触したらゲームオーバー - 明らかにジャンプで越えている場合は接触扱いにしない - 見た目と当たり判定が大きくずれないようにする - ゲームオーバー時はゲーム進行を停止する - 最終スコアとハイスコアを表示する ## 得点判定 単に丸太を避けただけでは得点にしない。以下の条件を満たした場合に「ジャンプで越えた」と判定して加点する。 - プレイヤーが空中にいる - 丸太がプレイヤーの足元付近を通過する - プレイヤーと丸太が衝突していない - 同じ丸太から得点できるのは一度だけ 基本点は1本につき100点とする。判定が成功した瞬間に、短い効果音、画面表示、軽い視覚エフェクトでフィードバックする。 ## 難易度 ゲーム開始直後は簡単にし、経過時間またはスコアに応じて段階的に難しくする。 調整対象: - 丸太の移動速度 - 出現間隔 - 同時に存在できる丸太数 - 丸太の大きさ - 出現方向の多様性 理不尽な配置を避けること。回避不可能な同時出現や、着地地点を完全に塞ぐ生成はできるだけ防ぐ。 ## UI プレイ画面を邪魔しない最小限のHUDにする。 表示項目: - 現在スコア - ハイスコア - 中央の小さな照準 - ゲーム開始案内 - ポーズ表示 - ゲームオーバー画面 - リスタート操作 ハイスコアは`localStorage`へ保存する。 ## 演出と音 - 丸太の接近が分かる転がる音 - ジャンプ音 - 着地音 - 得点音 - 衝突音 - 得点時の短いポップアップ - 衝突時の軽いカメラシェイク - 音声ファイルがない場合はWeb Audio APIによる簡単な効果音でもよい - 音量を抑え、ユーザー操作後に音声を開始する ## ゲーム状態 少なくとも以下の状態を明示的に管理する。 - `ready` - `playing` - `paused` - `gameOver` 状態遷移を一か所で管理し、描画コードの中にゲームルールを散在させない。 ## コード構成 役割ごとにファイルを分割する。 例: - ゲーム初期化 - レンダリング - プレイヤー制御 - 入力管理 - 丸太の生成と更新 - 衝突・得点判定 - 難易度管理 - UI管理 - 音声管理 - ゲーム状態管理 - 設定定数 すべてを単一ファイルへ詰め込まないこと。 ## デバッグ機能 開発時に切り替えられる簡単なデバッグ表示を用意する。 - FPS - プレイヤー座標 - 現在の丸太数 - 難易度レベル - 当たり判定の可視化 - 無敵モード 本番表示では無効にする。 ## 完了条件 以下を実際に確認すること。 1. 依存関係をインストールできる 2. 開発サーバーが起動する 3. ブラウザでゲームを開始できる 4. WASD移動とマウス視点操作が機能する 5. ジャンプと着地が安定している 6. 丸太が複数方向から転がってくる 7. 衝突するとゲームオーバーになる 8. ジャンプで丸太を越えると一度だけ得点する 9. 時間経過で難易度が上昇する 10. リスタート後に状態が正しく初期化される 11. ハイスコアが保存される 12. コンソールに重大なエラーがない 13. 長時間動かしても丸太が無限に蓄積しない まず既存ディレクトリの内容を確認し、既存ファイルを壊さない形で実装してください。 実装後はビルド、型チェック、可能な範囲のブラウザ動作確認を行い、修正したファイル、実行方法、確認結果、残っている課題を簡潔に報告してください。
それをもとに実装してもらったところ、実際にゲームプレイできるものができた。
これくらいのカジュアルなものだと約30分ほどで最初の形ができた。
その後何度か修正をして最終的に以下のようなものができた。

以下のページでプレイできる。
おわりに
ほんの数時間で頭の中に浮かんだものが形になり、しかもちゃんと遊べるものが出力されて驚愕している。
しかもこれはプロンプトをそこまで凝らずに出力したものであり、細部を詰めていけばもっとクオリティが上がっていくはずなので、テクノロジーの進化がすごすぎる。
これを実務にどう生かすかとかプロンプトの作り方どうするかとか色々あるが、そんなことより実装のハードルが極端に下がったことを利用しておもちゃ感覚で好きに生成させて遊ぶのがいいんじゃないかなと思いました。

















































