シヴァのブログ

UnityやUE4や趣味とかいろいろ...

「Cocos2d-x」Randについて

c++でのrand()についてメモ。


※以下に[x, y]と書かれている場合、xからyまでの値を意味する。

[1, 6]をランダムに決める

はじめに、rand()は[0, 32767]の値をランダムで取れる。
もし、サイコロの目[1, 6]をランダムでとりたい場合、方法として割り算の余りを使用する。
rand()を「6」で割ると余り[0, 5]になる。
つまり、「rand() % 6」 と書くことで[0, 5]の値を取ることができる。
このままでは、サイコロの数値[1, 6]とは異なり、「1」足りない。
なので、「rand() % 6 + 1」とすることで[1, 6]の値を取ることができる。

int rNum = rand() % 6 + 1;
[5, 10]をランダムに決める
int rNum = rand() % 6 + 5;
[1, 16]から13を省く数値ををランダムに決める

1-16までの乱数を生成し、13だけを選択から除外する場合
①1-15 の乱数を作る(rand() % 15 + 1)
②乱数の関数から得られた結果を確認し、13 以上であれば + 1 する

int rNum = rand() % 15 + 1;
if ( rNum >= 13 ) {
	rNum++;
}


[追記]

エラーについて

error CS0104: `Random' is an ambiguous reference between `UnityEngine.Random' and `System.Random'

原因:
プログラム内でusingを「UnityEngine」と「System」を使用しているから、
UnityEngine.Randomを使いたいのか、System.Randomを使いたいのかハッキリしろっていうエラー。

using UnityEngine;
using System;

...

int rNum = Random.Range(0, 5);

解決方法:
以下のように指定する。

int rNum = UnityEngine.Random.Range(0, 5);