VANNAN GAMES.

← 制作ノート一覧

「上手い人が勝てないゲーム」を、計測しながら作り直した話

開発中の新作

いま、数字パズル×タワーディフェンスの新作を開発しています。盤面に散らばる数字をタップして、合計ぴったりでコストを支払うと、最後にタップしたマスに味方が立つ——数字の選択がそのまま配置の選択になる、というのが核のアイデアです。この記事は、そのゲームが一度「上手い人が勝てないゲーム」になり、計測で作り直した記録です。

最初の計測結果は「全員同じ」

プロトタイプができた段階で、いつものようにルールを丸ごとNode.jsに移植したシミュレータを書き、「無策に遊ぶAI」と「上手く遊ぶAI」に数千回ずつプレイさせました。結果、無策は平均20.1日目まで生存、上手いは20.8日目。ほぼ同じです。上手くプレイする意味がないゲームが出来上がっていました。

原因はすぐ分かりました。タワーが永続する設計だったので、20日も経つと盤面がタワーで飽和して、誰がやっても自動的に勝つ状態になっていたのです。そこでタワーを「その日限り」にしました。守ってくれる町の人たちは、翌日には帰ってしまう。ループもの原作の「主人公以外はループを覚えていない」という設定と噛み合う、気に入っている解決です。

それでも差が出ない

ところが、タワーを日次リセットにしても、敵を車線制にしても、実力差は数%しか出ません。ここからが本番でした。勘で数値をいじるのをやめて、シミュレータに計測を足しました。被弾した瞬間、その車線に味方はいたのか。撃退は敵が横断歩道を渡る前だったのか、渡った後だったのか。

計測して分かったことは2つ。まず、被弾の7割以上は「守っていない車線」から来ていて、それは上手いAIでも変わらないこと。つまり上手い配置をしても、実際には車線をカバーできていない。犯人は「タワーは数字タイルの位置にしか建てられない」という核のルールで、置ける場所がタイルの出現運に縛られていたのです。次に、朝はタワーがゼロから始まるので、序盤の被弾は腕前と無関係に発生すること。どちらも、計測しなければ一生気づかなかったと思います。

効いた設計変更

この計測に基づいて、設計を4つ変えました。①タワーは全方位攻撃をやめ、自分の車線だけを守る——「どの車線を埋めるか」という分かりやすい意思決定が生まれ、実力差が初めて2桁%になりました。②赤信号の準備時間を作り、布陣してから渡る構造に——朝の丸腰被弾をなくしました。③朝に数字をまとめて配給し、④建てるたびにその日のコストが上がる——数の暴力ではなく、少ない建設の質で勝負が決まるように。

「面白い」を測れる形に翻訳する

今回の計測でいちばん頭を使ったのは、コードよりも「何を測れば面白さの代理になるか」の設計でした。上手いAIと無策AIの成績差は「実力が出るか」の代理。被弾がカバー済みの車線から来た割合は「配置に意味があるか」の代理。横断歩道より手前で撃退できた割合は「迎撃が間に合う設計か」の代理です。面白さそのものは測れませんが、面白さが壊れているときに異常値を出す指標なら作れます。健康診断と同じで、数値が正常でも面白いとは限らないけれど、異常なら確実にどこかが悪い、という使い方です。

没になった案も記録しておく

最終形にたどり着くまでに、13個のバリアントを試して大半を捨てました。たとえば「敵が主人公に引き寄せられてくる」案。全ての敵が脅威になれば防衛の価値が上がるはずでしたが、車線ごとに守る設計と真っ向から喧嘩して、車線を守る意味を壊してしまいました。数字の供給を絞って建設を貴重にする案は、上手いAIより先に無策AIを窒息させて、差がむしろ縮みました。どの案も、実装した瞬間は良さそうに見えたのがポイントです。数字が「ダメです」と言ってくれなければ、どれかをそのまま出荷していたと思います。

捨てた案は全部、理由ごとに開発リファレンスに記録してあります。同じ思いつきは数週間後にまた降ってくるものなので、「それは試した。ダメだった。理由はこれ」と即答できる記録は、未来の自分への一番の贈り物です。

シミュレータの限界も分かった

最終的にAI同士の実力差は+11%程度。正直、目標にはまだ届いていません。ただ、この設計の本当の実力差は「時間内に暗算で組合せを見つける速さ」や「どの脅威を諦めるかの判断」にあって、それはAIポリシーでは測れません。数値の土台をシミュレータで固めて、そこから先は人間の体感テストで詰める。使い分けの線がはっきり見えたのも収穫でした。

面白さは祈って待つものではなく、測って作れる部分がかなりある——前作でも学んだことですが、今回は「実力が出るかどうか」まで計測対象にできました。この新作は『まもってわたる。』として公開しました。ぜひ「上手くなる楽しさ」を確かめにきてください。