乱数の使い方・その2

前回の記事で、乱数の基本的な使い方という点に触れました。一番大事なところをもう一回ちゃんと書くと、乱数は一系列で生成すべきであって、複数の乱数系統(つまりSeed)を用いてはいけない、ということでした。
しかし、もちろんですが物事には例外というのがあります。乱数っぽいものを使う場合には、複数系列の乱数インスタンスを作る必要があることもあるのです。
以下の記事は、ゲームにリプレイ機能をつける話です。主に二つ目の記事に乱数の話があります。
http://tobysoft.net/diary/archives/2008/07/replay01.html
http://tobysoft.net/diary/archives/2008/07/replay02.html

また、これは重要な点なのですが、
自分の場合は乱数オブジェクトを複数持っています。
今のプロジェクトだと主にメインの更新処理で使うもの用と、エフェクト用と、描画用を持っています。


乱数オブジェクトを複数持つ利点は、
ちょっとした変更に強いことです。
つまり、ちょっとした変更をしてもリプレイをずらさないようにすることができるのです。

この記事を読んだときには、かなり感心したものです。言われてみりゃ当たり前なんだけども、Version upしても使えるようなリプレイデータを用意するのってちょっと大変なんだろうなと。まあ、こういうちょっと特殊だと思いますし、こういう乱数っぽいものが欲しいだけ、という状況では適当に複数Seedを用いるだけでもいいんじゃないかと思います。
ただ、前回も言ったように別のSeedによって生成された乱数が、互いに無相関であるという保証は無いので、複数のSeedからなる乱数を演算したりした結果、Culdcept Sagaみたいなことにならないとは、誰も保障してくれません(http://www.youtube.com/watch?v=TGMV8s8TtJY)。
なにそれこわい。