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

SESSION 10 その34
モード別処理 つづき
  処理モード


2つの処理モードと処理内容
問題処理モード
見出し処理
問題表示処理
 
解答処理モード
解答チェック処理
終了処理
 
「機能単位」でモード別に処理を分ける
 
 
 
それからモード別処理。

今回はループ内の処理を
モード別に切り替えるように
作り変えたからね。

問題処理モードと
解答処理モードね。

 
今までの処理を
それぞれのモードに
振り分けたんだ。

さっき追加した変数や
定数は、このモードの
切換に使うんだね。
 


切換のやり方は単純。

現在のモードを保持する
変数 execModeを使って
if文でループ内の処理を
切り替えてるだけだ。

定数で、現在のモードを
判定してるんだよ。
これなら数字を覚えないでも
モードが分かるよな。
簡単だろ。
定数はこういう
使い方もできる
んだね。
それから、モード処理の最後に
次のモードのフラグに変更して、
ループの処理を切り替えてる
んだ。


問題処理モードの最後に
解答処理モードフラグする。

解答処理モードの最後に
問題処理モードフラグにする。

たった、これだけで
1つのループで複数の処理を
扱えるんだね。
 

クイズゲーム 完成(モード別処理)
(KotoQuizのKQMain.java)46行目~
 
・・・      
046               //問題処理モード  
047             if(execMode == EXEC_MODE_QUIZ){
048      
049                   //見出し:現在の状況を表示する  
050                   System.out.println("***************** ことくいず *****************");  
051                   System.out.println("         現在、"+ (nowQuizNum + 1) +"問目です。");  
052                   System.out.println("        現在の正解数は"+ correctTotal +"です。");  
053                   System.out.println("***********************************************");  
054                   System.out.println("");  
055                   System.out.println("< 問題です >");  
056      
057                   //問題を表示する  
058                   switch(nowQuizNum){  
059                       case 0:  
060                           System.out.println("変数の型でint型の最大値はいくつ?");  
061                           System.out.println("");  
062                           System.out.println("-----------------------------------------------");  
063                           System.out.println("1:256 2:98776342 3:2147483647");  
064      
065                           break;  
066                       case 1:  
067                           System.out.println("変数の型を変換するのに使う方法はどれ?");  
068                           System.out.println("");  
069                           System.out.println("-----------------------------------------------");  
070                           System.out.println("1:キャスト 2:スコープ 3:インクリメント");  
071      
072                           break;  
073                       case 2:  
074                           System.out.println("変数aが「4以上でかつ10以下」か「40未満」");  
075                           System.out.println("正しい条件式はどれ?");  
076                           System.out.println("");  
077                           System.out.println("-----------------------------------------------");  
078                           System.out.println("1:(a >= 4 || a < 10) && a < 40");  
079                           System.out.println("2:(a >= 4 || a <= 10) || a < 40");  
080                           System.out.println("3:(a >= 4 && a <= 10) || a < 40");  
081      
082                           break;  
083                   }  
084                   System.out.print("答え>");  
085      
086                   //解答処理モードへ変更  
087                   execMode = EXEC_MODE_CHECK;  
088      
089               //解答処理モード  
090               }else if(execMode == EXEC_MODE_CHECK){  
091      
092                   //解答をチェックする  
093                   switch(nowQuizNum){  
094                       case 0:  
095                           //正解番号チェック  
096                           if(inputNum == 3){  
097                               System.out.println("やったね!正解");  
098                               correctTotal += 1;//正解数加算  
099                           }else{  
100                               System.out.println("残念!不正解");  
101                           }  
102      
103                           break;  
104                       case 1:  
105                           //正解番号チェック  
106                           if(inputNum == 1){  
107                               System.out.println("やったね!正解");  
108                               correctTotal += 1;//正解数加算  
109                           }else{  
110                               System.out.println("残念!不正解");  
111                           }  
112      
113                           break;  
114                       case 2:  
115                           //正解番号チェック  
116                           if(inputNum == 3){  
117                               System.out.println("やったね!正解");  
118                               correctTotal += 1;//正解数加算  
119                           }else{  
120                               System.out.println("残念!不正解");  
121                           }  
122      
123                           break;  
124                   }  
125                   System.out.println("");  
126                   System.out.println("-----------------------------------------------");  
127                   System.out.print("< 1を入力してEnterキーを押してください >");  
128      
129                   //問題を進める  
130                   nowQuizNum += 1;  
131      
132                   //最大数以上なら  
133                   if(nowQuizNum >= QUIZ_MAX){  
134                       loopFlg = false;//ゲームを終了する  
135                   }  
136      
137                   //問題処理モードへ変更  
138                   execMode = EXEC_MODE_QUIZ;  
139               }  
・・・    
解説図1 番号1~2
及び
解説図2 番号4~6
を参照して下さい


こうやって定数を使った
判定を使えば、いろいろ
モード別に処理を分けられる。


今回は、2つのモードだけだけど
例えば、オープニングモードとか
エンディングモードとかも追加
したり。

今までより
拡張しやすくなっただろ。
あー!

それいいね!
追加したい!
今回は
しないってば。
オープニングとか
かっこいいよ!



 
それに、これで
コードが重複してた
入力処理と
区切り表示処理を
1つにできた
だろ。
 
そうか!

モード別処理の
後ろに置いて
1つにできたんだね。

処理の順番も
変わらないんだ。
  パズル
みたい!
 
 
重複した処理の統合

     

うわー
if文で分けただけで
こんなに変わるんだ!


すごい、すごい!
書き方だけで
こんなに変わるなんて!

プログラムって不思議ー!
そ、そう?

ゲーム自体は全く
変わってないんだけど
ね・・・。

今回は作り方の学習
だからね。
今までとは違うかもな。
びっくり
する事
ばかり!
まあ、
いいけど。。。


  処理の構造の考え方

今回は、処理の構造を
「画面単位」や「機能単位」
という分け方で考えてみた。


他にも
「入出力」に注目したり
いろいろな分け方ができるよ。
 
多分よく
分かってない・・・。
うーん、
難しい。。。

分かったような
分かってないような・・・。
 

処理の構造の分け方
処理を分ける
画面単位
機能単位
入出力単位
・・・
いろいろな視点で処理の構造を考える


最初は「画面単位」で
考えてみよう。


実際に絵に描いて
どの画面にどんな
機能が必要か考えてみよう。

そして
どんな画面のつながりで
ゲームになるか流れを
線でつなげてみよう。
絵で描くのは
分かりやすいね。

あたしでもできるよ。
画面が
分かりやすい
だろ。
分かった。

まず絵で
描いてみるね。
 

処理の構造を考える
全体
ループ1回につき1回の入出力にする
画面単位
画面別に絵を描く
画面別に機能を分類する
画面と画面のつながりで流れを考える
画面から機能を抜き出してみる
 


うーん、
でもやっぱり
よく分かってないかも。
 復習するね。
焦らなければ
大丈夫。

楽しみながら
いこうぜ!
まあ、誰でも最初は
そんなもんだよ。

設計はある意味
一番難しいところだからね。

経験も試行錯誤も必要。
これからいろいろな
パターンをやって覚えていこう。

 
 

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