対戦型「石取りゲーム」

親と子がネートワークで接続して「石取りゲーム」をします。

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

プログラムの作成

  1. 親と子がインターネットのホームページから接続して、対戦型「石取りゲーム」をします。
    石取りゲームの説明は 石取りゲームのルール などを参照して下さい。
    対戦型ゲームの基本は 対戦型ネットゲームの基本 を参照して下さい。
    対戦型ネットゲームは、サインインから始まり手番の確認など、かなりプログラムは複雑です。
    複雑な割には、完成したプログラムは Java Applet に比べて「パッ」としません。 (;_;)
  2. プロジェクトのディクトリ構成です。
    C:\tomcat\webapps\ に game\ のフォルダーを作成してプロジェクトを格納します。
    +:フォルダー, ・:ファイル, *:生成されるファイルです。
    +game
        +WEB-INF
            +classes
                +mybean
                    ・isitori.java
                    *isitori.class
        +jsp
            ・gameguid.jsp
            ・gameopen.jsp
            ・gameplay.jsp
            ・gameclose.jsp
            ・stone.gif
    
  3. ソースプログラムです。
    ファイル名 説明
    isitori.java 石取りゲームの Object Class
    gameguid.jsp ゲームの説明と初期化を行う JSP
    gameopen.jsp 対戦相手を待ち合わせる JSP
    gameplay.jsp 交互にプレイする JSP
    gameclose.jsp 対戦成績を確認する JSP
  4. isitori.java をコンパイルして isitori.class を作成して下さい。
    C:\Users>cd C:\tomcat\webapps\game\WEB-INF\classes
    C:\tomcat\webapps\game\WEB-INF\classes>javac myclass\isitori.java
  5. "C:\tomcat\bin\tomcat7w.exe" を選択して、管理者として実行から apache-tomcat を起動します。
    WWW ブラウザを起動して下記の URL を張り付けて下さい。
    http://localhost:8080/game/jsp/gameguid.jsp
  6. 最初にサインインすると親で登録されます。
    次に新しいページを開いて、子でサインインして下さい。
    親と子がインターネットに接続して、交互にプレイをします。

プログラムの説明

  1. 対戦型ネットゲームでは、親と子などがインターネットで接続して、情報を交換しながらゲームを進めます。
    サーバーを介して、お互いに情報を交換しながらゲームを進めるので Java Applet のような即時性はありません。
    JSP では FORM を使って情報を入力するのですが、基本的に選択(入力)された値に従って新しいページに移動します。
    これをページの遷移(せんい)と言います。
    対戦型ネットゲームでは、ページの遷移(せんい)を繰り返してゲームが進行します。
  2. Beans を使うメリットは、このゲームに接続している全てのクライアントに共通の Object Class を提供することです。
    つまり、このゲームの isitori.class は、サインインしている全てのクライアントに対して一個しか存在しません。
    詳細は Serializable で永続化を確認する を参照して下さい。
    name をタイプしてサインインすると ArrayList list; に登録されます。
    ステージの管理は User ごとに int stage; で行います。
        class User
        {   String  name;       //名前
            int     stage;      //ステージ
            int     cnt;        //勝数
            boolean win;        //勝ちフラグ
            // User Constructor
            public User(String str)
            {   name= str;
                stage= 0;
                cnt= 0;
                win= false;
            }
        }
        // DATA AREA
        private ArrayList  list;
        
  3. クライアント毎の情報は User Class で管理するのですが、ステージに接続しているクライアントを識別するために、 ページが遷移(せんい)する度に name パラメータを渡します。
        <input type=text name=name
          <% out.println("value=\"" + name + "\"><br><br>"); %>
    
        String name= request.getParameter("name");
        if (name!=null) name= new String(name.getBytes("8859_1"),"Shift_JIS");
        
  4. JSP プログラムの各々の役割です。
    1. gameguid.jsp
      ゲームの説明とゲームの初期化です。
      ブラウザから起動される時と、gameclose.jsp から [再挑戦/終了] で呼ばれる時があります。
      [再挑戦/終了] の時は、前回のゲームの終了を確認してから、次のゲームを開始します。
    2. gameopen.jsp
      対戦相手を待ち合わせします。
      親と子がサインインするとゲームを開始します。
    3. gameplay.jsp
      ネット対戦型「石取りゲーム」をします。
      勝敗が決すると Close を呼びます。
    4. gameclose.jsp
      親と子の対戦成績を確認します。
      今回負けた方が [継続/終了] を選び、Guide に戻ります。

Java Game Program