広告
  サイト内検索:
<Let's create a game!> Introduction of programming for absolute beginners English
 

SESSION 10 その25
解答処理 つづき
  コードの解説

じゃあ、
追加したコードを
上から順番に見ていこう。

解説図も一緒に見てね。
あー、
ゲーム楽しかった!


解答処理は
どうやってたのかな。
今回は、
解答処理と
待機キー入力
処理ね。
あたしでも
本当にゲーム
できたんだね!
 
 
今回のコードのポイント
 
・区切り処理
・解答処理
・待機キー入力処理
 
コードの解説図(画像をクリックで拡大表示します)
クイズゲーム完成

  解答処理


クイズゲーム 完成
(KotoQuizのKQMain.java)108行目~
 
・・・    
108               //解答をチェックする  
109               switch(nowQuizNum){  
110                   case 0:  
111                       //正解番号チェック  
112                       if(inputNum == 3){  
113                           System.out.println("やったね!正解");  
114                           correctTotal += 1;//正解数加算  
115                       }else{  
116                           System.out.println("残念!不正解");  
117                       }  
118      
119                       break;  
120                   case 1:  
121                       //正解番号チェック  
122                       if(inputNum == 1){  
123                           System.out.println("やったね!正解");  
124                           correctTotal += 1;//正解数加算  
125                       }else{  
126                           System.out.println("残念!不正解");  
127                       }  
128      
129                       break;  
130                   case 2:  
131                       //正解番号チェック  
132                       if(inputNum == 3){  
133                           System.out.println("やったね!正解");  
134                           correctTotal += 1;//正解数加算  
135                       }else{  
136                           System.out.println("残念!不正解");  
137                       }  
138      
139                       break;  
140               }  
141               System.out.println("");  
142               System.out.println("-----------------------------------------------");  
143               System.out.print("< 1を入力してEnterキーを押してください >");  
・・・  
解説図 番号8、9、10を参照して下さい
 
クイズゲームの処理の流れ(解答処理)
 
処理は
単純だろ?
うん。

あたしでも
大丈夫。
これが解答処理だよ。

まずは、流れ図の
「答え合わせをする」
の処理ね。

入力された解答番号が、
正解かチェックしてるんだよ。

現在の出題番号nowQuizNumで
処理問題を切り替えて
入力されたinputNumと
正解番号を比較してるんだ。
 
問題を追加したら
その分、ここに答えを
書かないとだめなんだね。

今回はcase3つ。
問題の数だけ判定も
必要ってことね。


当たり前だけど。。。
 



入力番号と正解番号が
同じなら正解。


正解だったら
・正解メッセージの表示
・正解数を加算

不正解なら
・不正解メッセージの表示

をしているよ。

つまり、ここで流れ図の
「解答結果を出す」処理もしてるよ。
ここで
答えあわせと
解答結果のメッセージを
出してるんだね。
 
 

クイズゲーム 完成
(KotoQuizのKQMain.java)111行目~
 
・・・    
111                       //正解番号チェック  
112                       if(inputNum == 3){  
113                           System.out.print("やったね!正解");  
114                           correctTotal += 1;//正解数加算  
125                       }else{  
126                           System.out.print("残念!不正解");  
127                       }  
・・・  
 
解説図 番号9、10を参照して下さい


 
解答処理の注意点
だけど・・・

解答処理のcase番号は
問題表示のcase番号と
揃える事。


どっちも
現在の出題番号変数
nowQuizNum
で選んでるからね。

case番号が違うと
問題と解答が一致しなく
なっちゃうよ。
 
問題と答えの出題番号を
揃えるってことね。


1問目の問題に
2問目の答えじゃ
合わないもんね。
  合う訳
ないよねー
 
 

クイズゲーム 完成
(KotoQuizのKQMain.java)50行目~
 
・・・    
050               //問題を表示する  
051               switch(nowQuizNum){  
052                   case 0:  
053                       System.out.println("変数の型でint型の最大値はいくつ?");  
054                       System.out.println("");  
055                       System.out.println("-----------------------------------------------");  
056                       System.out.println("1:256 2:98776342 3:2147483647");  
057      
058                       break;  
059                   case 1:  
060                       System.out.println("変数の型を変換するのに使う方法はどれ?");  
061                       System.out.println("");  
062                       System.out.println("-----------------------------------------------");  
063                       System.out.println("1:キャスト 2:スコープ 3:インクリメント");  
064      
065                       break;  
066                   case 2:  
067                       System.out.println("変数aが「4以上でかつ10以下」か「40未満」");  
068                       System.out.println("正しい条件式はどれ?");  
069                       System.out.println("");  
070                       System.out.println("-----------------------------------------------");  
072                       System.out.println("1:(a >= 4 || a < 10) && a < 40");  
072                       System.out.println("2:(a >= 4 || a <= 10) || a < 40");  
073                       System.out.println("3:(a >= 4 && a <= 10) || a < 40");  
074      
075                       break;  
076               }  
     
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
   
108               //解答をチェックする  
109               switch(nowQuizNum){  
110                   case 0:  
111                       //正解番号チェック  
112                       if(inputNum == 3){  
113                           System.out.print("やったね!正解");  
114                           correctTotal += 1;//正解数加算  
115                       }else{  
116                           System.out.print("残念!不正解");  
117                       }  
118      
119                       break;  
120                   case 1:  
121                       //正解番号チェック  
122                       if(inputNum == 1){  
123                           System.out.print("やったね!正解");  
124                           correctTotal += 1;//正解数加算  
125                       }else{  
126                           System.out.print("残念!不正解");  
127                       }  
128      
129                       break;  
130                   case 2:  
131                       //正解番号チェック  
132                       if(inputNum == 3){  
133                           System.out.print("やったね!正解");  
134                           correctTotal += 1;//正解数加算  
135                       }else{  
136                           System.out.print("残念!不正解");  
137                       }  
138      
139                       break;  
140               }  
・・・  
クイズの問題と解答はcaseの番号を揃える必要がある。


今回は
解答処理の後に
終了判定を持って
きたんだね。
そう。
もし問題表示だけで
出題番号を進めちゃったら
解答がおかしくなる
だろ。

問題と解答は
1つの組だからね。

その後で終了判定だよ。
なるほど。

問題と解答は
同じ出題番号
にしないとね。
そゆこと。
 

クイズゲーム 完成
(KotoQuizのKQMain.java)108行目~
 
・・・    
108               //解答をチェックする  
109               switch(nowQuizNum){  
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
140               }  
141               System.out.println("");  
142               System.out.println("-----------------------------------------------");  
143               System.out.print("< 1を入力してEnterキーを押してください >");  
144    
145               //問題を進める  
146               nowQuizNum += 1;  
147    
148               //最大数以上なら  
149               if(nowQuizNum >= QUIZ_MAX){  
150                   loopFlg = false;//ゲームを終了する  
151               }  
・・・  
出題番号は、出題と解答が終わった後に進める


まあ、
後でねー。
ちなみに、
この流れ図では、
「待機処理」「終了処理」の順
だけど、
コードでは
「終了処理」「待機処理」の順
でやっちゃってる。


終了処理はフラグを立てるだけ
だから、どっちを先に置いても結果は
変わらないんだけどね。

こう作った理由は後で分かるよ。
 
コードでは
待機処理がループの最後
なんだ。


必ず「考えた処理の流れ」と
コードが一致するわけ
じゃないんだ・・・。

うーん、本当に臨機応変
なんだね。
  終了処理が
最後じゃないんだ。

なんで?
 
 
クイズゲームの処理の流れ(解答処理)解説
 

クイズゲーム 完成
(KotoQuizのKQMain.java)145行目~
 
・・・    
145               //問題を進める  
146               nowQuizNum += 1;  
147    
148               //最大数以上なら  
149               if(nowQuizNum >= QUIZ_MAX){  
150                   loopFlg = false;//ゲームを終了する  
151               }  
152    
153               /////////////////////////////////////////////////////  
154               //キー入力処理 そのまま書き写してください ここから  
155               tmpInputNum = 0;//入力番号初期化  
156               try {  
157                   //初期化処理  
158                   final int IMPUT_MAX = 3;//最大入力値  
159                   //キー入力読込処理(int型)  
160                   java.util.Scanner sc = new java.util.Scanner(System.in);  
161                   int inputInt = sc.nextInt();  
162                   //入力値チェックと入力番号への代入  
163                   if (inputInt > 0 && inputInt <= IMPUT_MAX) {  
164                       tmpInputNum = inputInt;  
165                   } else {  
166                       System.out.println("※ コマンドは" + IMPUT_MAX + "以下で入力して下さい ※ ");  
167                   }  
168               } catch (Exception e) {  
169                   System.out.println("※ 数字以外は入力しないで下さい ※ ");  
170               }  
171               //キー入力処理 そのまま書き写してください ここまで  
172               /////////////////////////////////////////////////////  
173    
174               //入力番号を受け取る  
175               inputNum = tmpInputNum;  
・・・  
コードでは、「待機処理」が最後にある


難しく考えないで。

今は「あー、こんな書き方
してるんだ」でいいよ。
うーん。

そうなんだ。
そのまま
スルーで
いいよ。
うーん。

 
 

広告
home もくじ 前のページを読む 次のページを読む
  サイト内検索:
広告
お勧めの姉妹サイト
leafdays - リーフデイズ 超初心者のための園芸入門 - 楽しい趣味のガーデニング -
広告