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

SESSION 11 その24
メンバ変数(フィールド)

コードもかなり整理されたな。

最後に、モード別処理も
関数にしてしまおう。


問題処理モードと
解答処理モード。
2つの関数ね。
えー、みんな
関数にしちゃうの?


その2つって
今回のゲームの処理の
ほとんど全部だよ。

メイン関数
からっぽになっちゃうよ。
そう、
からっぽにしよう!

お前の頭と同じね。
あたしは
蟹みそぐらい
つまってる!!


その方が処理の流れが
すっきりして分かりやすい
だろ。

とことん
やっちゃおーぜ!
いえーい!
いえーい
いえーい
いえーい!

とことん
やっちゃおー!


蟹みそ
ってちょこっと
しかない
じゃん。。。

だから
ノリやすいんだ。

ククク
あっ!

じゃなくってー!
それぐらい
Goodってこと!


でも
蟹みそって
美味しいよね!

魚介類のみそとか肝
って美味しいよねー。
ふうん。

そうなんだ。


  じゅるる
魚介類のって・・・

美味しい・・・
よね・・・?

ひいいー  
捕食者の
目で
見ないでー。

     

じゃあ、早速コードを
移動させてみよう。

まずは解答処理モードね。
問題処理モードが
先じゃないんだ・・・?

えっと・・・

さっきやったように
関数にすれば
いいんだよね。
解答から先ね。

ウフ
簡単だから
どっちでも
いいけど。
 

クイズゲーム完成 キー入力処理関数化
(KotoQuizのKQMain.java)90行目~
 
・・・      
090               //解答処理モード  
091               }else if(execMode == EXEC_MODE_CHECK){  
092      
093                   //解答をチェックする  
094                   switch(nowQuizNum){  
095                       case 0:  
096                           //正解番号チェック  
097                           correctTotal = checkAnswerData(3,inputNum,correctTotal);  
098      
099                           break;  
100                       case 1:  
101                           //正解番号チェック  
102                           correctTotal = checkAnswerData(1,inputNum,correctTotal);  
103      
104                           break;  
105                       case 2:  
106                           //正解番号チェック  
107                           correctTotal = checkAnswerData(3,inputNum,correctTotal);  
108      
109                           break;  
110                   }  
111                   System.out.println("");  
112                   System.out.println("-----------------------------------------------");  
113                   System.out.print("< 1を入力してEnterキーを押してください >");  
114      
115                   //問題を進める  
116                   nowQuizNum += 1;  
117      
118                   //最大数以上なら  
119                   if(nowQuizNum >= QUIZ_MAX){  
120                       loopFlg = false;//ゲームを終了する  
121                   }  
122      
123                   //問題処理モードへ変更  
124                   execMode = EXEC_MODE_QUIZ;  
125               }  
・・・    
緑色の 解答処理モード の部分を関数化します


そうだな。

関数名は

execModeCheck
にしてくれ。
はいっ。

まずは、
関数の枠を書いて。

処理をカットして
この中に移動・・・っと。

これはばっちり!
ウフ
ウフ
簡単!
 

クイズゲーム完成 モード処理関数化
(KotoQuizのKQMain.java)
 
・・・      
         /**  
         * 解答処理モード処理  
         */  
        private static void execModeCheck(){  
       
            //解答をチェックする  
            switch(nowQuizNum){  
                case 0:  
                    //正解番号チェック  
                    correctTotal = checkAnswerData(3,inputNum,correctTotal);  
       
                    break;  
                case 1:  
                    //正解番号チェック  
                    correctTotal = checkAnswerData(1,inputNum,correctTotal);  
       
                    break;  
                case 2:  
                    //正解番号チェック  
                    correctTotal = checkAnswerData(3,inputNum,correctTotal);  
       
                    break;  
             }  
            System.out.println("");  
            System.out.println("-----------------------------------------------");  
            System.out.print("< 1を入力してEnterキーを押してください >");  
       
            //問題を進める  
            nowQuizNum += 1;  
       
            //最大数以上なら  
            if(nowQuizNum >= QUIZ_MAX){  
                loopFlg = false;//ゲームを終了する  
            }  
       
            //問題処理モードへ変更  
            execMode = EXEC_MODE_QUIZ;  
       
        }  
・・・    
関数 execModeCheckのブロック を作り、
その中に 解答処理モードの処理 を貼り付けた。
 
まだコードを改変しないで下さい。


  きゃああああ
壊しちゃった!
って!

ばっちりじゃないー!!

真っ赤かだー!

いきなり、エラーだらけに
なっちゃったあー!!
 
まあ、そうなるよね。

ウヒ
  壊しちゃった!
 
 
エラーのコード
エディタウィンドウ


ごめんなさいー!
もうだめだあー!

めちゃくちゃだああー


こんなの直せないよー!
 
あのな。

落ち着いてコードを
確認してみようぜ。
  最悪、戻せば
いいんだし。

ククク
ほんと
疲れる子ねー。
 


そ、そっか。

エラーの原因を
調べないと・・・
へこんでる時
じゃない!
 
こういう時は、まずは
エラー内容の確認
ね。

エディタ上の赤線の
エラーメッセージを
見てみよう。

カーソルをエラーの
上に置いてね。


カーソルを赤線の上に
置いたら・・・

「シンボルを
見つけられません」
て出たよ。
それは「変数が宣言されて
いません」というエラー
だ。


じゃあ、どうしてそのエラーに
なったんだと思う?


問題処理モードの内容を
確認してみよう。
 
確認してー
 
エラーの確認方法(シンボルを見つけられません)
エディタウィンドウ
 
赤線のエラーの上にカーソルを置くとエラーの内容が表示されます。


「変数が宣言されてない」って、
解答チェック処理を
関数にした時と同じだよね?

ってことは・・・やっぱり!

メイン関数の中で宣言された
変数ばっかりだ!
今度は定数まで宣言されてないよ!

関数にしたら大変!
ほとんど全部引数にしないと!
名前も全部書き換えなきゃ!
まあ、そうなるよね。

ウヒ

たいへん!
たいへん!
 

クイズゲーム完成 モード処理関数化
(KotoQuizのKQMain.java)
 
・・・      
         /**  
         * 解答処理モード処理  
         */  
        private static void execModeCheck(){  
       
            //解答をチェックする  
            switch(nowQuizNum){  
                case 0:  
                    //正解番号チェック  
                    correctTotal = checkAnswerData(3,inputNum,correctTotal);  
       
                    break;  
                case 1:  
                    //正解番号チェック  
                    correctTotal = checkAnswerData(1,inputNum,correctTotal);  
       
                    break;  
                case 2:  
                    //正解番号チェック  
                    correctTotal = checkAnswerData(3,inputNum,correctTotal);  
       
                    break;  
             }  
            System.out.println("");  
            System.out.println("-----------------------------------------------");  
            System.out.print("< 1を入力してEnterキーを押してください >");  
       
            //問題を進める  
            nowQuizNum += 1;  
       
            //最大数以上なら  
            if(nowQuizNum >= QUIZ_MAX){  
                loopFlg = false;//ゲームを終了する  
            }  
       
            //問題処理モードへ変更  
            execMode = EXEC_MODE_QUIZ;  
       
        }  
・・・    
変数も定数もメイン関数側で宣言されている


むりー!!!
それに、戻り値にできるのは
1つだけだよ!


なのに、
問題番号も!
正解数も!
処理モードも!
ループフラグも!

全部メイン関数に戻さないと
関数が終わったら
変えた値が消えちゃうよ!
 
大丈夫だって。

できるやり方が
あるんだよ。
  むりじゃないー

からかうのも
疲れてきたなあ。
 


 
 

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