サーバーにアップロードした石取りゲームを呼び出すコードです。
<a href="http://maedakobe.rw.xsi.jp/php/ishitori.php">石取りゲーム</a><br>
次のリンクをクリックすると石取りゲームが呼び出されます。
石取りゲーム

石取りゲームの説明

  1. 石取りゲームのルールです。
  2. 実はこのゲームは IMG Class が作成出来た時点でほぼ完成しています。
    後はゲームのルールを定めて、終了の判定と勝敗を表示するだけです。
    勝敗の判定は、プレイヤーが石を取り除いた状態で「全ての石が無くなっていればコンピュータの勝ち」で「一個だけ残っていればコンピュータの負け」です。
  3. isitori.php の全ソースコードです。
    Shift_JIS でタイプしてアップロードして下さい。
    img_class のコンストラクタで、石の画像と Form から呼び出す isitori.php を渡します。
    IMG Class では、 最初の呼び出し(img_main.php)と二度目以降の呼び出し(img_action.php)を分けていましたが、これを統合して isitori.php を作成します。
    if (!isset($game->val)) で最初の呼び出しか、二度目以降の呼び出しかを判定します。
    <html>
    <head><title>石取りゲーム</title></head>
    <body>
      <h1>石取りゲームのページ</h1>
      あなたとコンピュータが石取りゲームで対戦します。<br>
      最後の石を取らされた方が負けです。<br>
      <hr><br>
      <?php
        require_once("img_class.php");
        $game= new img_class("img/jewel.gif","isitori.php");
        $game->num= $_GET["num"];
        $game->max= $_GET["max"];
        $game->val= $_GET["val"];
        if (!isset($game->val))     $game->val= 0;
        $game->num-= $game->val;
        $wval= $game->val;
        $wnum= $game->num;
        if ($wval<1 || $wnum<=1)
        {   $game->num= rand()%20+10;
            $game->max= rand()%5+2;
        }
        else    $game->thinking();
        $game->call_play();
        $game->disp($game->num);
        if ($wval>0)
        {   print("<hr><br>あなたがプレイ後の山の石です<br>");
            if ($wnum==0)
                print("<font size=5 color=#F00000>私の勝ちです。</font>");
            if ($wnum==1)
                print("<font size=5 color=#00F000>あなたの勝ちです。</font>");
            $game->disp($wnum);
        }
        print("<hr><br>");
        $game->check();
      ?>
    
    </body>
    </html>
    
  4. Computer が考える思考メソッドです。
    思考メソッドと言っても必勝法は簡単に計算できます。
    あまり強すぎると面白くないので、5回に一度の割合で乱数を使ってプレイします。
        // 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;
        }
    
  5. JavaScript でも同様のプログラム 石取ゲーム を作成しています。
    但し、JavaScript はクライアントサイドで動作するのに対して PHP はサーバーサイドで動作します。

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