マガジン

運と実力のバランス:プレイヤーが納得する乱数設計

遊びをつくる

執筆にClaudeを使用しています。

道をつなぐ線、丸い駒、幾何学のタイルからなるパズルの模型。
記事のテーマをもとに制作したAI生成イメージ。実際のゲーム画面ではありません。

ゲームに乱数を入れると「運ゲーになった」と言われ、抜くと「単調になった」と言われる。この板挟みは多くの作者が直面します。問題の核心は乱数の量ではなく、乱数が何に作用しているかです。同じ確率50%でも、「勝敗を直接決める乱数」と「選択肢の幅を変える乱数」ではプレイヤーの受け取り方がまったく異なります。 この記事では、プレイヤーが「運が良かった・悪かった」ではなく「うまくやれた・やれなかった」と感じる乱数設計の考え方を整理します。判断基準と具体的な調整手順を示しますので、自分のゲームのどこに問題があるかを特定するための道具として使ってください。

この記事の目次
  1. 乱数が「理不尽」に見える構造
  2. 乱数の作用点を分類する
  3. 「確率の見かけ」を調整する三つの手法
  4. 設計を検証する四つの問い
  5. 失敗しやすい設計パターンと対処
  6. 次の行動

乱数が「理不尽」に見える構造

プレイヤーが乱数に怒るのは、確率が低いからではありません。「自分の行動が結果に影響しなかった」と感じたときです。

たとえばRPGで、どう行動しても敵の一撃死攻撃が一定確率で飛んでくる設計は、プレイヤーの技術が介入できません。一方、同じ即死攻撃でも「前のターンに特定アイテムを使えば確率が下がる」という構造を加えると、同じ確率でもプレイヤーは「自分が対処できた問題」として受け取ります。

乱数設計の出発点はここです。乱数の結果をプレイヤーの選択が事前に変えられるかどうか。これが「納得感」の分かれ目です。変えられないなら、その乱数は純粋な運であり、ゲームの性質として意図的に採用していないかぎり、設計を見直す価値があります。

乱数の作用点を分類する

乱数をどこに置くかで、プレイヤーの体験は大きく変わります。作用点を三つに分けて考えると整理しやすくなります。

入力への乱数(インプット乱数)

ゲーム開始時や行動前に状況をランダムに決める乱数です。テトリスのピース順、カードゲームの手札、ローグライクの地形生成がこれにあたります。プレイヤーは「与えられた状況でどう立ち回るか」を考えます。結果ではなく素材が変わるので、技術の発揮余地が広く残ります。

出力への乱数(アウトプット乱数)

行動した結果がランダムに変化する乱数です。攻撃が当たるかどうか、ドロップするかどうか、クリティカルが出るかどうかが典型です。プレイヤーは「最善の行動を取ったのに結果が悪かった」と感じやすく、不満が蓄積しやすい場所です。

中間の乱数(プロセス乱数)

行動の結果そのものは確定しているが、途中の展開がランダムに変わる乱数です。ダンジョンRPGで「進むと宝箱か罠かわからない」のがこれです。どちらが出ても対処できる準備をすることがゲームプレイになります。

大まかな原則として、インプット乱数は多くしやすく、アウトプット乱数は少なく・影響を小さくする方向が、技術介入の余地を保ちやすいです。

「確率の見かけ」を調整する三つの手法

確率の数値を変えなくても、プレイヤーの体感は設計次第で大きく変わります。

擬似乱数(Pseudo-Random Distribution)

MOBAやカードゲームでよく使われる手法です。内部的には「外れが続くほど次の当たり確率を上げ、当たったらリセットする」仕組みを持ちます。表示上の確率は一定でも、実際には連続外れを抑えます。長期的な平均確率は保ちつつ、「10回連続で外れた」という極端な体験を減らせます。実装するには確率テーブルと内部カウンターが必要ですが、HTMLゲームなら変数一つで管理できます。

バッグ方式(Bag Randomization)

テトリスが採用した手法で、全種類のピースを一袋に入れ、引き切ったらシャッフルして繰り返します。短期間での偏りを抑えつつ、長期的には均等に全種類が現れます。カードゲームのデッキシャッフルも同じ原理です。「同じものが続きすぎない」設計に向いています。

遅延ペナルティ方式

連続して同じ不利な結果が出た場合、次回以降の条件を有利方向にシフトする方式です。「3回連続でミスしたら次のステージの敵HPが少し下がる」といった形です。マリオシリーズが長らく採用してきた「自動アシスト」の思想に近く、プレイヤーに知らせずに実装することも多いです。

これら三つは組み合わせて使えます。たとえばインプット乱数にバッグ方式を使い、アウトプット乱数に擬似乱数を適用するといった構成です。

設計を検証する四つの問い

自分のゲームの乱数が適切かを判断するには、次の問いを順番に当てはめてみてください。

  1. その乱数の結果を、プレイヤーは事前の行動で変えられますか? 変えられないなら、それは純粋な運です。意図しているなら問題ありませんが、無意識に置いているなら要検討です。
  1. 連続して最悪の結果が出たとき、プレイが続きますか? 続かない(即死・詰み)なら、擬似乱数やバッグ方式で連続最悪を防ぐか、最悪結果でも続けられるようゲームを調整します。
  1. 乱数の結果がわかるのはいつですか? 行動前にわかる(インプット)なら対処しやすく、行動後にわかる(アウトプット)なら理不尽感が出やすいです。情報の開示タイミングを変えるだけで体感が変わることがあります。
  1. リトライしたとき、同じ状況になりますか? 完全に同じ展開が再現されると「暗記ゲー」になります。完全にランダムだと「毎回別のゲーム」になります。リトライの性質とゲームの目的に応じて、乱数のシード(初期値)をリセットするかどうかを選んでください。

失敗しやすい設計パターンと対処

「確率が低いだけで問題ない」と思いがちなケース:5%の即死攻撃は低確率ですが、10回戦えば約40%の確率でどこかで当たります。ゲームの反復回数を考えて確率を設定する必要があります。

乱数の種類が多すぎるケース:攻撃の命中・クリティカル・敵のAI行動・ドロップ・天候変化……と乱数を重ねると、プレイヤーは自分の行動が何に影響しているかわからなくなります。乱数を削る勇気が必要です。「このゲームでプレイヤーが主体的に操作する要素はどれか」を決め、それ以外への乱数を最小化するのが整理の第一歩です。

視覚フィードバックなしに乱数を使うケース:乱数が働いていることをプレイヤーが認識できないと、成功・失敗の理由を「操作ミス」と誤解します。命中率なら数値を見せる、クリティカルなら演出を派手にする、といった明示が「納得感」を作ります。

次の行動

自分のゲームで乱数が使われている場所をすべてリストアップし、それぞれが「インプット・アウトプット・プロセス」のどれかを書き出してみてください。アウトプット乱数の中で「プレイヤーが事前に変えられないもの」があれば、そこが最初に見直す場所です。ゲームが完成したらアソバースに投稿して、実際にプレイしてもらったフィードバックで乱数の体感を確認してみてください。