質問: なぜ古いゲームでは乱数テーブルが使われていたのでしょうか? スーパーファミコン時代のRPGを攻略のために解析しているような記事を見ると、ゲームではメルセンヌ・ツイスタなどのアルゴリズムによる乱数生成ではなく、あらかじめ用意された乱数テーブルを使っているようです。 これは何故なのでしょうか? 簡単に思いつく予想としては、以下のような理由が考えられますが実際のところはどういう理由なのでしょうか? ・RAMの使用容量をバイト単位で削るため? ・人間が乱数だと認識するような、実は真の乱数ではない(0が100回連続で出たりしない)出現パターンを得るため?
回答: ゲームで使われていた乱数の生成方法の変遷は、ナムコの加来量一さんという方の公演に詳しいようです。 1. ハード寄り ―――― 再現性が無い 2. 演算(線形合同法など) ―――― 演算コストはかかるけれど、メモリは高い 3. 乱数表 ―――― メモリが安くなってきたし、乱数としての質の問題への対応 4. 演算(線形合同法などに戻る) ―――― C言語の標準ライブラリでお手軽 5. 演算(メルセンヌ・ツイスタ) ―――― 今、ここ 線形合同法などの乱数としての問題点は、こちらでも。 スーファミの発表が '90年。 メルセンヌ・ツイスタの発表が '96年で、新聞に載ったのが翌 '97年。 > このLCGとLFSRを組み合わせて使う手法はしばらく流行しましたが、1980年代末にはテーブル参照手法が復権してきました。 > 当時CPUは80年代中盤から変化なかったのですが、メモリ増量が実現し余裕ができたので乱数テーブルを置こう、という考え方に至ったのです。 > (snip) > そして1990年代、乱数は大変革の時を迎えました。コンシューマーレベルでのC言語の導入が始まったのです。 > C言語には一般に標準Cライブラリが付属するため、開発でそれに含まれるrand()関数を利用するケースが次第に増えてきました。 > しかし、当時のrand()関数は大半が乱数アルゴリズムとしてLCGを採用していたため、80年代中盤にLCGとLFSRの合体で解決していた問題が再燃しました。 > > 【CEDEC2014】パックマン、ドルアーガの塔...往年のナムコタイトルから学ぶ乱数の進化と応用|APPREVIEW 後、乱数の精度が良くなったとして、ゲームにそのまま使えるかどうかという話。 「乱数調整」というキーワードはスーファミのときにもあったように記憶しています。 周期性などの問題もあるし、調整するなら表持ちの方がやりやすいかも、みたいなことがあったかどうか。