数字当てプログラム

HOME   >   数字当てプログラム >   StepByStep(Session 版)

数字当てプログラム(Session版)はじめに

1)このStepByStep方式による実践型プログラミング演習を開始する前に以下の内容に目を通してください。
  ・数字当てゲームの概要
2)StepByStep方式による実践型プログラミング演習では、Step順に進めます。
3)各Stepが何を求めているか(仕様)をしっかり理解します。

★ <<ポイント: 数字当てプログラム(Request版との違い>>
数字当てプログラム(Request版とは、正解数の次画面への引継ぎ方法が違います。
具体的にはStep6で違いが出てきますので、詳細はStep6で解説します。
Step1~Step5までは、Request版とほぼ同じソースコードになります(ロジックは同じですが、
ファイル名が違うだけです)。
【使用方法】
・ここをクリックすると、以下の全Stepを開いたり閉じたりします。
  [Click here to Open/Close for all steps]
・以下のStepタイトルをクリックすると、そのStepを開いたり閉じたりします。

Eclipseディレクトリ準備

  • Eclipseを起動します。
  • PHPプロジェクトを作成します。 プロジェクト名は「php_名字のローマ字」とします。
     ex)名字が「神田」の場合は「php_kanda」
     もし 同名のプロジェクトがすでにあれば、スキップします。
  • フォルダを作成します。 フォルダ名は、「kandait_exercise」とします。
     もし 同名のフォルダ名があれば、スキップします。
  • フォルダを作成します。 フォルダ名は、「number_hit_session」とします。
     もし 同名のフォルダ名があれば、スキップします。
  • ファイルを作成します。 ファイル名は、「GuessNumSessionS01.php」とします。
    必要に応じて同様にGuessNumSessionS01.php、GuessNumSessionS02.php、・・・、
    GuessNumSessionS06.phpもここに作成してください。



Step1:正解の判定

Stepの概要

 変数に正解数値と予想数値を代入し、予想数値が正解数値かどうか判断する処理を作成する。

Stepの前提条件

 当スクールの「PHP入門基礎講座-条件によって処理を変える」までを終了、または同等知識をお持ちの方。

Stepの目的

 if~if else文を習得し、判定処理の流れを理解します。

Stepのキーワード

 文字列表示 変数 条件文(if、if-else)

Stepの仕様

 1)正解数値に「5」、予想数値に「7」を設定し、予想数値が正解数値より大きい場合のメッセージを出力する。
 2)正解数値に「5」、予想数値に「2」を設定し、予想数値が正解数値より小さい場合のメッセージを出力する。
 3)正解数値に「5」、予想数値に「5」を設定し、当たりのメッセージを出力する。

Stepの手順

 1)PHPファイルを作成する
  ・Eclipse準備で作成した「number_hit_session」フォルダの下に「GuessNumSessionS01.php」ファイルを新規
   作成する。


 2)実行結果画面のようになるプログラムを1)で作成した「GuessNumSessionS01.php」に作成する。
 3)テスト実施とエビデンスを作成する。
  ・実行結果画面の通りになる事を確認しエビデンスを作成する。
 4)作成物の提出を行う。(提出方法はこちらをクリックしてください)
・プロジェクトファイル    必須
・ソースコードチェックリスト 当ステップではスキップする(Step6にて実施・提出)
・テストケース 当ステップではスキップする(Step6にて実施・提出)
・エビデンス 必須

Stepの実行結果

 【実行URL】
 http://localhost/php_xxxxxx/kandait_exercise/number_hit_session/GuessNumSessionS01.php
 ※xxxxxxの部分は名字です。

 【予想数『7』・正解数『5』の場合】

 【予想数『2』・正解数『5』の場合】

 【予想数『5』・正解数『5』の場合】

StepのHINT(How to Program)

  1)正解数の変数を「$ansNum」、予想数の変数を「$userNum」とします。
  2)文字列や変数を表示するには、「echo」もしくは「print」を使用します。
  ex)
 echo "予想数".$userNum. "<br>¥n";
  3)if文を使い、「$ansNum > $userNum」の場合は「$userNumより大きいです。」、
    「$ansNum < $userNum」の場合は「$userNumより小さいです。」、
    「$ansNum == $userNum」の場合には、「!!大当たり!!」を表示させます。
    ★数字当てプログラム(Request版)Step1と同じソースになります。
ページの先頭へ

Step2:予想数を入力するフォームの作成

Stepの概要

 入力フォームより予想数値を取得し、予想数値が正解数値かどうか判断する処理を作成する

Stepの前提条件

 Step1の提出物を当スクールの指定メールアドレスに送付し終わっていること。

Stepの目的

 フォームのデータ受け渡しを習得します。

Stepのキーワード

 入力フォーム スーパーグローバル変数($_POST[])。

Stepの仕様

 Step1を以下の仕様に修正する。
 1)予想数値を入力フォームより取得し、正解数値と比較する。
 2)正解数値に「5」を設定し、入力フォームから取得した予想数値が正解数値より大きい場合、予想数値が正解数値より
   大きいというメッセージを出力する。
 3)正解数値に「5」を設定し、入力フォームから取得した予想数値が正解数値より小さい場合、予想数値が正解数値より
   小さいというメッセージを出力する。
 4)正解数値に「5」を設定し、入力フォームから取得した予想数値と正解数値が一致した場合、当たりのメッセージを出力する。

Stepの手順

 1)PHPファイルを作成する
  ・Eclipse準備で作成した「number_hit_session」フォルダの下に「GuessNumSessionS02.php」ファイルを新規作成する。


 2)実行結果画面のようになるプログラムを1)で作成した「GuessNumSessionS02.php」に作成する。
 3)テスト実施とエビデンスを作成する。
  ・実行結果画面の通りになる事を確認しエビデンスを作成する。
 4)作成物の提出を行う。(提出方法はこちらをクリックしてください)
・プロジェクトファイル    必須
・ソースコードチェックリスト 当ステップではスキップする(Step6にて実施・提出)
・テストケース 当ステップではスキップする(Step6にて実施・提出)
・エビデンス 必須

Stepの実行結果

 【実行URL】
 http://localhost/php_xxxxxx/kandait_exercise/number_hit_session/GuessNumSessionS02.php
 ※xxxxxxの部分は名字です。

 【初期画面】

 【プレーヤー数字入力】

 【結果表示クリック後:入力した数字が5より大きい場合】

 【結果表示クリック後:入力した数字が5より小さい場合】

 【結果表示クリック後:入力した数字が5の場合】

StepのHINT(How to Program)

 1)データの送信にはFormタグを使用し、methodはPOSTを使用します。
 2)テキストボックスのname属性は「player_value」とします。
 3)結果表示ボタンのtype属性をsubmitとし、結果表示ボタンをクリックすることにより、
   データを送信します。送信先は自分自身(GuessNumS2.php)です。
  ex)
 <form action="./GuessNumSessionS02.php" method="POST">
  0から9までの数値を入力して下さい。:<input type="text" name="player_value">
  <input type="submit" value="結果表示">
 </form>
 4)送信されたデータは、「$_POST["player_value"]」で受け取ります。
 5)受け取ったデータは、変数「$userNum」に格納し、表示します。
  ex)
$userNum=$_POST["player_value"];

  ★数字当てプログラム(Request版)Step2とほぼ同じソースになりますが、入力フォームのaction属性の
   ファイル名に気をつけてください。

ページの先頭へ

Step3:入力した予想数のエラー判定

Stepの概要

 予想数に0より小さいか10以上の数値が入力された場合、エラーメッセージを表示させる

Stepの前提条件

 Step2の提出物を当スクールの指定メールアドレスに送付し終わっていること。

Stepの目的

 if~if else文の条件を追加し、エラー処理の流れを習得します。

Stepのキーワード

 条件文(if、if-else)

Stepの仕様

 1)ブラウザの入力フォームから入力された数値が0より小さいか10以上の場合、以下のエラーメッセージを表示する。
   →「エラー!!0から9の数字ではありません

Stepの手順

 1)PHPファイルを作成する
  ・Eclipse準備で作成した「number_hit_session」フォルダの下に「GuessNumSessionS03.php」ファイルを新規
  作成する。


 2)実行結果画面のようになるプログラムを1)で作成した「GuessNumSessionS03.php」に作成する。
 3)テスト実施とエビデンスを作成する。
  ・実行結果画面の通りになる事を確認しエビデンスを作成する。
 4)作成物の提出を行う。(提出方法はこちらをクリックしてください)
・プロジェクトファイル    必須
・ソースコードチェックリスト 当ステップではスキップする(Step6にて実施・提出)
・テストケース 当ステップではスキップする(Step6にて実施・提出)
・エビデンス 必須

Stepの実行結果

 【実行URL】
 http://localhost/php_xxxxxx/kandait_exercise/number_hit_session/GuessNumSessionS03.php
 ※xxxxxxの部分は名字です。

 【初期画面】

 【プレーヤー数字入力】

 【結果表示クリック後:入力した数字が5より大きい場合】

 【結果表示クリック後:入力した数字が5より小さい場合】

 【結果表示クリック後:入力した数字が5の場合】

 【プレーヤー数字入力後:エラー数値の場合】

 【結果表示クリック後:入力した数字が0未満の場合】

 【結果表示クリック後:入力した数字が10以上の場合】

StepのHINT(How to Program)

 1)入力フォームの送信先を変更してください。
  ex)
 <form action="./ GuessNumSessionS03.php " method="POST">
  0から9までの数値を入力して下さい。:<input type="text"   name="player_value">
  <input type="submit" value="結果表示">
 </form>
 2)以下のような条件文をStep2で作成したソースコードに追加します。
  ex)
 if($userNum < 0 || $userNum > 9){
  echo "エラー!!0から9の数字ではありません<br>¥n";
 }
  ★数字当てプログラム(Request版)Step3とほぼ同じソースになります。
ページの先頭へ

Step4:入力した予想数を入力フォームに残す

Stepの概要

 入力フォームに入力した数値を、結果表示ボタンクリック後も入力フォームに残るようにする。

Stepの前提条件

 Step3の提出物を当スクールの指定メールアドレスに送付し終わっていること。

Stepの目的

 HTMLのフォームに関する理解を深めます。

Stepのキーワード

 入力フォーム、スーパーグローバル変数

Stepの仕様

 Step3に以下の機能を付け加える。
 1)Step3までは、入力フォームに入力した数値は結果表示ボタンクリックでクリアされたが、
   これを結果表示ボタンクリック後も入力した数値が残るようにする。

Stepの手順

 1)PHPファイルを作成する
  ・Eclipse準備で作成した「number_hit_request」フォルダの下に「GuessNumRequestS04.php」ファイルを
   新規作成する。


 2)実行結果画面のようになるプログラムを1)で作成した「GuessNumSessionS04.php」に作成する。
 3)テスト実施とエビデンスを作成する。
  ・実行結果画面の通りになる事を確認しエビデンスを作成する。
 4)作成物の提出を行う。(提出方法はこちらをクリックしてください)
・プロジェクトファイル    必須
・ソースコードチェックリスト 当ステップではスキップする(Step6にて実施・提出)
・テストケース 当ステップではスキップする(Step6にて実施・提出)
・エビデンス 必須

Stepの実行結果

 【実行URL】
 http://localhost/php_xxxxxx/kandait_exercise/number_hit_session/GuessNumSessionS04.php
 ※xxxxxxの部分は名字です。

 【初期画面】


StepのHINT(How to Program)

 1)「$_POST["player_value"]」で受け取ったデータを、「name="player_value"」のinputタグの
   value属性にセットします。
  ex)
 <form action="./GuessNumSessionS04.php " method="POST">
  0から9までの数値を入力して下さい。:
  <input type="text" name="player_value" value=<?php echo $_POST["player_value"]?>>
  <input type="submit" value="結果表示">
 </form>
  ★数字当てプログラム(Request版)Step4とほぼ同じソースになります。
ページの先頭へ

Step5:正解数(乱数)の生成

Stepの概要

 正解数を固定ではなく、ランダムな数字にする。

Stepの前提条件

 Step4の提出物を当スクールの指定メールアドレスに送付し終わっていること。
 当スクールの「PHP入門基礎講座-関数を使ってみよう」までを終了、または同等知識をお持ちの方。

Stepの目的

 rand()関数の利用方法を習得します。

Stepのキーワード

 組み込み関数

Stepの仕様

 Step4に以下の機能を付け加える。
 1)Step4まで正解数は「5」固定だったが、これをランダムな1桁の数字に変更する。

Stepの手順

 1)PHPファイルを作成する
  ・Eclipse準備で作成した「number_hit_session」フォルダの下に「GuessNumSessionS05.php」ファイルを
   新規作成する。


 2)実行結果画面のようになるプログラムを1)で作成した「GuessNumSessionS05.php」に作成する。
 3)テスト実施とエビデンスを作成する。
  ・実行結果画面の通りになる事を確認しエビデンスを作成する。
 4)作成物の提出を行う。(提出方法はこちらをクリックしてください)
・プロジェクトファイル    必須
・ソースコードチェックリスト 当ステップではスキップする(Step6にて実施・提出)
・テストケース 当ステップではスキップする(Step6にて実施・提出)
・エビデンス 必須

Stepの実行結果

 【実行URL】
 http://localhost/php_xxxxxx/kandait_exercise/number_hit_session/GuessNumSessionS05.php
 ※xxxxxxの部分は名字です。

 【実行結果画面の例①】

 【実行結果画面の例②】

StepのHINT(How to Program)

 1)ランダムな数字(乱数)を取得します。
   乱数を取得するには、PHPにあらかじめ用意されているrand()関数を使用します。
   rand()関数は第1引数から第2引数の間のランダムな整数を返します。
 2)変数「$ansNum」に乱数を代入します。
  ex)
 $ansNum=rand(0,9);
  ★数字当てプログラム(Request版)Step5とほぼ同じソースになります。
ページの先頭へ

Step6:初期表示画面の改善

Stepの概要

 正解数値の生成を初期表示時のみとする。また初期表示時は結果表示が出力されないようにする。


Stepの前提条件

 Step5の提出物を当スクールの指定メールアドレスに送付し終わっていること。

Stepの目的

 初期表示と2回目以降の判定方法を習得します。

Stepのキーワード

 組み込み関数、セッション、スーパーグローバル変数($_SESSION[])

Stepの仕様

 Step5に以下の機能を付け加える。
 1)正解数値の生成(乱数の取得)を初期表示の時のみとする。初期表示時に正解数をセッション変数に格納し、
   以後はこのセッション変数の値を正解数として参照することにより、結果表示ボタンをクリックしても、
   正解数が変更されないようにする。
   Request版では、正解数値を入力フォームのhidden属性のinputタグにセットし、次画面で
   スーパーグローバル変数「$_POST[]」を使用して正解数を再取得するという処理を繰り返すことにより正解数の
   次画面への引継ぎを実現していたが、これをセッション変数を使用することにより、より簡単に作成する。
 2)初期表示の時に結果表示が出力されないようにする。

Stepの手順

 1)PHPファイルを作成する
  ・Eclipse準備で作成した「number_hit_session」フォルダの下に「GuessNumSessionS06.php」ファイルを新規
   作成する。


 2)実行結果画面のようになるプログラムを1)で作成した「GuessNumSessionS06.php」に作成する。
 3)テスト実施とエビデンスを作成する。
  ・実行結果画面の通りになる事を確認しエビデンスを作成する。
 4)作成物の提出を行う。(提出方法はこちらをクリックしてください)
・プロジェクトファイル    必須
・ソースコードチェックリスト 必須(ソースコードチェックリストの詳細はこちらをクリックしてください
・テストケース 必須(テストケースの詳細はこちらをクリックしてください
・エビデンス 必須

Stepの実行結果

 【実行URL】
 http://localhost/php_xxxxxx/kandait_exercise/number_hit_session/GuessNumSessionS06.php
 ※xxxxxxの部分は名字です。

 【初期画面】

 【結果表示クリック後】

StepのHINT(How to Program)

 1)今回はセッション変数に正解数を格納することになりますので、セッション管理を行う必要があります。
   セッション管理を行うにはまず、session_start()関数でセッション管理を開始します。
   ファイルの冒頭でsession_start()関数を使い、セッション管理を開始してください。
  ex)
 <?php
   session_start();
   header('Content-type: text/html; charset=UTF-8');
 ?>
 2)生成した正解数をセッション変数に格納します。セッション変数を使用するには、スーパーグローバル変数
   「$_SESSION[]」を使用します。
   今回は「$_SESSION["random_value"]」に値を格納することにします。
  ex)
 $_SESSION["random_value"]=rand(0,9);
   これで、セッション変数に正解数が格納できたことになります。
 3)乱数の取得を初期表示の時のみ行うようにします。初期表示かどうかの判定はスーパーグローバル変数
   「$_SESSION["random_value"]」に値がセットされているかどうかで判断します。
   初期表示時はまだ一回も結果表示ボタンが押されていないので、「$_SESSION["random_value"]」には値が
   セットされていないことになります。
   変数に値がセットされているかどうかの判定は、PHPにあらかじめ用意されているisset()関数を使用します。
   isset()関数は引数に与えられた変数に値がセットされていればTrueが返り、セットされていなければFalse
   が返ります。
   下記のようなコードで、「$_SESSION["random_value"]」に値がセットされていない場合は初期表示と判断し、
   乱数を生成して変数「$_SESSION["random_value"]」に代入します。
   初期表示時はこれで「$_SESSION["random_value"]」に正解数が格納されています。
   これでセッションが継続している間は、「$_SESSION["random_value"]」に正解数が格納されていますので、
   2回目表示以降も「$_SESSION["random_value"]」の中身を取り出せば、正解数を取得することができます。
  ex)
 if(!isset($_SESSION["random_value"])){
   $_SESSION["random_value"]=rand(0,9);
 }
 $ansNum=$_SESSION["random_value"];
 3)初期表示時に結果が表示されないようにするには、2)の考え方を流用します。今回は
   「$_SESSION["random_value"]」に値がセットされているかどうかで判断します。
   「$_SESSION["random_value"]」に値がセットされていなければ初期表示と判断できるので、
   値がセットされているときだけ結果表示を出力するようにします。
  ex)
 if (isset($_SESSION["random_value"])){
   if($userNum < 0 || $userNum > 9){
     echo "エラー!!0から9の数字ではありません<br>\n";
   }else if($ansNum < $userNum){
     echo $userNum,"より小さいです。<br>\n";
   }else if($ansNum > $userNum){
     echo $userNum,"より大きいです。<br>\n";
   }else if($ansNum == $userNum){
     echo "!!大当たり!!<br>\n";
   }
 }

 参考)Request版とSession版の違い
 ex)【GuessNumRequestS06.php】

 【Request版の正解数の処理の流れ】
 1)初期表示
  ・正解数(乱数)生成
        ↓
  ・正解数を入力フォームhidden属性のinputタグに設定(ソースコードの①)
 2)2回目以降
  ・入力フォームhidden属性のinputタグから送信された正解数をスーパーグローバル変数「$_POST[]」で
   取得(ソースコードの②)
        ↓
  ・再び正解数を入力フォームhidden属性のinputタグに設定(ソースコードの③)
 ex)【GuessNumSessionS06.php】

 【Request版の正解数の処理の流れ】
 1)初期表示
  ・正解数(乱数)生成
        ↓
  ・正解数をセッション変数に設定(ソースコードの②)
 2)2回目以降
  ・セッション変数に格納した正解数をスーパーグローバル変数「$_SESSION[]」で取得(ソースコードの③)
ページの先頭へ