rpgで敵に遭遇するのをエンカウントと言います。エンカウント方法は単純なように思えて、実は奥深いです。そこでこのページではエンカウントに付いてあれこれ考えてみたいと思います。
ちなみに、以前書いた「レトロゲームにおける確率論」も多少関係するので、興味ある方は読んでみて下さい。
■ルーレット方式■
一歩進むたびにルーレット(もしくはサイコロ)を回し、アタリならエンカウントする方法です。正しい呼び方じゃないかも知れませんが、一応ここではルーレット方式と呼ぶ事にします。
この方式は誰もがすぐに思いつくものですが、確率を計算してみると非常にバランスが悪い事が分かります。例えば、6面体のサイコロで赤ピンが出たらエンカウントすることにしたとします。この時、何歩歩いたらエンカウントするかを求めると、次のようになります。
01歩 | ![]() |
02歩 | ![]() |
03歩 | ![]() |
04歩 | ![]() |
05歩 | ![]() |
06歩 | ![]() |
07歩 | ![]() |
08歩 | ![]() |
09歩 | ![]() |
10歩 | ![]() |
11歩 | ![]() |
12歩 | ![]() |
: | : |
グラフを見て分かる事は、一歩進んですぐにエンカウントしてしまう確率が高い事です。平均エンカウント率は 1/6 かもしれませんが、体感的にはもっと高い確率でエンカウントしているように思えるはずです。これではバランスが悪い印象しか持たれません。
また、運がよければ何百歩も歩けてしまうことがあります。レトロゲームで使われている乱数は周期が短いからまず起こり得ませんが、周期の長い乱数を使っているとまれに起こり得ます。防止策として、ある程度歩くと強制的にエンカウントするようにします。
■すごろく方式■
双六のようにサイコロを振り、出た目の数だけ歩けるようにする方法です。
サイコロの出る目の確率はどれも一緒なので、一歩目のエンカウントが高くなるようなことはありません。
注意点は、平均エンカウント率を 1/6 にしたい場合は、11面体のサイコロを使わなければいけない事です。6面体のサイコロだと平均エンカウント率は 1/3.5 になります。
11面体のサイコロを使った場合の歩数の分布は以下の様になります。
01歩 | ![]() |
02歩 | ![]() |
03歩 | ![]() |
04歩 | ![]() |
05歩 | ![]() |
06歩 | ![]() |
07歩 | ![]() |
08歩 | ![]() |
09歩 | ![]() |
10歩 | ![]() |
11歩 | ![]() |
12歩 | 0.00% |
フラットなグラフになりました。ルーレット方式よりも幾分かマシですが、まだ体感的なエンカウント率は高いのではないでしょうか。
■くじ引き方式■
一歩進むたびにくじを引き、アタリがでたらエンカウントします。引いたくじは元に戻さず、くじが全て無くなったら補填するようにします。
中学の数学で習ったと思いますが、くじ引きでは何番目にくじを引いてもアタリの確率は同じになります。6本中1本アタリのくじ引きをやった場合の確率分布は以下の様になります。
01回目 | ![]() |
02回目 | ![]() |
03回目 | ![]() |
04回目 | ![]() |
05回目 | ![]() |
06回目 | ![]() |
07回目 | 0.00% |
ただし、このグラフは一回だけくじ引きをした時のものです。実際はくじを補充するので、補充を間に挟んだ場合の間隔も計算しなければいけません。例えば、1本目でアタリ → ハズレを5本引く → くじを補充 → ハズレを5本引く → アタリを引く、となれば10回連続でハズレを引いたことになります。この辺を考慮すると歩数の分布は次のようになります。
01歩 | ![]() |
02歩 | ![]() |
03歩 | ![]() |
04歩 | ![]() |
05歩 | ![]() |
06歩 | ![]() |
07歩 | ![]() |
08歩 | ![]() |
09歩 | ![]() |
10歩 | ![]() |
11歩 | ![]() |
12歩 | 0.00% |
6歩を中心にした山なりの分布になりました。平均エンカウント率は 1/6 です。体感的にはこのような分布の方が快適に思えるのではないでしょうか。
■コイントス方式■
コインを数枚投げて表になった枚数だけ進みます。要は回り将棋のルールです。
実装方法としては、乱数を発生させてビットの立っている数だけ歩けるようにします。0 歩になる事があるので +1 します。
平均エンカウント率を 1/6 にするためには、10枚のコインを投げる事になります。歩数の分布グラフは以下の様になります。
01歩 | ![]() |
02歩 | ![]() |
03歩 | ![]() |
04歩 | ![]() |
05歩 | ![]() |
06歩 | ![]() |
07歩 | ![]() |
08歩 | ![]() |
09歩 | ![]() |
10歩 | ![]() |
11歩 | ![]() |
12歩 | 0.00% |
くじ引き方式よりも鋭い山形になりました。こういうのを二項分布というようです。おそらく体感的に最も 1/6 に思えるのではないでしょうか。
■地雷方式■
マス目ごと(もしくは歩数ごと)に乱数値を設定しておき、その値を元にルーレット方式を実行する方法です。
ファミコン時代のファイナルファンタジーではこの方式が使われていたようです。「地雷方式 エンカウント」で検索するとその辺を研究したサイトが見つかります。
例えば、次のような乱数テーブルをあらかじめ作っておき、これを確率の分子だか分母に使います。これで確率分布が分散するだろうという魂胆です。
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
4 | 1 | 5 | 5 | 2 | 8 | 6 | 6 | 3 | 9 | 7 | 4 | 3 | 1 | 2 | 7 |
ルーレット方式のように一歩目のエンカウント率が高くなる事はありません。しかし、平均エンカウント率の算出が面倒くさいです。しかも、レトロゲーム時代の乱数はいい加減だったので、ちゃんと計算しても思い通りのエンカウント率にはならなかったのではないでしょうか。
とりあえず、1/6, 1/5, 1/4, 1/3, 1/2, 1/1 というようにカウントダウンするようなテーブルを作成すればフラットな確率分布になります。