無限ランダムひどいアクションゲーム生成器への道

ゲームそれ自体を自動生成してくれる機械が欲しい。開発者はその機械が生成するゲームを遊んで良ゲーなら採用、クソゲーなら捨てる、その作業だけでゲームが作れる。夢の機械だ。

人が後で見て取捨選択する前提なら、出来上がるものの大半ではクソゲーでもいい。それよりも大切なのはゲームの持つルールというか、仕組みというか、ギミックというか、そういったものが十分なバリエーションを持って生成されること。似たようなゲームしか作られないのではつまらない。

どうすればそういったことができるか。一例として、プレイヤーがボタンを押した時に起こることを乱数で適当に作って組み合わせる、という方法が考えられる。例えばボタンを押した時の自機の加速度の変動パターンを適当に設定することで、上に加速すればジャンプ、右に加速すればスライディング、などの動きをいろいろ作れそうである。そういったことを自機だけでなく敵にも設定すれば、いろんなバリエーションのゲームができるかも。

そういったアプローチを採っている既存のものとして、Mechanic Minerがある。

この論文はゲームを作るAIとして有名なANGELINAプロジェクトのものである。Mechanic MinerではToggleable Game Mechanics (TGM)と呼ばれるボタンが押されるたびに自機の状態が切り替わる機構を開発し、リフレクションを使ってクラス内のフィールドに対して適用している。題材としてはレベル内のスタート地点からゴール地点へ到達するパズルジャンプアクションを使っており、自機の位置や重力に対して、ボタンが押されると倍になる、半分になる、+-が入れ替わるというTGMが用意されている。

Mechanic Minerでは遺伝的アルゴリズムを用いてランダムなTGMの組み合わせから適切なTGM群を選択している。選択のための適応度 (fitness)は、自機を適当に動かしてゴールに到達するまでにレベルのどの程度の範囲を移動できたかを用いている。レベルのあちこちを移動してやっとゴールに到達できる、というのが質の良いゲームと判定しているようだ。もちろんゴールに到達不能なものは排除される。

Mechanic Minerはこのジャンプアクションに比較的特化した作りになっている感じだったので、アクションゲーム全般にもうちょっと拡張可能なものが作れないかと思って、別のものを作ってみた。

デモゲームは以下で遊べます。

クソゲーを自動的に作る、という点のみクリアして、あとは失敗している気がする。自機や敵の動作はいろんなバリエーションが出ているが、ゲームとしてのルールとしてのバリエーションとまでは呼べない印象である。あとクソゲーを超えたプレイ不能ゲームがたくさん出てくる。ボタンを押しても何も起きないとか。

GameMechRandomizerではボタンを押した時に起こることとして、数値がn倍になる、nを足す、nになるという、より広範な動作を用意した。これらの動作がボタンを押した時、押している間、押すとトグルで切り替わる、押している間トグルで切り替わる、いずれかの条件で発生する。

適応度は2つのプレイヤーAIを作ることで評価した。一つは賢いもの、もう一つはバカなもの。それぞれのAIが自動生成されたゲームを遊んで、バカなものは多く死に、賢いものはそれほど死なない、そういったものが比較的遊べるゲームだという判断をして、適応度を高くする。逆にプレイヤーが賢かろうがバカだろうが死に方に大差ないのはゲームとして成り立ってないと考えることとした。賢いAIといっても、例えば自機を8の字で動かして敵弾に当たりにくくするとか、そのレベルの賢さだが。

GameMechRandomizerを使うことで、ある程度は汎用的なアクションゲームに対して新たな仕組みを導入することはできる。ある程度は。

課題は満載である。

  • 新しいゲームが生成されている、とはとても言えない。箱避けゲームとか箱撃ちゲームとか、もともとあるゲームに対してちょっとバリエーションを与えている、程度である

  • まともなゲームができない。クソゲーで良いといっても遊べすらしないゲームはいかがなものか

  • 遊べすらしないゲームを遊べるゲームへ調整する仕組みが必要だが、現状の遺伝的アルゴリズムベースのアプローチが妥当かどうかは不明である

  • 多分、ゲームの楽しさというものを測るもうちょっとまともな指標が必要

もうちょっと考えます。