JavaScript
HTML5
ライブラリ
ゲーム制作
phina.js

【phina.js】phina.util.Random クラス

この記事はphina.js v0.2.2について書いています。
こちらからphina.util.Randomクラスのプロパティ、メソッドの一覧を見られます。

phina.util.Randomクラス

phina.util.Randomクラスは乱数を扱うクラスです。

Example

phina.util.Randomクラスはstaticなクラスとして使うだけでなく、インスタンス化して使うことができます。
それぞれのインスタンスに別々のシードを設定するなどの使い方ができます。

phina.main(function() {
  //インスタンス経由で使う
  var random = phina.util.Random();
  console.log(random.random()); // => 0.213308628232523
  //staticなクラスとして使う
  console.log(phina.util.Random.random()); // => 0.2140182469072794
});

また、phina.globalize()を実行後なら、phina.util.の部分を省略することができます。

phina.globalize();
phina.main(function() {
  //インスタンス経由で使う
  var random = Random();
  console.log(random.random()); // => 0.213308628232523
  //staticなクラスとして使う
  console.log(Random.random()); // => 0.2140182469072794
});

phina.util.Random(seed) (コンストラクター)

phina.util.Randomクラスのコンストラクターです。引数は乱数のシード(後述)です。引数は指定しなくても構いません。

  • constructor
  • Param:
    • seed: Number (シード)

インスタンス変数

seed

乱数のシードです。初期値は1です。
seedに任意の値をセットすることで、常に同じ結果が得られます。

  • default: 1

初期値は1ですが、コンストラクターが下記のような処理をするので、コンストラクターが呼ばれた際、コンストラクターの引数に置き換わります。コンストラクターの引数を指定していない場合、Date.now()になります。Date.now()が取得できなかった場合、1になります。

init: function(seed) {
  this.seed = seed || (Date.now()) || 1;
},

Example

phina.main(function() {
  var random = phina.util.Random();
  random.seed = 2;
  console.log(random.random()); // => 0.00012590037661741962
  console.log(random.random()); // => 0.03125834512320774
  random.seed = 2;
  console.log(random.random()); // => 0.00012590037661741962
});

random()は0~1の乱数を返すメソッドです。一度random()を実行すると、seedは変わってしまいます。(後述)

インスタンスメソッド

random()

0~1の乱数を返します。一度、random()を実行すると、seedは変わってしまいます。

  • Param: なし
  • Return: Number (0~1の乱数)

Example

phina.main(function() {
  var random = phina.util.Random();
  random.seed = 2;
  console.log(random.random()); // => 0.00012590037661741962
  console.log(random.random()); // => 0.03125834512320774
  random.seed = 2;
  console.log(random.random()); // => 0.00012590037661741962
});

一度randomを実行するとseedは変わってしまい、次に同じ数値はでないことが分かっていただけると思います。

randint(min, max)

指定された範囲内でランダムな整数値を返します。randint()は内部的にrandom()を使っているので、一度randint()を実行すると、seedは変わってしまいます。

  • Param:
    • min: Number (範囲の最小値)
    • max: Number (範囲の最大値)
  • Return: Number (ランダムな整数値)

Example

phina.main(function() {
  var random = phina.util.Random();
  console.log(random.randint(0, 100)); // => 54
  console.log(random.randint(0, 200)); // => 160
  console.log(random.randint(0, 300)); // => 258
});

randfloat(min, max)

指定された範囲内でランダムな数値を返します。randfloat()は内部的にrandom()を使っているので、一度randfloat()を実行すると、seedは変わってしまいます。

  • Param:
    • min: Number (範囲の最小値)
    • max: Number (範囲の最大値)
  • Return: Number (ランダムな数値)

Example

phina.main(function() {
  var random = phina.util.Random();
  console.log(random.randfloat(0, 100)); // => 18.711059312036042
  console.log(random.randfloat(0, 200)); // => 193.0835191609998
  console.log(random.randfloat(0, 300)); // => 193.0835191609998
});

randbool()

ランダムに真偽値を生成します。randbool()は内部的にrandint()を使っており、randint()は内部的にrandom()を使っているので、一度randbool()を実行すると、seedは変わってしまいます。

  • Param: なし
  • Return: Boolean (ランダムな真偽値)

Example

phina.main(function() {
  var random = phina.util.Random();
  console.log(random.randbool()); // => false
  console.log(random.randbool()); // => true
  console.log(random.randbool()); // => false
});

randarray(len, min, max)

任意の範囲でランダムな整数値を格納した任意の長さの配列を返します。randarray()は内部的にrandint()を使っており、randint()は内部的にrandom()を使っているので、一度randarray()を実行すると、seedは変わってしまいます。

  • Param:
    • len: Number (配列の長さ デフォルトは100)
    • min: Number (範囲の最小値 デフォルトは0)
    • max: Number (範囲の最大値 デフォルトは100)
  • Return: Array (配列)

Example

phina.main(function() {
  var random = phina.util.Random();
  console.log(random.randarray(5, 0, 100)); // => [98, 98, 49, 81, 75]
  console.log(random.randarray(10, 0, 100)); // => [45, 76, 98, 63, 24, 43, 23, 94, 57, 83]
  console.log(random.randarray(5, -20, 80)); // => [-15, 14, -8, 17, 34]
});

static変数

phina.util.Random.seed

※インスタンス変数のseedと同じです。
乱数のシードです。初期値は1です。
phina.util.Random.seedに任意の値をセットすることで、常に同じ結果が得られます。

  • default: 1

初期値は1ですが、コンストラクターが下記のような処理をするので、コンストラクターが呼ばれた際、コンストラクターの引数に置き換わります。コンストラクターの引数を指定していない場合、Date.now()になります。Date.now()が取得できなかった場合、1になります。

init: function(seed) {
  this.seed = seed || (Date.now()) || 1;
},

Example

phina.main(function() {
  phina.util.Random.seed = 2;
  console.log(phina.util.Random.random()); // => 0.00012590037661741962
  console.log(phina.util.Random.random()); // => 0.03125834512320774
  phina.util.Random.seed = 2;
  console.log(phina.util.Random.random()); // => 0.00012590037661741962
});

phina.util.Random.random()は0~1の乱数を返すメソッドです。一度phina.util.Random.random()を実行すると、phina.util.Random.seedは変わってしまいます。(後述)

staticメソッド

phina.util.Random.getSeed()

現在のシードを返します。

  • Param: なし
  • Return: Number (現在のシード)
  • static

Example

phina.main(function() {
  phina.util.Random.seed = 2;
  console.log(phina.util.Random.getSeed()); // => 2
});

phina.util.Random.setSeed(seed)

任意のシードをセットします。

  • Param:
    • seed: Number (任意のシード)
  • Return: Functionphina.util.Random自身)
  • static
  • chainable

phina.util.Random自身を返すのはメソッドチェーンができるようにするためです。

Example

phina.main(function() {
  phina.util.Random.setSeed(2);
  console.log(phina.util.Random.seed); // => 2
  console.log(phina.util.Random.setSeed(2).random()); // => 0.00012590037661741962
});

phina.util.Random.random()

※インスタンスメソッドのrandom()と同じです。
0~1の乱数を返します。一度、phina.util.Random.random()を実行すると、phina.util.Random.seedは変わってしまいます。

  • Param: なし
  • Return: Number (0~1の乱数)
  • static

Example

phina.main(function() {
  phina.util.Random.seed = 2;
  console.log(phina.util.Random.random()); // => 0.00012590037661741962
  console.log(phina.util.Random.random()); // => 0.03125834512320774
  phina.util.Random.seed = 2;
  console.log(phina.util.Random.random()); // => 0.00012590037661741962
});

一度phina.util.Random.random()を実行するとphina.util.Random.seedは変わってしまい、次に同じ数値はでないことが分かっていただけると思います。

phina.util.Random.randint(min, max)

※インスタンスメソッドのrandint(min, max)と同じです。
指定された範囲内でランダムな整数値を返します。phina.util.Random.randint()は内部的にphina.util.Random.random()を使っているので、一度phina.util.Random.randint()を実行すると、phina.util.Random.seedは変わってしまいます。

  • Param:
    • min: Number (範囲の最小値)
    • max: Number (範囲の最大値)
  • Return: Number (ランダムな整数値)
  • static

Example

phina.main(function() {
  console.log(phina.util.Random.randint(0, 100)); // => 54
  console.log(phina.util.Random.randint(0, 200)); // => 160
  console.log(phina.util.Random.randint(0, 300)); // => 258
});

phina.util.Random.randfloat(min, max)

※インスタンスメソッドのrandfloat(min, max)と同じです。
指定された範囲内でランダムな数値を返します。phina.util.Random.randfloat()は内部的にphina.util.Random.random()を使っているので、一度phina.util.Random.randfloat()を実行すると、phina.util.Random.seedは変わってしまいます。

  • Param:
    • min: Number (範囲の最小値)
    • max: Number (範囲の最大値)
  • Return: Number (ランダムな数値)
  • static

Example

phina.main(function() {
  console.log(phina.util.Random.randfloat(0, 100)); // => 18.711059312036042
  console.log(phina.util.Random.randfloat(0, 200)); // => 193.0835191609998
  console.log(phina.util.Random.randfloat(0, 300)); // => 193.0835191609998
});

phina.util.Random.randbool()

※インスタンスメソッドのrandbool()と同じです。
ランダムに真偽値を生成します。phina.util.Random.randbool()は内部的にphina.util.Random.randint()を使っており、phina.util.Random.randint()は内部的にphina.util.Random.random()を使っているので、一度phina.util.Random.randbool()を実行すると、phina.util.Random.seedは変わってしまいます。

  • Param: なし
  • Return: Boolean (ランダムな真偽値)
  • static

Example

phina.main(function() {
  console.log(phina.util.Random.randbool()); // => false
  console.log(phina.util.Random.randbool()); // => true
  console.log(phina.util.Random.randbool()); // => false
});

phina.util.Random.randarray(len, min, max)

※インスタンスメソッドのrandarray(len, min, max)と同じです。
任意の範囲でランダムな整数値を格納した任意の長さの配列を返します。phina.util.Random.randarray()は内部的にphina.util.Random.randint()を使っており、phina.util.Random.randint()は内部的にphina.util.Random.random()を使っているので、一度phina.util.Random.randarray()を実行すると、phina.util.Random.seedは変わってしまいます。

  • Param:
    • len: Number (配列の長さ デフォルトは100)
    • min: Number (範囲の最小値 デフォルトは0)
    • max: Number (範囲の最大値 デフォルトは100)
  • Return: Array (配列)
  • static

Example

phina.main(function() {
  console.log(phina.util.Random.randarray(5, 0, 100)); // => [98, 98, 49, 81, 75]
  console.log(phina.util.Random.randarray(10, 0, 100)); // => [45, 76, 98, 63, 24, 43, 23, 94, 57, 83]
  console.log(phina.util.Random.randarray(5, -20, 80)); // => [-15, 14, -8, 17, 34]
});

phina.util.Random.xor32(seed)

xorshiftを用いて疑似乱数列を生成します。

  • Param:
    • seed: Number (シード)
  • Return: Number (擬似乱数列)
  • static

Example

phina.main(function() {
  console.log(phina.util.Random.xor32(300)); // => 76916478
  console.log(phina.util.Random.xor32(600)); // => 153832925
  console.log(phina.util.Random.xor32(900)); // => 241235004
});

phina.util.Random.uuid()

uuidを生成して返します。
参考: https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript

  • Param: なし
  • Return: String (uuid)
  • static

Example

phina.main(function() {
  console.log(phina.util.Random.uuid()); // => 80a012c8-d693-4d43-9330-b20fad16ed8b
  console.log(phina.util.Random.uuid()); // => 8a100163-04ed-489f-aebf-0d531c81ca9c
});

プロパティ、メソッド一覧