よろしくお願いいたします。
OS: Mac 10.15.4
簡単なRPGの戦闘シーンを再現したいと思っております。主人公と対象の敵(pinoko)との間で、戦闘コマンド選択後の表示に関して、質問させていただきます。
HTML
,CSS
のすべての内容等含めるとかなりの量となってしまいますので、一部割愛し、仕組みの箇所だけご質問させていただければと思います。
敵側のpinoko.php
ファイルはテスト的にクラスを作成し動作確認したところ、問題なく動いておりました。
現在は、battle.phpの画面から攻撃用の"echo"コマンド(紛らわしいですが、"攻撃する"意味合いでformタグの表示としております)
を選択すると、formより同一のファイルにname="attack"
をpost
形式で送り、同ファイルで$_REQUEST
より受け取った"attack"を元に攻撃用のランダム関数を呼び出す仕組みとなっております。
攻撃用コマンドをクリックするたびに動作は問題なく動いているのですが、この後、敵キャラとして実体化したpinokoの攻撃ターンに移り主人公の攻撃後に呼び出したいのですが、どのようにすれば良いのか見当がつきません。
主人公の攻撃用関数をreturn
させ、pinoko攻撃用の関数から呼び出せばいけるのかと思いましたが、returnされた時点でphpが終了してしまうためうまくいきませんでした。
印象としてはIF文と混ぜて
if(主人公攻撃関数が終わったら){
echo $pinoko->attack1();
}
のような形式にできれば良いのですが、関数が終わったら条件で関数を呼び出すことなどできるのでしょうか。
単に連続的に関数を呼び出すだけですと、攻撃表示されるdiv
内で主人公の攻撃メッセージとpinokoの攻撃メッセージが連結されてしまうだけなので、一度主人公の攻撃を終了し、pinokoの攻撃を文字として出力させたいのですが苦しんでおります。
html
1<body> 2 3 <div class="container"> 4 5 <div class="comment"> 6 <h1><font face="美咲ゴシック"> 7 <?php include_once("phpfile") ?> 8 </h1> 9 </div> 10 11 <div class="battle"> 12 <img src="pinoko.png" alt=""> 13 </div> 14 15 <div class="d-flex org-test"> 16 <div class="command"> 17 <ul> 18 <li><form action="battle.php" method="post"> 19 <input type="submit" value="echo" name="attack" ></li> 20 <li>スキル</li> 21 <li>どうぐ</li> 22 <li>にげる</li> 23 </ul> 24 </div> 25 26 <div class="party"> 27 <div class="main-char"> 28 <ul> 29 <li>主人公</li> 30 <li>HP:100</li> 31 <li>MP:100</li> 32 <li>職業:平民</li> 33 </ul> 34 </div> 35 </div> 36 37 </div> 38 39 </div> 40 41</body>
phpfile
1 <?php 2 include_once("pinoko.php"); 3 4 function attack() 5 { 6 $rand = rand(10, 50); 7 $rand = strval($rand); 8 $rand = mb_convert_kana($rand, "N"); 9 return "ひろしは ".$rand ." のダメージを与えた!!"; 10 } 11 12 if(isset($_REQUEST["attack"])){ 13 echo attack(); 14 } else { 15 echo "エラー発生"; 16 } 17 18 19 ?>
pinokophp
1<?php 2namespace BOUKEN\pinoko; 3use BOUKEN\pinoko as firstEnemy; 4 5class Pinoko{ 6 public $HP = 3000; 7 public $MP = 500; 8 9 public function attack1() { 10 return "50のダメージ!!"; 11 } 12 13 public function attack2() { 14 return "100のダメージ!!"; 15 } 16 17 public function attack3() { 18 return "150のダメージ!!"; 19 } 20 21 public function attack4() { 22 return "200のダメージ!!"; 23 } 24 25} 26 27$pinoko = new Pinoko(); 28 29?> 30