RPG データベース

RPG ゲームで使用するデータベースのテストです。

"rpg.db" の設計

  1. 本格的な RPG ゲームでは、専用のゲームサーバーを立ち上げるのでしょうが、今回は私がお借りしている PHP が起動するサーバーを使って「どこまで動くか挑戦」してみます。
    最初の目標は「3人のクライアントが接続して、アバターに見立てた GIF 画像をキーで操作」するプログラムです。
    開発環境は Windows 10 & PHPサーバー & Javascript & Data Base(SQLite) です。
    単独で画像をキーで操作するプログラムは キーで画像を移動 を参照して下さい。
  2. 3人のクライアントがサーバーを介して情報を交換する "rpg.db" を設計します。
    "rpg.db" に記録するアイテムです。
  3. データベース(rpg.db) のテストプログラム(rpg_db.php)です。
    utf-8 でタイプしてアップロードして下さい。
    Data Base の基本は SQLite Data Base を作成 を参照して下さい。
    <html>
    <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <title>rpg.db のテスト</title></head>
    <body>
    <?php
        function dbcheck()
        {   $db = new SQLite3('rpg.db');
            $results = $db->query('select * from table1');
            print("<table border='1'>");
            print("<tr><th>ID</th><th>IMG</th><th>NAME</th><th>X</th><th>Y</th></tr><tr>");
            while($row = $results->fetchArray())
            {   print("<td>$row[id]</td>");
                print("<td>$row[img]</td>");
                print("<td>$row[name]</td>");
                print("<td>$row[x]</td>");
                print("<td>$row[y]</td></tr>");
            }
            print("</table>\n");
            $db->close();
        }
        $x = time()%100;
        $str = "update table1 set x=$x,y=300 where id='AA'";
        print "$str<br>\n";
        $flag = file_exists('rpg.db');
        $db = new SQLite3('rpg.db');
        if ($flag==false)
        {   $db->exec('create table table1(id text,img text,name text,x int,y int)');
            $db->exec("insert into table1 values('AA','img/anime1.gif','Dog1',200,100)");
            $db->exec("insert into table1 values('BB','img/anime2.gif','Dog2',300,100)");
            $db->exec("insert into table1 values('-','img/anime3.gif','Dog3',400,100)");
        }
        else
        {   $db->exec($str);  }
        $db->close();
        dbcheck();
    ?>
    </body>
    </html>
    
  4. rpg_db.php の説明です。
    dbcheck() はゲームには直接関係しない "rpg.db" の記録を表形式で印字する関数です。
  5. "rpg.db" が存在する時は id='AA' のレコードの更新テストをします。
    $str がレコードを更新するソースコードです。
        $x = time()%100;
        $str = "update table1 set x=$x,y=300 where id='AA'";
    
  6. new SQLite3('rpg.db'); で 'rpg.db' を開きます。
    'rpg.db' が存在しないときは新規に作成され、存在するときは開かれます。
    最初は 'rpg.db' を削除して(存在しない状態)で初めて下さい。
  7. 'rpg.db' を新規に作成するするときのソースコードです。
    プレイヤーの ID は 'AA', 'BB', '-' とします。
    アバターのイメージはページ先頭の GIF 画像です。
        $db->exec('create table table1(id text,img text,name text,x int,y int)');
        $db->exec("insert into table1 values('AA','img/anime1.gif','Dog1',200,100)");
        $db->exec("insert into table1 values('BB','img/anime2.gif','Dog2',300,100)");
        $db->exec("insert into table1 values('-','img/anime3.gif','Dog3',400,100)");
    
  8. 'rpg.db' が存在するときは、レコードの更新テストをします。
    id='AA' のレコードのX座標とY座標を更新してみました。
        $str = "update table1 set x=$x,y=300 where id='AA'";
          ・・・
        $db->exec($str);
    
  9. $db をクローズして、dbcheck(); 関数で確認します。
        $db->close();
        dbcheck();
    

[Next Chapter ↓] RPG Class
[Previous Chapter ↑] キーで画像を移動

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