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

SESSION 13 その72
エラー処理を作る つづき

よく思い出してみよう。
既に1回似たようなこと
やってるんだぜ。

ほら、モード切替処理で
関数の戻り値をフラグ
にしただろ。

それと同じように
エラーだったら~
って感じにすれば・・・。
エラーフラグを
戻せばいいんだ!


問題なかったら true で
エラーだったら false !

それを使って
呼出元のメイン関数で
モードを切り替えれば!

いいぞ!
あっ、
分かったー

同じだ!
 

テキストアドベンチャーゲーム
エンディングフラグ 戻り値使用
KottonCastleEscapeのKCEMain.java)72行目~
 
・・・    
072  
073               /////////////////////////////////////////////////////
074               //実行処理(選択されたコマンドによって表示)
075               switch (nowMode) {
076                 
077                   //***************
078                   //オープニング処理モード
079                   case MODE_OPENING:                    
080                       //オープニング処理モード関数呼び出し
081                       execModeOpenig();
082  
083                       //行動処理モード(1階層目)に変更する
084                       nowMode = MODE_GAME_1_ACT;
085  
086                       break;
087                   //***************
088                   //行動処理モード
089                   case MODE_GAME_1_ACT:
090                      //行動処理モード関数呼び出し
091                      execModeAction();
092                      
093                      //対象処理モード(2階層目)に切り替える
094                      nowMode = MODE_GAME_2_TAR;
095                       
096                       break;
097                   //***************
098                   //対象処理モード
099                   case MODE_GAME_2_TAR:
100                      //対象処理モード関数呼び出し
101                      execModeTarget();
102                      
103                      //入力された行動コマンドを保存する
104                      keepActNum = inputNum;
105                      //結果処理モード(3階層目)に切り替える
106                      nowMode = MODE_GAME_3_RES;
107                      
108                      break;
109                   //***************
110                   //結果処理モード
111                   case MODE_GAME_3_RES:
112                      //結果処理モード関数呼び出し
113                       boolean endingFlg = execModeResult();
114    
115                       //エンディング判定
116                       if(endingFlg){
117                           //エンディング処理モードに変更する
118                           nowMode = MODE_ENDING;
119    
120                       }else{
121                           //行動処理モード(1階層目)に戻す
122                           nowMode = MODE_GAME_1_ACT;
123                       }
124                      
125                       break;
126                   //***************
127                   //エンディング処理モード
128                   case MODE_ENDING:                    
129                       //エンディング処理モード関数呼び出し
130                       execModeEnding();
131  
132                       //終了処理
133                       loopFlg = false;
134  
135                       break;
136               }
・・・    
エンディング処理モードでは、関数の戻り値をフラグにしてモードを切り替えた
 

ことのイメージ
 
・・・    
       /**
        * 対象処理モード
        */
       private static boolean execModeTarget() {
          //***** 入力された行動コマンドから対象コマンドを表示する *****
     
          //対象コマンドの一覧を表示
          System.out.println("---------------------------------------------");
     
          //部屋ごとの処理
          //***************
          //もし入口なら
          if (nowRoomNum == TAR_ROOM_ENTRANCE) {
             //もし移動なら
             if (inputNum == ACT_MOVE) {
                selectMove();//対象モード 移動表示処理
     
             //もし見るなら
             } else if (inputNum == ACT_LOOK) {
                //全部の部屋共通の表示
                System.out.println("何を見る?");
                
                //対象コマンド表示(ドア)
                System.out.println(TAR_LOOK_ENTRANCE_DOOR + ":ドア");
                
             //もし使うなら
             } else if (inputNum == ACT_USE) {
                selectUse();//対象モード 使う表示処理
     
             //それ以外なら
             } else {
                System.out.println("無効なコマンド番号です:" + inputNum);
     
                return false;
             }
・・・    
戻り値でエラーフラグを返して、メイン関数側でモード切替すれば・・・


ゆっくり
やれば
大丈夫。
ここまでできれば
あと少し。
自信持って行こう。

似たようなコードが
多いからね。
見間違えないように
慎重にやってくれ。

 
はいっ!

あたしはできる!
  ラストスパートだ!
 

  ヒント3:持っていないアイテムのエラー処理

ここは、
これでよしっと!

うん、
大分できてきたね。
 

ゲーム
しないの?
ごろごろ  
うふーん

たいくつう~


あとは・・・

持ってないアイテムの
番号が入力されたら
どうしようかな・・・。
うーん。
教えて
あげるう~
あ、えっと・・

それはね~


そうだ!
アイテムのフラグ

調べればいいんだ。

アイテムを持ってる場合だけ
使った結果を表示すれば
いいんだね!

持ってないアイテムの番号が
入力されたらエラーだよね。
表示されてないはずなんだから。

結果処理モードに
こんな感じでエラー処理を
作ろう!
これで
できそう!

のってきた!
・・・・・
・・・・・
あ~・・・。
 

ことのイメージ
 
・・・      
       /**  
        * 結果処理モード  
        */  
       private static boolean execModeResult() {  
          //***** 入力された対象コマンド別に実行処理と表示をする *****  
       
            boolean endingFlg = false;//エンディングフラグ  
       
          //部屋ごとの処理  
          //***************  
          //もし入口なら  
          if (nowRoomNum == TAR_ROOM_ENTRANCE) {  
             //行動コマンド選択別処理:保存しておいた値を使用  
             //もし移動なら  
             if (keepActNum == ACT_MOVE) {  
     
             //もし見るなら  
             } else if (keepActNum == ACT_LOOK) {  
                   
             //もし使うなら  
             } else if (keepActNum == ACT_USE) {  
                //アイテム処理  
                //暗証番号  
                if (inputNum == TAR_USE_ITEM_CODE_5963  
                      || inputNum == TAR_USE_ITEM_CODE_3156  
                      || inputNum == TAR_USE_ITEM_CODE_3150) {  
                   System.out.println("U-01:使えません。");  
       
                //鍵  
                } else if (inputNum == TAR_USE_ITEM_KEY) {  
                    if (itemKeyFlg) { 持ってる場合
通常の処理
                        System.out.println("U-02:ドアの鍵穴には入らない。");  
       
                    } else { 持ってない場合
不正入力。エラー
                        System.out.println("無効なコマンド番号です:" + inputNum);  
                    }  
       
                //爆弾  
                } else if (inputNum == TAR_USE_ITEM_BOM) {  
・・・      
アイテムを持ってないのに使われたら(入力されたら)エラー。

アイテムフラグで不正か確認する。


やっぱり
そう思う?
オバチャン
イヂワルー
 
なんでー
なんでー

せめて
お姉さん
にしてー

解答は次のページです
 
 

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