解説
乱数(擬似乱数)を使うと、ゲームのキャラクターの動きやイベントの確率を調整したり、
アプリケーションのテストで様々な値を投入できて便利です。
ポイント
- srand関数で乱数を初期化する
- 初期化しないと、毎回同じ乱数列を取得してしまいます。
- rand関数で擬似乱数を取得する
- rand()関数の戻り値が擬似乱数なので、お好きなように
- 余りを求める事で、乱数の範囲を自分の好みに調整できます
- rand() % 6; // サイコロ風 0 ~ 5
- rand() % 100; // 百分率 0 ~ 99
- rand() % 80 + 20; // 20 ~ 99 半端な範囲を求める時は、余りを求めて少し数字を足します
- rand() % 24; // 手持ちの24個の駒から、ランダムに動かす駒を決めたりもできます
- if (rand() % 100 < 20) { ... } // 20%の確率で発生するイベントの管理
- if (rand() % 100 < x) { ... } // 確率x(0 ~ 100%)で発生するイベントの管理
// 乱数を使ってみよう
// ポイント1.srand関数で乱数を初期化する
// 初期化しないと、毎回同じ乱数列を取得してしまいます。
// ポイント2.rand関数で擬似乱数を取得する
// rand()関数の戻り値が擬似乱数なので、お好きなように
// ポイント3.余りを求める事で、乱数の範囲を自分の好みに調整できます
// rand() % 6; // サイコロ風 0 ~ 5
// rand() % 100; // 百分率 0 ~ 99
// rand() % 80 + 20; // 20 ~ 99 半端な範囲を求める時は、余りを求めて少し数字を足します
// rand() % 24; // 手持ちの24個の駒から、ランダムに動かす駒を決めたりもできます
// if (rand() % 100 < 20) { ... } // 20%の確率で発生するイベントの管理
// if (rand() % 100 < x) { ... } // 確率x(0 ~ 100%)で発生するイベントの管理
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
int main(void) {
int i, r, x, c;
// ポイント1.srand関数で乱数を初期化する
srand(time(NULL ));
// ポイント2.rand関数で擬似乱数を取得する
// 無加工 0~RAND_MAX
printf("無加工 0~%d\n", RAND_MAX);
for (i = 0; i < 10; i++) {
r = rand();
printf("%d, ", rand());
}
printf("\n\n");
// ポイント3.余りを求める事で、乱数の範囲を自分の好みに調整できます
// rand() % 6; // サイコロ風 0 ~ 5
printf("サイコロ風 0~5\n");
for (i = 0; i < 10; i++) {
r = rand() % 6;
printf("%d, ", r);
}
printf("\n\n");
// rand() % 100; // 百分率 0 ~ 99
printf("100分率 0~99\n");
for (i = 0; i < 10; i++) {
r = rand() % 100;
printf("%d, ", r);
}
printf("\n\n");
// rand() % 80 + 20; // 20 ~ 99 半端な範囲を求める時は、余りを求めて少し数字を足します
printf("100分率 0~99\n");
for (i = 0; i < 10; i++) {
r = rand() % 70 + 20;
printf("%d, ", r);
}
printf("\n\n");
// rand() % 24; // 手持ちの24個の駒から、ランダムに動かす駒を決めたりもできます
for (i = 0; i < 3; i++) {
r = rand() % 24;
printf("%d番の駒を動かします\n", r);
}
printf("\n");
// if (rand() % 100 < 20) { ... } // 20%の確率で発生するイベントの管理
printf("20%%の確率で発生するイベントです。\n");
c = 0;
for (i = 0; i < 100; i++) {
if (rand() % 100 < 20) {
printf("!");
c++;
}
}
printf("\n100回中%d回イベントが発生しました。\n\n", c);
// if (rand() % 100 < x) { ... } // 確率x(0 ~ 100%)で発生するイベントの管理
x = rand() % 100;
c = 0;
printf("%d%%の確率で発生するイベントです。\n", x);
for (i = 0; i < 100; i++) {
if (rand() % 100 < x) {
printf("!");
c++;
}
}
printf("\n100回中%d回イベントが発生しました。\n\n", c);
return EXIT_SUCCESS;
}
実行結果 ※実行するたびに実行結果が変わります
無加工 0~32767
19571, 11130, 6519, 27779, 25295, 15893, 3947, 24267, 29651, 29063,
サイコロ風 0~5
2, 1, 2, 4, 1, 1, 4, 4, 3, 2,
100分率 0~99
32, 31, 40, 4, 55, 70, 97, 33, 15, 81,
半端な範囲 20~99
38, 61, 70, 66, 34, 73, 66, 59, 30, 68,
4番の駒を動かします
7番の駒を動かします
18番の駒を動かします
20%の確率で発生するイベントです。
!!!!!!!!!!!!!!!!!!!!!!
100回中22回イベントが発生しました。
3%の確率で発生するイベントです。
!!!!!!
100回中6回イベントが発生しました。
ideone サンプルをコピペできたりして便利です
最終更新:2012年09月23日 23:44