「C言語/サンプル/乱数を使ってみよう」の編集履歴(バックアップ)一覧はこちら

C言語/サンプル/乱数を使ってみよう」(2012/09/23 (日) 23:44:45) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*** 解説 C言語で乱数を扱うサンプルです。 乱数(擬似乱数)を使うと、ゲームのキャラクターの動きやイベントの確率を調整したり、 アプリケーションのテストで様々な値を投入できて便利です。 ポイント + 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%)で発生するイベントの管理 *** サンプルソース &ref(rand.c) #highlight(c){{ // 乱数を使ってみよう // ポイント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; } }} *** 実行結果 ※実行するたびに実行結果が変わります #highlight(){{ 無加工 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 サンプルをコピペできたりして便利です http://ideone.com/c5ELa
*** 解説 C言語で乱数を扱うサンプルです。 乱数(擬似乱数)を使うと、ゲームのキャラクターの動きやイベントの確率を調整したり、 アプリケーションのテストで様々な値を投入できて便利です。 ポイント + 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%)で発生するイベントの管理 *** サンプルソース &ref(rand.c) #highlight(c){{ // 乱数を使ってみよう // ポイント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; } }} *** 実行結果 ※実行するたびに実行結果が変わります #highlight(){{ 無加工 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 サンプルをコピペできたりして便利です http://ideone.com/c5ELa

表示オプション

横に並べて表示:
変化行の前後のみ表示: