読者です 読者をやめる 読者になる 読者になる

aoitaku Advent Calendar 2016 : 21日目 - ゲームと確率に関する覚え書き

この記事は aoitaku Advent Calendar 2016 の 21 日目の記事です。

ゲームにはいろいろな場面で確率計算が使われます。ユーザ入力に対する結果の乱択が主です。ところが結果を乱択にするのは思っているより制御しづらく、意図したとおりのバランスにならないことが多いです。その話をします。

低すぎるドロップ率

たとえば、ドロップアイテムの入手率を決定するときに、「20 回戦ったら 1 個くらい手に入るようにしよう」みたいな感じで考えると思います。この発想自体はよいです。
ところが、ここでドロップアイテムの入手確率を 5% にしてしまうと、ちょっとよくない感じになります。5% というのは平均するとたしかに 20 回に 1 回なのですが、5% の確率で 1 回目に出ることもあるし、58回やっても出ない確率もだいたい 5% くらいあるわけです。ちなみに 20 回やって 1 回も出ない確率はおよそ 3 分の 1 程度あります。

確率 n% を m 回試行したときの当選確率みたいなのは直感でわかりにくいと思いますが、「100 人が同時に m 回試行したときに m 回以下で当選した人数」というのを考えると良いのではないかと思います。
この例で行くと入手確率 5% というのは 100 人が 20 回試行したら 36 人は一個も入手できてない、という感じになります。まあ決して少なくないですよね。一個も入手できない人の割合を 100 人に 1 人くらいにしようと思ったら、試行回数を 89 回にするか、入手確率を 20% にするか、という感じになります。試行回数を増やすのは現実的ではないですが、とはいえ確率を 20% にすると今度は別の問題が起こってきます。想定より多く入手できすぎる人が少なからず発生してしまうわけです。

乱数はふつう 20 回の試行のうち 1 回目に当選する確率と 20 回目に当選する確率*1は同じです。そうすると確率 5% で 100 人が 20 回試行したら 1 回も当選しない人が 36 人程度いるのに対して、1 回だけ当選する人も 36 人程度います。
残りおよそ 28 人は 2 回以上当選する人です。このうちおよそ 26 人はちょうど 2 回当選する人です。3 回以上当選する人が 2 人もいます。
ドロップ率にすると、1 個も入手できない人に対して入手できてる人の入手個数の期待値が 1 個以上になってしまうのでなんかあんまりよくない感じがします。もちろん入手できない人がいるので当たり前なんですが。

どうすればよかったのか

たとえば正規乱数を使います。
正規乱数というのは乱数の分布が正規分布になるような乱数のことを言います。
正規分布というのはおおざっぱにいうと平均部分の割合が最も大きく、平均から遠くなればなるほど割合が小さくなるような分布のことを言います。

「20 回やったら 1 個手に入る」というのをどれくらいの感じにするかにもよりますが、たとえば平均 10 回で 1 個手に入って、1 回 ~ 20 回の間に 1 個手に入る人が 99% になるようにというのを考えると、9 回から 12 回の間に 1 個入手する人がおよそ 64%、7~8 回の間の人と 13~14 回の間の人がそれぞれおよそ 16% ずつ、5~6 回の間の人と 15~16 回の間の人がそれぞれおよそ 2% ずつ、残りは 1% 未満、という感じになります。これだと 98 % の人が 5~16回 の間に集まって、運が悪くとも 20 回以内にはほぼ入手可能になって非常にバランスを制御しやすい感じになります。よさそうですね。

正規乱数を得るにはボックス=ミュラー法を使いましょうということでだいたいいいと思いますし、各種言語でのアルゴリズムも公開されているので、それを参考にするとよいと思います。

理不尽なランダム性

ランダム性はプレイヤーが予測しづらいので、組み込む場所によっては悲劇を生みます。正規乱数を使ってもコントロールしきれないことはままあります。
これを逆手に取って、プレイヤーの選択によってランダム性をできるかぎり排除できるようにする、というものがあります。たとえば石化や即死のような確率で付与される致命的な状態異常攻撃を放ってくる敵がいるとレベルにかかわらず事故死します。そこで装備やスキルによって石化や即死に対する耐性を高めるとランダム性を薄められるので事故死しにくくなります。これはよくあるアイデアです。

理不尽なランダム性というのは、プレイヤーが薄めることができないものを指します。完全に薄めることができないランダム性がゲームオーバーの引き金になったりしているとプレイヤーは大きなストレスを感じます。いわゆる「運ゲー」はあまりよいデザインではありません。

前述のドロップ率なんかも、ドロップ率上昇効果を持つアイテムなどがあったほうがプレイヤーにとっての理不尽さを軽減できると思いますし、条件を満たすとドロップ率が向上するというようなギミックを仕込んだゲームも見かけます*2

理不尽なランダム性は必ずしも悪ではありません。プレイヤーが回避しづらいランダム性が存在することは、プレイヤーに緊張感を与えます。完全に回避できることはときに退屈さを与えます。
ローグライクゲームは理不尽なランダム性を有効に利用したゲームジャンルのひとつだと思っています。

プレイヤーに理不尽なランダム性をつきつけることで「このプレイングは推奨されていない」ということを提示することができます。
たとえば適正レベルに満たないときは致命的なアクシデントの発生が多くなるようになっているとプレイヤーはいずれ「ここはまだ来るには早すぎる」と気付くでしょう。RPG などではダメージ計算式によってこれを意図したりできますが、プレイヤーの気付きのタイミングを不定にしたい場合には理不尽なランダム性が有効です。うまく使えばプレイヤーに適度な緊張感を与えることができます。
多様は禁物です。過度の緊張はストレスになります。

乱択とメッセージ性

ぼんやりと乱数が持つメッセージ性のことを考えていました。いわゆるナラティブというものも、プレイヤーが乱択の結果に何らかの意味を見出そうとすることをうまく利用したものだと言えると思います。

プレイヤーは仕組まれたものではない偶然性にドラマを見出したりします。以前敗北を推奨するゲームデザインについて書きましたが、ひょっとすると乱択をうまく活用することでプレイヤーの動機をコントロールできるだけでなくてプレイヤーにドラマを感じさせることができるかもしれません。

このへんはまだ確証がないのでそのうち何かゲームを作って考えます。

メモなので特に結論とかはありませんが、以上です。

*1:20 回目にはじめて当選する確率のことではありません

*2:たとえばアクション RPG だとコンボシステムなどによってコンボが成立するとドロップにボーナスが入るようなものがあります