乱数の話

密かにココットさんがゲーム開発を始めたようなので、勝手にアンテナに追加しました(分類はゲーム外になっています。ゲーム掲示板ではないようなのでとりあえず)。どんなダンジョンゲームを目指すのかヨダレを垂らしつつ見守ろうと思います。ゆっくりやってくださいまし。

ココットさんの掲示板にメルセンヌ・ツイスタ(乱数生成のアルゴリズム。以下MT)の記述がありました。MTは私もDesigeonの初期版直後から使い続けています。今は安定しているようで何よりですが、実際のところありがたみの実感はありません。実は作者の知らないうちにメリットを享受してるのかもしれませんが、そういう分析や結論にはまだ至っていません。

それに、優秀と言われるMTも初期化がヘボだとあまりカッコ良くないようです。私などはGetTickCount()の加工で初期化している体たらくでして、きっとろくな結果は得られていないんだろうと思います。乱数がひどいとクレームが来たら改善を考えますけど、それよりも先にやらねばならないことがたくさんあって。

MT導入のきっかけは、当時32ビット以上のご時世にVC++の乱数関数が一発で15ビットしか返さない事実に愕然として(互換性を重視してるんだろうけど)、やむなく入れたという感じです。でも、質が悪いと言われるrand()がひどいという証明がDesigeonでなされたわけではないので、まだまだMTは自己満足のレベルでしか使えていません。

MTはメモリを食うので、Desigeonでは別に作成した線形合同法と併用しています。基幹部にMTを使い、シリアル化が必要な部分は線形合同法でやってます。「かわいそうな王」のレベルアップボーナスは線形合同法です。毎回保存しているので、リロードしてレベルを上げ直しても、得られるボーナス値が変わりません。ここをMTでやるにはちょっと無理がありますね。