[PHP]random関数で「おみくじ」を作る
今回はPHPにおけるrandom関数の備忘録です。
random関数を学習したおかげでできることの幅が広がった気がするのでゲーム作りに挑戦してみたいと思います。
(かなりしょぼいですが、初心者にはちょうどいいと思ったので)
今回、おみくじを2種類作ります。
一つはシンプルなおみくじで、もう一つは確立を考えたおみくじを作ります。
シンプルなおみくじ
シンプルなおみくじを作るにあたって次の手順で行います。
omikujiリストを作る。(大吉、中吉、小吉、末吉、凶、大凶)
omikujiリストの要素数をcount()で取得する。
rand(0, $count - 1)で乱数を取得し、変数$numに代入する。
omikuji[$num]として、結果を出力
// おみくじのリストを作成
$omikuji = ['大吉', '中吉', '小吉', '末吉', '凶', '大凶'];
これでomikujiリストを作れました。(簡単ですね)
// おみくじリストの要素数を取得
$count = count($omikuji);
count(リスト名)でリストの要素数を取得できます。今回の場合$countには6が代入されています。
// 0~5までの乱数を取得
$num = rand(0, $count - 1);
ここで本日主役のrand()関数を使いますが注意点があります。
rand()は引数に返す値の最小値と最大値を渡すため、rand(0, $count)としてしまうと0~6までの整数値を取得するため、6が出た場合$omikuji[6]としたときにエラーが発生してしまいます。そのため、最大値を$count - 1としています。
$result = $omikuji[$num];
omikuji[$num]とすることでomikujiリストのインデックス$num番目を取得できるます。$numが2のときはomikuji[2]となり結果は小吉となります。
(リストの1番目の要素のインデックス番号は0なので注意)
これでおみくじアプリを作ることができました。さいごにソースコードをまとめておきます。
$omikuji = ['大吉', '中吉', '小吉', '末吉', '凶', '大凶'];
$count = count($omikuji);
$num = rand(0, $count - 1);
$result = $omikuji[$num];
echo $result;
/* 実行結果 */
大吉
確率を考慮したおみくじ
先ほどのおみくじは中身がすべて同じ確率でしたが、大吉は10%、小吉は30%のように確率をそれぞれ操作したい場合を考えたおみくじを作ってみます。
手順は以下です。
rand()で1~100までの乱数を取得する。
if構文を使ってそれぞれの確立を指定する。
結果を$resultに代入。
// 1~100までの整数型乱数を取得する。
$num = rand(1, 100);
rand(1, 100)で1~100までの乱数を取得できます。
if($num <= 10): // 10%で大吉
$result = '大吉';
elseif($num <= 25): // 15%で中吉
$result = '中吉';
elseif($num <= 55): // 30%で小吉
$result = '小吉';
elseif($num <= 75): // 20%で末吉
$result = '末吉';
elseif($num <= 90): // 15%で凶
$result = '凶';
else: // 10%で大凶
$result = '大凶';
endif;
乱数を1~100にすることで1~10を大吉、11~25を中吉のようにそれぞれの確立を設定することができます。
大吉 1~10の10%
中吉10~25の15%
小吉 26~55の30%
末吉 56~75の20%
凶 76~90の15%
大凶 91~100の10%
他にもスマートな書き方があると思いますが、如何せん僕はまだまだPHP初学者なのでこれくらいしか思いつきませんでした。最後にソースコードをまとめておきます。
$num = rand(1, 100);
if($num <= 10):
$result = '大吉';
elseif($num <= 25):
$result = '中吉';
elseif($num <= 55):
$result = '小吉';
elseif($num <= 75):
$result = '末吉';
elseif($num <= 90):
$result = '凶';
else:
$result = '大凶';
endif;
echo $result;
/* 実行結果 */
小吉
PHPの学習を始めてまだ1週間も経過してませんが、noteを使ってアウトプットすることで僕含め、少しでも皆さんの役に立てればと思います。
以上です。
この記事が気に入ったらサポートをしてみませんか?