人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

なぜ古いゲームでは乱数テーブルが使われていたのでしょうか?
スーパーファミコン時代のRPGを攻略のために解析しているような記事を見ると、ゲームではメルセンヌ・ツイスタなどのアルゴリズムによる乱数生成ではなく、あらかじめ用意された乱数テーブルを使っているようです。
これは何故なのでしょうか?

簡単に思いつく予想としては、以下のような理由が考えられますが実際のところはどういう理由なのでしょうか?
・RAMの使用容量をバイト単位で削るため?
・人間が乱数だと認識するような、実は真の乱数ではない(0が100回連続で出たりしない)出現パターンを得るため?

●質問者: ku__ra__ge
●カテゴリ:ゲーム
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

ゲームで使われていた乱数の生成方法の変遷は、ナムコの加来量一さんという方の公演に詳しいようです。
http://app-review.jp/news/222268

  1. ハード寄り ―――― 再現性が無い
  2. 演算(線形合同法など) ―――― 演算コストはかかるけれど、メモリは高い
  3. 乱数表 ―――― メモリが安くなってきたし、乱数としての質の問題への対応
  4. 演算(線形合同法などに戻る) ―――― C言語の標準ライブラリでお手軽
  5. 演算(メルセンヌ・ツイスタ) ―――― 今、ここ

線形合同法などの乱数としての問題点は、こちらでも。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/TEACH/ichimura-sho-koen.pdf

スーファミの発表が '90年。
メルセンヌ・ツイスタの発表が '96年で、新聞に載ったのが翌 '97年。

このLCGとLFSRを組み合わせて使う手法はしばらく流行しましたが、1980年代末にはテーブル参照手法が復権してきました。
当時CPUは80年代中盤から変化なかったのですが、メモリ増量が実現し余裕ができたので乱数テーブルを置こう、という考え方に至ったのです。
(snip)
そして1990年代、乱数は大変革の時を迎えました。コンシューマーレベルでのC言語の導入が始まったのです。
C言語には一般に標準Cライブラリが付属するため、開発でそれに含まれるrand()関数を利用するケースが次第に増えてきました。
しかし、当時のrand()関数は大半が乱数アルゴリズムとしてLCGを採用していたため、80年代中盤にLCGとLFSRの合体で解決していた問題が再燃しました。

【CEDEC2014】パックマン、ドルアーガの塔…往年のナムコタイトルから学ぶ乱数の進化と応用|APPREVIEW


後、乱数の精度が良くなったとして、ゲームにそのまま使えるかどうかという話。
http://blog.livedoor.jp/lunarmodule7/archives/4523745.html

「乱数調整」というキーワードはスーファミのときにもあったように記憶しています。
周期性などの問題もあるし、調整するなら表持ちの方がやりやすいかも、みたいなことがあったかどうか。


ku__ra__geさんのコメント
なるほど。ゲームで使われる乱数は時代とともに変遷していっており、その流れの中に乱数テーブルによる乱数発生があるんですね。 URL先の記事も参考になりました。素晴らしい回答をありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ