IMG Class

サーバーにアップロードした PHP を呼び出すコードです。
<a href="http://maedakobe.rw.xsi.jp/php/img_main.php">IMG Class を使う</a><br>
次のリンクをクリックすると img_main.php が呼び出されます。
IMG Class を使う

プログラムの作成

  1. 石取りゲームで使用する img_class の定義と、img_class の使い方です。
    PHP Class の基礎は PHP gcm Class を参照して下さい。
    今回のプログラムは次のファイルで構成されています。
    Shift_JIS でタイプしてアップロードして下さい。
    1. img_class.php
      PHP で img_class を定義したファイルです。
    2. img_main.php
      最初に img_class.php を呼び出す PHP のファイルです。
      img_class が組み込まれています。
    3. img_action.php
      img_class の Form から呼び出される PHP のファイルです。
      img_class が組み込まれています。
  2. img_class.php の全ソースコードです。
    Constructor で Image File と Form から呼び出す PHP File を受け取ります。
    disp($n) 関数で一行に10個ずつ Image を並べて表示します。
    check() 関数で制御変数の値を表形式で印字します。
    call_play() 関数で Form にラジオボタンを設定して表示します。
    thinking() がコンピュータの思考関数ですが、今回は使いません。
    <?php
    class  img_class
    {
        var $file;          //Image File
        var $php;           //PHP Program
        var $val;           //取り除く石数
        var $num;           //山の石の数
        var $max;           //山から取る最大数
        // Constructor
        function img_class($file,$php)
        {   $this->file = $file;
            $this->php = $php;
        }
        // Image File を一行に10個並べて表示する
        function disp($n)
        {   print '<br>';
            for($i=0; $i<$n; $i++)
            {   print "<img src=\"$this->file\">\n";
                if ($i%10==9)     print '<br>';
            }
        }
        // 現在の設定値を表示
        function check()
        {
            print("<TABLE BORDER>");
            print("<TR><TD>取る数</TD><TD>$this->val</TD></TR>");
            print("<TR><TD>山の石</TD><TD>$this->num</TD></TR>");
            print("<TR><TD>最大数</TD><TD>$this->max</TD></TR>");
            print("</TABLE>");
        }
        // form の送信ボタンで取り除く石数を指定
        function call_play()
        {   print("<form action=\"$this->php\" method=\"get\">");
            $w= intval($this->max);
            if ($w>$this->num)      $w= $this->num;
            print("<input type=radio name=\"val\" value=1 CHECKED>1 個取る<br>\n");
            for($i=2; $i<=$w; $i++)
                print("<input type=radio name=\"val\" value=$i>$i 個取る<br>\n");
            print("<input type=\"hidden\" name=\"num\" value=$this->num>\n");
            print("<input type=\"hidden\" name=\"max\" value=$this->max>\n");
            print("<input type=\"submit\" value=\"送信\">\n");
            print("</form>");
        }
        // Computer が考える
        function thinking()
        {   $this->val= ($this->num+$this->max) % ($this->max+1);
            if ($this->val==0 || ((rand()%5==0) && $this->num>$this->max))
                $this->val= (rand() % $this->max) + 1;
            $this->num-= $this->val;
        }
    }
    ?>
    
  3. img_class.php を最初に呼び出す img_main.php です。
    require_once("img_class.php"); で img_class.php を取り込みます。
    new img_class("img/jewel.gif","img_action.php"); で img_class を生成します。
    "img/jewel.gif" が画像ファイルで、"img_action.php" が Form から呼び出される PHP のプログラムです。
    val, num, max に初期値を設定します。
    disp($n) 関数で一行に10個ずつ Image を並べて表示します。
    call_play() 関数で Form にラジオボタン設定して表示します。
    <html>
    <head><title>Img_Class を使う</title></head>
    <body>
      <h1>Img_Class を使います</h1>
      <?php
        require_once("img_class.php");
        $game= new img_class("img/jewel.gif","img_action.php");
        $game->val= 0;
        $game->num= rand()%20+10;
        $game->max= rand()%5+2;
        $game->disp($game->num);
        $game->call_play();
      ?>
    </body>
    </html>
    
  4. Form の"送信"ボタンのクリックで呼び出される img_action.php の全ソースコードです。
    require_once("img_class.php"); で img_class.php を取り込みます。
    new img_class("img/jewel.gif","img_action.php"); で img_class を生成します。
    "img/jewel.gif" が画像ファイルで、"img_action.php" が Form から呼び出される PHP のプログラムです。
    Form から渡されたパラメータを val, num, max で受け取ります。
    $game->num から $game->val を引いて、石の数を更新します。
    disp($n) 関数で一行に10個ずつ Image を並べて表示します。
    call_play() 関数で Form にラジオボタンを設定して表示します。
    check() 関数で制御変数の値を表形式で印字します。
    <html>
    <head><title>Action から呼ばれる</title></head>
    <body>
      <h1>Img_Class の Action から呼ばれます</h1>
      <?php
        require_once("img_class.php");
        $game= new img_class("img/jewel.gif","img_action.php");
        $game->val= $_GET["val"];
        $game->num= $_GET["num"];
        $game->max= $_GET["max"];
        if (isset($game->val))  $game->num-= $game->val;
        $game->disp($game->num);
        $game->call_play();
        $game->check();
      ?>
    </body>
    </html>
    
  5. img_main.php から最初の img_class.php が呼び出されます。
    img_main.php から呼び出された img_class.php の Form の"送信"ボタンがクリックされると img_action.php が呼び出されます。
    img_action.php の Form から"送信"ボタンをクリックしたらどうなるでしょう。
    当然のことながら action= で設定された img_action.php が呼び出されます。
    所で、呼び出したプログラムも img_action.php なら呼び出されたプログラムも img_action.php ですよね。
    これが再起コールで、HTML のゲームでは再起コールが繰り返されてゲームを進行する方法が良く使われます。
    何度かボタンをクリックして、再起コールを確かめて下さい。
    ゲームのルールを定めて、終了判定と勝敗が表示できたら石取りゲームの完成です。

前田稔の超初心者のプログラム入門
PHP Program