乱数

じゃんけん チョキ!(Reload してね)

ソース

<?php
  $janken[0] = "グー"; $janken[1] = "チョキ"; $janken[2] = "パー";
  $r = time() % 3;
  echo $janken[$r];
?>

解説

乱数とはでたらめな数のことです。

ここでは乱数といっても単に秒数を3で割って,余りが0なら「グー」,1なら「チョキ」,2なら「パー」としているだけです。

time() が1970年の元旦からの秒数を返す関数です。

$r = time() % 3; でそれを3で割った余りを $r に代入しています。

配列 $janken[0〜2] を作り,それで「グー」「チョキ」「パー」を表しています。

課題

「グー」「チョキ」「パー」だけでなく背景の色も変わります。 これはどうしているのでしょうか。

もっと乱数

PHP には a 以上 b 以下の乱数を返す関数 rand(a, b) があります。 これは乱数を初期化する関数 srand(x) を最初に呼び出してから使います。 srand(x) に与える整数 x によって乱数が決まります。 これを使ったソース例を挙げておきます。

<?php
  srand((double) microtime() * 1000000);
  $janken[0] = "グー"; $janken[1] = "チョキ"; $janken[2] = "パー";
  echo $janken[rand(0, 2)];
?>

microtime() は秒数のマイクロ秒以下です。 これを1000000倍したもので乱数を初期化しています。

もっと良い乱数として mt_rand(a, b) とそれを初期化する mt_srand(x) も PHP に備わっています。 これは Mersenne Twister を使うものです。

ただ,良い乱数の良さは多数回使わないとわかりません。 今回のように1回きりのものは,初期化の手順だけしか意味がありません。


奥村晴彦

Last modified: 2007-12-04 12:55:37