「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);