PHP入門というシリーズ – 第六回

2019年10月6日

前回、for文での繰り返し処理について解説致しました。

第六回では、同じ繰り返しでもwhile文による処理について書いていきます。

RPGを想定してみる

while文は回数の決まっていない繰り返し処理をする時に使います。

その最たる例としてRPGの主人公が敵をやっつける時の事を想定してみましょう。

勇者DEMOYAの攻撃と敵のHPを考える

RPGは勇者が敵と戦い、敵のHPを削ってゼロにする事で勝利というパターンが多いわけですが、勇者の攻撃は毎回ランダムですよね。

ここでは、勇者DEMOYAは最大100のダメージを敵にランダムで与える事が出来、敵のHPは1000とします。

プログラム的に上記を考える

今回はとても理不尽な「勇者は攻撃を受けない」前提でまず考えましょう。つまり、一方的に敵がやられるというものですね。

まず、こう書いてみましょう。

<?php
$enemy_hp = 1000;

while($enemy_hp > 0){
    $demoya_attack = mt_rand(50, 100);
    echo "敵に".$demoya_attack."のダメージを与えた!<br>";
    $enemy_hp = $enemy_hp - $demoya_attack;
}
if($enemy_hp <= 0){
    echo "敵は力尽きた!";
}
?>

「敵に○○のダメージを与えた!」と表示され、最後に「敵は力尽きた!」となれば成功です。

画面を更新すると、力尽きるまでの回数が異なる事がわかると思います。

ざっくり解説

勇者の攻撃力はランダムなので、処理を繰り返す度にランダムで攻撃力を決めています。今回は最低でも50、最大で100の攻撃が出来るような設定にしました。

そして敵のHPは1000なので、勇者から受けた攻撃分引き算してあげればいいですね。

例えば1回目の攻撃が65だったら、1000 – 65 = 935が敵の残りHPになります。これを0以下になるまで繰り返せば、いつかは力尽きるというわけです。

勇者の攻撃をランダムで決めるmt_rand関数

ついでなので、今回使用したmt_randという関数も覚えておきましょう。

mt_rand関数を使えばランダムな数字を生成する事が出来ます。数字の範囲を決める事も出来ますが決めなければ0から32,768までの間でランダムな数字が生成されます(ちょっとこの32,768という数字は怪しい)

条件分岐で表示させる文字列を追加

最後に「敵は力尽きた!」とかなんとか表示させないとスッキリしないですよね。なので、今回は最後にif文を書いて、敵のHPが0を下回った時にだけ表示させる文字列を書きました。

もっとそれっぽくしたいなら

今回は非常に理不尽なゲームを作ってしまったので、ちゃんと勇者のHPも決めて敵からの攻撃も受けるという具合にすればよりそれっぽくなると思うので、是非考えてプログラムを変えてみて下さいね。

ではまた次回。。。