前にChatGPTなどのLLM(大規模言語モデル)を使って小さなゲームを作るのはまだ難しいのでは、という記事を書いた。
ChatGPT を用いたゲーム考案の方法はいくつか考えられるが、ChatGPT に新しいゲームを考えさせ、それを実装させることは難しい。少なくとも現状の ChatGPT には、以下の課題があるように思える。
GPT-〇〇 になればこの辺の問題は解決される?
分からない。
画像生成 AI の急激な改善を見ていると、半年後にはこの辺の問題は解決するのかもしれない。モデルの規模で乗り越えられる課題なのか、そもそもアプローチとして筋悪なのか、どちらかは現時点では不明だ。
GPT-4より一部のタスクにおいては優れた結果を出しているClaude3の登場によって、このGPTほにゃららになればどの辺の問題がどの程度解決可能なのか、ということが多少予想できるようになった。
前にChatGPT (GPTs)を使ったワンボタンアクションミニゲーム制作を試した。
これと同じことをClaude 3 Opusを用いて試してみた。その結果としては、
- 生成されるアイデアの質は向上し、ワンボタンでの操作の特徴をうまく活かしたルールを生成できるようになった。
- ルールを実装したソースコードも最初からそれなりの質のものが出るようになったが、まだ不完全。
- 適切な難易度設定や、リスクとリワードに応じたスコアリング、ゲームオーバー条件設定などはほとんどできない。
という具合に、改善した部分とあまり変わらない部分があった。
これを手掛かりに、今後LLMが高性能化した時に、小さなゲーム制作においてできること、できないことを想像してみると、以下のような感じだろうか。
ここで言うゲームの良し悪しとは、以下のようなことを意図している。
- ゲームとして成り立っているか。不条理なゲームオーバーや、永久パターンなどが存在しないか。
- 適切なリスクやリワードを備えているか。プレイヤーの技量に応じてスコアやプレイ時間が伸びるようになっているか。
- 楽しいか。プレイ感覚が直感的で、爽快感などを感じる内容か。
上記の問題に対する改良としては、以下が一例となるだろう。
- ルールの改良。ゲームオーバー条件やスコアリングシステムの変更。
- パラメタの調整。自機や敵の速度や出現頻度の変更。
- 操作方法の改良。プレイヤーに取って分かりやすくストレスを感じない操作への変更。
これらはLLM単体でなんとかできるとは思えない。作ったゲームの良し悪しの判断を行うためには、コンピュータが実装されたゲームを自らプレイし、その結果を解析する必要がある。ただ、LLMに限らない範囲では、ゲームをプレイするAIはすでに存在するので、そういった仕組みと併用することで現時点でもある程度は可能であろう。爽快感などの人間感覚を、コンピュータがどの程度理解可能かは正直よく分からない。
ゲームの悪いところの改良をコンピュータに行わせることは、とても難しそうだ。AIがゲームの良し悪しを判断できるのであれば、それを報酬とした強化学習的な仕組みでなんとかできるかもしれない。ただ、ゲームを良くするためにルールや操作方法などを適切に改良することや、非常に多岐に渡るゲーム中パラメタを適切に調整することは、AIに可能なのだろうか。
なので現時点ではLLMのできることに限定して、小さなゲーム作りを助けてもらった方がよさそうだ。そうすると、プロンプトを通じてLLMにやってもらうことは以下になる。
- ユーザから与えられえたテーマに沿って、いくつかのゲームアイデアを作成する。
- ユーザが選んだゲームアイデアに対応するルールを作成する。
- ルールをゲーム内オブジェクトごとのプロパティ、形状、動作、衝突イベントなどに詳細化する。
- 上記ルールをプログラム内コメントとして含んだスケルトンコードを作成する。
- スケルトンコードを実装するためのライブラリ知識を与え、実装されたコードを得る。
ここまでがLLMにやってもらうこと。出来上がったコードやゲームは不完全なので、以下は人手で行う。
- コードの不具合や意図通りになっていないルールに対応する修正。
- ゲームとして成り立つためのルール、コードの改良。
- リスクやリワードを加味したゲームオーバー条件やスコアリングシステムの追加。
- ゲームを楽しくするためのルールやパラメタの調整。
- 難度上昇方法の実装、難度曲線の調整。
こう考えると、LLMを使ったところであまり作る手間は減って無さそうに見える。ただ、LLMが実装したコードを見ると、結構面白い挙動をするものが出てくることもたまにある。なので、そういったゲームの発想のベースとなるトイ(おもちゃ)を作る、という用途には今でも使えそうだ。これからモデルの精度が上がっていくと、最初から全く使い物にならないようなハズレも減っていくように思える。
Claudeで上記の動作を行うためのプロンプトや、それを改良して完成させたいつくかのゲームは以下のリポジトリに置いた。
新しいLLMが出てきたら、プロンプトを改良しつつ、引き続き小さなゲーム作りに活用していきたい。