なんかちょっと、
ゲームっぽい物を作ってみたいなということで、
ゲームと言えばランダム要素が必要ですよね。
なので、ランダムな数値を返す関数を、
使ってみます。
mt_rand(MIN,MAX)
https://www.phpbook.jp/func/math/index1.html
MINからMAXの間の数値を、
ランダムに返す関数。
これを使って簡単に、
おみくじプログラムを作ってみた。
"omikuji.php" ======================================= <!DOCTYPE html> <head><title>おみくじ</title></head> <body> <?php if(!empty($_POST['type']) && $_POST['type'] == 'result'){ /* POSTデータ に"type='result'"がある場合は、くじを引いて結果を表示 */ $result = [ '大吉', '中吉', '吉', '末吉', '小吉', '凶', '大凶' ]; ?> <p>今回の結果は、</p> <p><?=$result[mt_rand(0,count($result)-1)] ?></p> <p><input type="button" onclick="location.href='omikuji.php'" value="戻る"></p> <?php } else { /* else TOP画面を表示 */ ?> <p>おみくじ</p> <p> <form method="POST" action="omikuji.php"> <input type="submit" value="引く"> <input type="hidden" name="type" value="result"> </form> </p> <?php } /* if-else 終わり*/?> </body> </html> =======================================
“大吉”~”大凶”の配列を作って、
0~(配列の要素数-1)の間で、ランダムな数を生成。
生成された数に応じた結果を表示させるプログラム。
結果はこんな感じで出ます。
素っ気ないですねw
ちなみに、このプログラムはこちら。
で、ここでやっぱり、
このmt_rand関数の実力というか、
本当にランダムなのか?
偏りとかは無いのか?
っていうのが気になりますよね。
なので、試しのプログラムを作って、
結果を見てみました。
<?php $parameter = 10000; // mt_randを実行する回数 $rand_min = 1; // MIN $rand_max = 10; // MAX $buf = array_pad(array(), $rand_max - $rand_min + 1, 0); for($i = 1; $i < $parameter; $i++){ $sample = mt_rand($rand_min,$rand_max); $buf[$sample - $rand_min]++; } ?> <!DOCTYPE html> <head> <title>mt_rand test</title> </head> <body> <table border="1"> <tr><th>No.</th><th>times</th><th>rate</th></tr> <?php for($i = $rand_min; $i <= $rand_max; $i++){ print("<tr align=\"right\"><td>".$i."</td>"); print("<td>".$buf[$i-$rand_min]."回</td>"); printf("<td>%.2f%%</td></tr>\n",$buf[$i-$rand_min]/$parameter*100); } ?> </table> </body> </html>
mt_rand関数の結果通り分のバッファ(配列)を作り、
結果の回数をカウントする。
で、結果の回数とその割合を出力します。
実際やってみた結果がこれです。(1~10で、実行回数10000回)
No. | times | rate |
---|---|---|
1 | 985回 | 9.85% |
2 | 1040回 | 10.40% |
3 | 1009回 | 10.09% |
4 | 967回 | 9.67% |
5 | 1027回 | 10.27% |
6 | 987回 | 9.87% |
7 | 996回 | 9.96% |
8 | 967回 | 9.67% |
9 | 1026回 | 10.26% |
10 | 995回 | 9.95% |
なんか、それとなく、
10±0.5%以内くらいで同じくらいの回数になってますね。
実行回数増やすと、
ばらつきがさらに少なくなります。
1000000回でやったら、±0.1%以内に収まりました。
ランダム性は確かということで。