Login Class

ネット対戦ゲームでプレイヤーのログインで使用する Login Class とデータファイルの仕様です。

データファイルの仕様

  1. ネット対戦ゲームでは、ゲームそのものよりもサーバーを介して情報をやり取りする処理が面倒です。
    クライアント間で参照するデータは、当然ながらサーバー上に置いて不規則に更新されます。
    ネット対戦ゲームのベースとなる Login Class の説明です。
    Login class では、じゃんけんゲームの TEXT 形式のファイル(jyanken.txt)を借用することにします。
  2. Login class で書き出す jyanken.txt の形式です。
    jyanken.txt をサーバーにアップロードして、書き込みと読み込み属性を許可して下さい。
    内容は初期化されるので、何が書かれていてもかまいません。
    名前 説明
    $state ゲームの進行状態
    $id_a プレイヤーAのID
    $id_b プレイヤーBのID
  3. $state でゲームの進行を管理します。
    1. $state : 0
      プレイヤーAとプレイヤーBがログインするのを待っている状態
    2. $state : 1
      二人のプレイヤーがログインして、ゲームを開始できる状態
    3. $state : 9
      ゲームを終了する
  4. $id_a, $id_b はプレイヤーのID(ニックネーム)で、初期値として '-' を設定します。
    即ち '-' が設定されている間はプレイヤーがログインしていないことになります。

Login Class の説明

  1. login_class.php のソースコードです。
    <?php
    header("Content-Type: text/html; charset=Shift_JIS");
    class  login_class
    {
        var $state;         //Game State
        var $id_a;          //ID A
        var $id_b;          //ID B
    
        // Constructor
        function login_class()
        {   $this->state= 0;
            $this->id_a = '-';
            $this->id_b = '-';
        }
        // $file に現在のパラメータを書き込みます
        function  put_file()
        {   if (!($fp = fopen("jyanken.txt","w")))
            {   die("jyanken.txt write open error");  }
            flock($fp,LOCK_EX);
            fputs($fp,"$this->state\r\n");
            fputs($fp,"$this->id_a\r\n");
            fputs($fp,"$this->id_b\r\n");
            flock($fp,LOCK_UN);
            fclose($fp);
        }
        // $file からパラメータを読み込みます
        function  get_file()
        {   if (is_file("jyanken.txt")==FALSE)
            {   die("jyanken.txt not found");  }
            if ($fp = fopen("jyanken.txt","r"))
            {   $this->state  = intval(fgets($fp));
                $this->id_a   = fgets($fp);
                $this->id_b   = fgets($fp);
                $this->id_a = str_replace(array("\r", "\n"), '', $this->id_a);
                $this->id_b = str_replace(array("\r", "\n"), '', $this->id_b);
                fclose($fp);
            }
        }
        // 現在の設定値を表示
        function check($id, $play)
        {   print "<table border='1'>";
            print "<tr><th>ID</th><th>PLAY</th><th>ST</th><th>ID_A</th><th>ID_B</th></tr>";
            print "\n<tr>";
            print "<td>$id</td>";
            print "<td>$play</td>";
            print "<td>$this->state</td>";
            print "<td>$this->id_a</td>";
            print "<td>$this->id_b</td>";
            print "</tr></table><br>\n";
        }
        // 進行状態を調べてゲームを実行
        function action($id, $play)
        {   switch($this->state)
            {   case 0:     // プレイヤーのログイン
                    if ($this->id_a=='-')   $this->id_a= $id;
                    if ($this->id_a!=$id && $this->id_b=='-')   $this->id_b= $id;
                    if ($this->id_a=='-' || $this->id_b=='-')   break;
                    $this->state = 1;
                    break;
                case 1:     // プレイヤーがそろう
                    break;
                default:
                    print "** GAME OVER **<br>\n";
                    exit();
            }
            $this->put_file();
        }
        // form の送信ボタンで PHP をコール
        function form_call($id, $msg)
        {   print "$id:$msg<br>\n";
            print "<form action='jyanken_login.php' method='get'>";
            print "<input type=text name='id' value=\"$id\"><br><br><br>";
            print "<input type=radio name='play' value=3 CHECKED>ログイン<br>\n";
            print "<input type=radio name='play' value=4>リセット<br>\n";
            print "<input type=submit value='送信'>";
            print "</form>";
        }
        // $state に従ったメッセージを設定する
        function message()
        {   switch($this->state)
            {   case 0: return "二人のプレイヤーがログインして下さい";
                case 1: return "プレイヤーがそろいました";
                case 9:     return "** GAME OVER **";
                default:    return "* state error *: $game->state";
            }
        }
    }
    ?>
    
  2. login_class.php の制御変数です。
        var $state;         //Game State
        var $id_a;          //ID A
        var $id_b;          //ID B
    
  3. $state でゲームの進行を管理します。
  4. login_class で定義されている関数の説明です。

[Next Chapter ↓] Jyanken Login

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