JSP の数当てゲーム



乱数で設定した「1〜100」の数字を当てるゲームです。
このプログラムを起動するには apache-tomcat のインストールが必要です。

PHP のページからゲームを楽しむことが出来ます。
こちらは apache-tomcat に関係なく、実行することが出来るので試して下さい。

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

プログラムの作成

  1. プロジェクトのディクトリ構成です。
    C:\tomcat\webapps\ に game\ のフォルダーを作成してプロジェクトを格納します。
    +:フォルダー, ・:ファイル, *:生成されるファイルです。
    +game
        +jsp
            +num
                ・numguess.jsp
        +WEB-INF
            +classes
                +num
                    ・NumberGuessBean.java
                    *NumberGuessBean.class
    
  2. 数当てゲームの NumberGuessBean.java です。
    package num;
    
    import java.io.Serializable;
    import java.util.Random;
    
    public class NumberGuessBean implements Serializable
    {
        private int answer;
        private String hint;
        private int numGuesses;
        private boolean success;
        private Random random = new Random();
    
        public NumberGuessBean()
        {   reset();  }
    
        public int getAnswer()
        {   return answer;  }
    
        public void setAnswer(int answer)
        {   this.answer = answer;  }
    
        public String getHint()
        {   return "" + hint;  }
    
        public void setHint(String hint)
        {   this.hint = hint;  }
    
        public void setNumGuesses(int numGuesses)
        {   this.numGuesses = numGuesses;  }
    
        public int getNumGuesses()
        {   return numGuesses;  }
    
        public boolean getSuccess()
        {   return success;  }
    
        public void setSuccess(boolean success)
        {   this.success = success;  }
    
        public void setGuess(String guess)
        {   numGuesses++;
    
            int g;
            try
            {   g = Integer.parseInt(guess);  }
            catch (NumberFormatException e)
            {   g = -1;  }
    
            if (g == answer)
            {   success = true;  }
            else if (g == -1)
            {   hint = "a number next time";  }
            else if (g < answer)
            {   hint = "higher";  }
            else if (g > answer)
            {   hint = "lower";  }
        }
    
        public void reset()
        {   answer = Math.abs(random.nextInt() % 100) + 1;
            success = false;
            numGuesses = 0;
        }
    }
    
  3. numguess.jsp のソースコードです。
    NumberGuessBean.java を使って数当てゲームをします。
    <%@ page import = "num.NumberGuessBean" %>
    
    <jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/>
    <jsp:setProperty name="numguess" property="*"/>
    
    <html>
    <head><title>Number Guess</title></head>
    <body bgcolor="white">
    <font size=4>
    
    <% if (numguess.getSuccess()) { %>
    
      Congratulations!  You got it.
      And after just <%= numguess.getNumGuesses() %> tries.<p>
    
      <% numguess.reset(); %>
    
      Care to <a href="numguess.jsp">try again</a>?
    
    <% } else if (numguess.getNumGuesses() == 0) { %>
    
      Welcome to the Number Guess game.<p>
    
      I'm thinking of a number between 1 and 100.<p>
    
      <form method=get>
      What's your guess? <input type=text name=guess>
      <input type=submit value="Submit">
      </form>
    
    <% } else { %>
    
      Good guess, but nope.  Try <b><%= numguess.getHint() %></b>.
    
      You have made <%= numguess.getNumGuesses() %> guesses.<p>
    
      I'm thinking of a number between 1 and 100.<p>
    
      <form method=get>
      What's your guess? <input type=text name=guess>
      <input type=submit value="Submit">
      </form>
    
    <% } %>
    
    </font>
    </body>
    </html>
    
  4. NumberGuessBean.java をコンパイルして NumberGuessBean.class を作成して下さい。
    package num; を使っています。
    C:\tomcat\webapps\game\WEB-INF\classes をカレントに設定して、コンパイルして下さい。
    C:\Users>cd C:\tomcat\webapps\game\WEB-INF\classes
    C:\tomcat\webapps\game\WEB-INF\classes>javac num\NumberGuessBean.java
  5. "C:\tomcat\bin\tomcat7w.exe" を選択して、管理者として実行から apache-tomcat を起動します。
    WWW ブラウザを起動して下記の URL を張り付けて下さい。
    http://localhost:8080/game/jsp/num/numguess.jsp
  6. 「1〜100」の値が乱数で設定されています。
    数字をタイプして、ボタンをクリックして下さい。

プログラムの説明

  1. 乱数で設定した「1〜100」の数字を、何回で当てるかを競うゲームです。
    元は apache-tomcat のサンプルプログラムです。
    NumberGuessBean.java は数当てゲームの Beans Class です。
    answer が目的の数字で、reset() メソッドで設定します。
    hint はメッセージ(ヒント)の領域です。
    numGuesses は何回目かのカウントです。
    success はヒットしたときのフラグです。
        private int answer;
        private String hint;
        private int numGuesses;
        private boolean success;
        private Random random = new Random();
    
  2. reset() メソッドで answer に数を設定して、ゲームを開始します。
        public void reset()
        {
    
  3. setGuess(String guess) メソッドで、タイプした値と answer を比較して、大きいか小さいかを知らせます。
        public void setGuess(String guess)
        {
    
  4. NumberGuessBean.java を使ってゲームをする numguess.jsp です。
    numGuesses で応答回数をカウントするので scope="session" にします。
    scope="page" では、毎回領域がクリアされます。
    <jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/>
  5. property="*" で全ての領域に値を設定します。
    永続化されているときは、保存した状態が復元されます。
    このとき領域が宣言されている全てのプロパティに対して setメソッドを定義する必要があるようです?。
    <jsp:setProperty name="numguess" property="*"/>
  6. 状況によって、表示するメッセージが異なります。
    1. success == true
      正解したときです。
      ゲームを終了するか、続けるかの応答を求めます。
    2. numGuesses == 0
      ゲームを開始するときです。
    3. 不正解のときは、大きいか小さいかを知らせます。
  7. どんなケースでも、最大7回で当てる方法があるのですが、わかるでしょうか。 (^_^;)

Java Game Program