[k-matsuのページトップ]>[電脳小物]>[京ぽん]>[京ぽん用乱数クラス]


[0]京ぽん用の幅にする

京ぽん用乱数クラス

京ぽん(AH-K3001V)のOperaでは、JavaScriptで乱数の生成に標準のMath.random()を使用するとOperaを起動するたびに同じ乱数列を生成してしまいます。乱数生成に使用する種が毎回同じ数値になっていると思われます。
これでは乱数としては不適切であり不便なので、乱数クラスを作成しました。
京ぽん以外でも動作しますので、乱数は本クラスを使って生成するようにするとPCでも京ぽんでも同様にランダムな乱数を利用できます。
なお、乱数のアルゴリズムはhttp://www.sm.rim.or.jp/~shishido/pie.htmlを参考にさせていただきました。

使用条件

特にありませんが、どこかにhttp://www.age.jp/~k-matsu/kyoupon/develop/randomize.htmlのを使用とか引用とか書いていただけると嬉しいです(必須ではありません)。

メソッド一覧

random()
0以上1未満の実数の乱数を生成します。Math.random()と同様に使用できます。
randomi(arg)
0以上arg未満の整数の乱数を生成します。
なお、メソッド名はランダミではなくランダム・i(Integer)です(w
srand(arg)
乱数の種を初期化します。引数を指定しない場合は現在時刻から種を生成します。
引数argを指定するとargが種になり、Windowsのフリーセルの面生成のような使い方ができます。
Randomize(arg)
Randomizeオブジェクトを生成するコンストラクタメソッドです。
Randomizeオブジェクトを生成し、srandを呼び出して乱数の種を初期化します。
引数argを指定するとsrandに渡します。

クラス定義

//乱数アルゴリズム参考:http://www.sm.rim.or.jp/~shishido/pie.html
function Randomize(seed) {
  this.srand=function(seed) {
    tmpdt=new Date();
    this.seed=this.srand.arguments.length ? seed : tmpdt.getSeconds()*1000+tmpdt.getMilliseconds();
  }

  this.random=function() {
    this.seed=(this.seed*2061+7)%65536;
    return this.seed/65536;
  }
  this.randomi=function(range) {
    return Math.floor(this.random()*range*10)%range;
  }

  Randomize.arguments.length ? this.srand(seed) : this.srand();
}

使用例

//変数定義
var rnd,i,x;

// Randomizeオブジェクト生成
rnd=new Randomize(); // 引数なし→乱数の種は現在時刻から

//乱数生成
x=rnd.random();   // 0以上1未満の実数乱数生成(Math.random()と同様)
i=rnd.randomi(6); // 0以上5以下の整数乱数生成

もっと使用例

私が公開している京ぽん用ゲームのすべてで本クラスを使用していますので、各ゲームのソースを参照してください。


[k-matsuのページトップ]>[電脳小物]>[京ぽん]>[京ぽん用乱数クラス]