LLMにワンボタンアクションミニゲームを作らせる試みをずーっとに行っているが、やっぱり今のLLMが新しいゲームを一から最後まで一撃で作るのは無理だわ。
今までで一番うまくいったのは、Claudeにゲームを作らせて、それをAnalytics tool (REPL)でシミュレートさせて評価、選別するアプローチだったけど、
ゲームが凡庸になった。評価を挟む前は、ゲームとしては成り立ってないがプレイヤーの動きは斬新で面白い、というようなものが出来上がることがあった。こういったものを評価で弾いてしまっているので、その分無難なゲームが作られるようになった
この問題がやはり乗り越えられない。
なので、ゲームの斬新さに力点を置くのであれば、シミュレートで弾いたりせずゲームとしてのバランス無視で自由に作ってもらう方が良い。その方針でClaude Code向けの仕組みを作ってみた。
斬新なゲームをLLMに創作させるため、プロンプト(CLAUDE.md)で以下の工夫をした。
- 前提知識の構造化と強制的な読み込み
PREREQUISITE FILES - READ BEFORE EXECUTION
ゲームデザインの原則、ゲームライブラリのAPIリファレンス、既存ゲームの実装例を必ず読ませ、VERIFICATION CHECKPOINTで理解度を確認、創造的な作業の前に必要な知識基盤を確立する。
- 多様性を強制する
Each idea MUST use a different control mechanic Each idea MUST use a different environment type Draw inspiration from natural phenomena for at least 3 ideas Implement creative constraints for at least 2 ideas
8つのゲームを同時に制作させ、その全てで異なる操作メカニクスと環境タイプを要求し、安易な繰り返しを防ぐ。また自然現象からのインスピレーションや創造的制約(重力の除去、時間の流れの変更等)を取り入れるように指示する。
- 既存パターンからの脱却を促す
Consciously avoid replicating patterns from sample-games Prioritize peaceful/constructive themes over combat/conflict Challenge your first instinct - if an idea feels familiar, push further What if gravity changed? What if time flowed differently?
サンプルゲームの模倣を明示的に禁止する。戦闘をテーマとしたありがちなゲームを避ける。最初の直感や物理法則を疑え、という指示を与える。
- 複雑性を明示的に排除する
AVOID COMPLEX MECHANICS: - power-ups - rhythm - maze - energy, fuel or time limit
シンプルさを保つことでゲームの本質的な面白さに集中しつつ、ワンボタンゲームの制約を活かす。
- メタ認知的な振り返りを行う
META-COGNITIVE VERIFICATION: - Consciously questioned and avoided first instincts - Actively sought non-obvious interpretations - Deliberately explored underrepresented mechanical territories
LLM自身が思考プロセスを振り返り、無意識のパターンに気づくようにする。
これらの工夫がどれだけ効いているかは分からない。逆にこのような工夫が、LLMの発想の幅を狭めている可能性もある。だが、このプロンプトで作られたものの中に興味深いものが散見されるのは確かだ。その代償として打率は落ちて、面白い動作をするものは8個中1個、みたいになるが、それでも新しいゲームのタネとなるネタが得られるのは貴重だ。
例えば、以下は今回のプロンプトで得られたゲームを発展させた、ジェット気流をサーフィンして渦を避けるゲーム。
「ジェット気流をサーフィンして渦を避ける」という発想は、上記プロンプトを通じてLLMが思いつき、LLMがそのプロトタイプを実装した。こういったゲームが出力されることはゲームの発想に役立つし、プロトタイプはVibe Codingのベースとして活用できる。
ただ、このゲームの元となった、LLMから出てきた最初のバージョンは
- 真ん中の気流が無くて上下の気流の間でプレイヤーが移動するだけ
- 気流の上を赤い四角が移動している
- プレイヤーが赤い四角に触れても何も起きない
というもの。ゲームにはなってない。というか今のプロンプトは「ゲーム」ではなく、ゲームオーバーが存在しない「トイ」を出力するよう指示している。
Transform completed games into true "toy" experiences Remove Game Over Mechanics
つまりLLMはゲームの発想の元を作れ、ゲームにはオレがする、という役割分担だ。上記最初のバージョンに対して、
- 真ん中に逆方向の気流を追加する
- 渦に当たると弾かれ、画面外に出るとゲームオーバー
- プレイヤーの後に波が発生し、それで渦を破壊できる
- 渦を連続して破壊すると高得点
のようなゲームとして仕立てる最終工程は今のLLMには無理だろう、とあきらめているのである。
実際このようなゲームフィールを構築する作業はLLMは苦手である。これを可能にするには、
- プレイヤー感情なども模倣できる高度なゲームシミュレータ
- 既存ゲームをシミュレータを通じてプレイすることによる理想的なプレイフィールの経験
- 蓄積された経験に基づく新たなゲームデザインの作成
- 新たなゲームをプレイしその問題点を把握
- 問題点を解決するメカニズムの提案
などなどが必要になり、これは現状のAI技術では難しいところも多いだろう。
なので当面はLLMに自由な発想でトイを作ってもらい、それをVibe Codingで人間がゲームにする、このプロセスで進めてみたい。
その際に重要なのは「LLMに自由な発想」をさせる方法だ。ただ自由に考えてと指示すると凡庸な発想になり、発想法を細かに与えるとそれが発想を制約する枠組みとなる。LLMが創造力を発揮するための最適な構造と自由のバランス、これの見極めは引き続き重要である。