LLMを用いたガチャ指向ゲーム開発

自分の気に入るゲームが生成されるまでひたすらLLMを回す。これを仮にガチャ指向ゲーム開発と呼ぼう。

Claude 3.5 Sonnet のような高性能なLLMの登場で、LLMに簡単なゲームのアイデア作成からその実装までをさせることが可能になってきた。LLMから出てくるゲームの多くは、凡庸だったり、バランスが悪かったり、正しく実装できていなかったりする。でも、繰り返しLLMにゲームを生成させることで、面白い挙動をする、ゲーム一歩手前のコードを、稀に得ることができる。これを得るまでの行為がゲームガチャだ。

例えば、

上記のプロンプトに「fragile pillars」というテーマを与えると、以下のゲームを提案してくる。

Pillar Paraglider: Control a paraglider flying through a course of fragile pillars. The paraglider constantly descends. Press the button to ascend, but each press also sends a shockwave that can damage nearby pillars. Core mechanic: Balancing ascent with pillar preservation.


Pillar Paraglider: 壊れやすい柱のコースを飛行するパラグライダーを操縦します。パラグライダーは常に下降しています。ボタンを押すと上昇しますが、押すたびにショックウェーブが発生し、近くの柱にダメージを与える可能性があります。コアメカニズム:上昇と柱の保護のバランスを取ること。

このアイデアを詳細化し、実装させた結果、以下のゲームができた。これはClaudeの出力結果そのままである。

ボタンを押すと赤い自機が上昇し、同時に周囲に円状のショックウェーブを放つ。ショックウェーブは柱を破壊する���フラッピーバードの影響を受けすぎな感じはするが、挙動としてはなかなか面白いものが実装できている。

だが、このゲームには明らかにいくつかの問題がある。

  • 簡単すぎる。ボタンを連打していればショックウェーブで柱を無効化できる。自機が画面上端や下端に行っても何も起きないので、ほぼゲームオーバーにならない。
  • スコアリングシステムが安直である。単に進んだ距離がスコアになっているだけなので、リスキーな行動がスコアにつながったりしない。
  • 元々のコアメカニズムを実現していない。「上昇と柱の保護のバランスを取ること」とあるので、本来はショックウェーブで柱を壊さないようにするゲームにしたいのだろうが、そのように実装されていない。また、そのメカニズムを忠実に実装すると、当たり判定の大きい自機でプレイするようなストレスフルなゲームになる。

ガチャ指向ゲーム開発では、このように面白い挙動をする不完全なゲームを、どのようにしてゲームとしても面白いものに改良するか、このプロセスが重要となる。

今回のゲームでは、以下のように変更した。

  • 全方向に出る円状のショックウェーブは強すぎるので、自機に方向を付け、自機の前方向の限られた角度にのみショックウェーブが出るようにする。また、ショックウェーブは柱全体を破壊するのではなく、当たった部分のみを破壊する。また、自機が画面上端や下端に接触したらゲームオーバーとする。
  • 破壊した部分ごとにスコアを与える。また連続して破壊することで、スコアが増加するようにし、柱に向かって進むリスキーな行動で大きなスコアが得られるようにする。
  • コアメカニズムは無視する。「壊さないように」よりも「壊しまくる」ゲームの方が、一般的には楽しい。

その結果、ゲームは以下のようになった。

https://abagames.github.io/claude-one-button-game-creation/wavybird/screenshot.gif

柱にショックウェーブで穴を開けて進むゲームになった。若干難しすぎる感じはするが、最初のバージョンよりは、適切なリスクとリワードのバランスが実現できており、ゲームとしての完成度が上がっているだろう。

改良版とオリジナルのコード上の差異は以下の通りである。

こう見るとオリジナルのコードは跡形もなくなっているように見えるが、実際はオリジナルの枠組みを参考にして修正できるので、0から作るよりはだいぶ楽である。

音やタイトルを付けた完成版は以下になった。

これが現時点での、LLMを用いたガチャ指向ゲーム開発の実態である。果たしてこれが、人が普通にアイデアを考えて、それを実装するのと比べて楽か、と言われると、あまり楽では無い。ただ、LLMが提案してくるゲームを選別し、それをいかにして面白いゲームにするのか、というコンピュータからのお題に立ち向かうような開発プロセスは、従来の開発プロセスとは違った面白さがある。また、ゲーム開発と並行して、生成のためのプロンプト開発・改良を行う必要もあり、そこも合わせて楽しむことが、ガチャ指向ゲーム開発においては大切である。

将来的には何も考えずに「面白いゲームを作って」とLLMに言えば、いい感じのゲームが実装されて返ってくるようになるかもしれない。現時点だと、面白い挙動をするゲームを得るには数十回のガチャが必要とされるのが当たり前で、打率はかなり低いと言わざるを得ない。だが、以前のLLMではそもそも挙動として面白いものを返ってくることは皆無で、どこかで見たような凡庸なゲームしか出てこないことが当たり前であった。それがここ1年程度のLLMの進化によって、少なくともなにかの斬新さを感じられるものが生成されるようになったのは、良い兆候である。

LLMがこのまま進化を続ければ、出てくるアイデアの質が上がり、アイデアをコードとしてより正確に実装できるようになるだろう。また、上記で挙げたような問題点を指摘すると、それに応じてコードを修正できるかもしれない。そうすれば、より少ないガチャ回数と、より簡単な改良で、遊べるゲームが作れるようになるだろう。ガチャ指向ゲーム開発の今後の発展が楽しみである。