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

SESSION 13 その74
エラー処理を作る つづき
  エラー処理:対象処理モード

まず、対象処理モード関数に
エラー処理を作りました。

この関数のinputNumには
行動処理モードで選ばれた

・移動・見る・使う

このどれかの番号が入力された
はずだけど。

それ以外の番号が入力されても
大丈夫なように、「その他」
を追加しました。
うーん、
いろいろ
やることが
あるね。。
関数の
戻り値の型も
boolean型に
変えてあるね。
えーと、
エラーの時点で
falseでreturnするように
したんだな。


この関数は最後まで
実行しないでもいいからね。

で、最後まで実行できたら
trueを返して正常ね。

おっけ。
これで行動コマンド以外は
はじけたね。
 

テキストアドベンチャーゲーム エラー処理
KottonCastleEscapeのKCEMain.java)230行目~
 
・・・      
230      /**  
231       * 対象処理モード  
232       */  
233      private static boolean execModeTarget() { 戻り値の型を変更
234         //***** 入力された行動コマンドから対象コマンドを表示する *****  
235      
236         //対象コマンドの一覧を表示  
237         System.out.println("---------------------------------------------");  
238      
239         //部屋ごとの処理  
240         //***************  
241         //もし入口なら  
242         if (nowRoomNum == TAR_ROOM_ENTRANCE) {  
243            //もし移動なら  
244            if (inputNum == ACT_MOVE) {  
245               selectMove();//対象モード 移動表示処理  
246      
247            //もし見るなら  
248            } else if (inputNum == ACT_LOOK) {  
249               //全部の部屋共通の表示  
250               System.out.println("何を見る?");  
251                 
252               //対象コマンド表示(ドア)  
253               System.out.println(TAR_LOOK_ENTRANCE_DOOR + ":ドア");  
254                 
255            //もし使うなら  
256            } else if (inputNum == ACT_USE) {  
257               selectUse();//対象モード 使う表示処理  
258      
259            //それ以外なら  
260            } else {  
261               System.out.println("無効なコマンド番号です:" + inputNum);  
262               printWait();//待機表示処理  
263      
264                return false; エラーの場合
falseで中断
265            }  
266      
267         //***************  
268         //もし廊下なら  
269         } else if (nowRoomNum == TAR_ROOM_PASSAGE) {  
270            //もし移動なら  
271            if (inputNum == ACT_MOVE) {  
272               selectMove();//対象モード 移動表示処理  
273      
274            //もし見るなら  
275            } else if (inputNum == ACT_LOOK) {  
276               //全部の部屋共通の表示  
277               System.out.println("何を見る?");  
278                 
279               //対象コマンド表示(窓、絵画)  
280               System.out.println(TAR_LOOK_PASSAGE_WINDOW + ":窓");  
281               System.out.println(TAR_LOOK_PASSAGE_PICTURE + ":絵画");  
282                 
283            //もし使うなら  
284            } else if (inputNum == ACT_USE) {  
285               selectUse();//対象モード 使う表示処理  
286      
287            //それ以外なら  
288            } else {  
289                System.out.println("無効なコマンド番号です:" + inputNum);  
290                printWait();//待機表示処理  
291      
292                return false; エラーの場合
falseで中断
293            }  
294      
295         //***************  
296         //もし寝室なら  
297         } else if (nowRoomNum == TAR_ROOM_BED) {  
298            //もし移動なら  
299            if (inputNum == ACT_MOVE) {  
300               selectMove();//対象モード 移動表示処理  
301      
302            //もし見るなら  
303            } else if (inputNum == ACT_LOOK) {  
304               //全部の部屋共通の表示  
305               System.out.println("何を見る?");  
306              
307               //対象コマンド表示(ベット、テーブル、金庫)  
308               System.out.println(TAR_LOOK_BED_BED + ":ベッド");  
309               System.out.println(TAR_LOOK_BED_TABLE + ":テーブル");  
310               System.out.println(TAR_LOOK_BED_SAFE + ":金庫");  
311                 
312            //もし使うなら  
313            } else if (inputNum == ACT_USE) {  
314               selectUse();//対象モード 使う表示処理  
315      
316            //それ以外なら  
317            } else {  
318               System.out.println("無効なコマンド番号です:" + inputNum);  
319                printWait();//待機表示処理  
320      
321                return false; エラーの場合
falseで中断
322            }  
323         }  
324      
325         //対象コマンド共通の表示  
326         System.out.print(">");  
327      
328           return true; 正常な場合
trueを返す
329      }  
・・・      
「その他」の分岐を追加。エラーの場合、falseで戻すように変更した。


それから
「その他」のブロックの中に、
エラーメッセージの表示処理と・・・

待機表示の処理
もつけました。

ほら、エラーの表示の場合も
何かキーを押さないと先に
進まないでしょ。

「何か押してください」って
表示しとかないとね。
そうだね。

表示しなかったら
エラーでプログラムが
止まっちゃったみたい
だもんな。

その方が親切でいいね。
 
 
 

テキストアドベンチャーゲーム エラー処理
KottonCastleEscapeのKCEMain.java)259行目~
 
・・・    
259            //それ以外なら
260            } else {
261               System.out.println("無効なコマンド番号です:" + inputNum);
262               printWait();//待機表示処理
263    
264                return false;
265            }
・・・    
待機表示処理を追加した


それから、メイン関数の
モード切替処理を修正
しました。


対象処理モードの所ね。

エラーだった場合は
次のモードに行かないで
最初のモードに戻して
入力を最初からやり直す
ようにしたよ。
最初の行動処理モードに
戻したんだな。


今回の場合は、単純に
前のモードに戻しても
問題ないよ。

場合によっては
変数の初期化とか
いろいろ問題が出るケースも
あるから注意しよう。
ここ
難しかったー、

ヒント
ありがと。
おっけ
 

テキストアドベンチャーゲーム エラー処理
KottonCastleEscapeのKCEMain.java)74行目~
 
・・・      
074               /////////////////////////////////////////////////////  
075               //実行処理(選択されたコマンドによって表示)  
076               switch (nowMode) {  
077                   
078                   //***************  
079                   //オープニング処理モード  
080                   case MODE_OPENING:                      
081                       //オープニング処理モード関数呼び出し  
082                       execModeOpenig();  
083    
084                       //行動処理モード(1階層目)に変更する  
085                       nowMode = MODE_GAME_1_ACT;  
086    
087                       break;  
088                   //***************  
089                   //行動処理モード  
090                   case MODE_GAME_1_ACT:  
091                      //行動処理モード関数呼び出し  
092                      execModeAction();  
093                        
094                      //対象処理モード(2階層目)に切り替える  
095                      nowMode = MODE_GAME_2_TAR;  
096                         
097                       break;  
098                   //***************  
099                   //対象処理モード  
100                   case MODE_GAME_2_TAR:  
101                      //対象処理モード関数呼び出し  
102                       if(execModeTarget()){  
103                           //入力された行動コマンドを保存する  
104                           keepActNum = inputNum;  
105                           //結果処理モード(3階層目)に切り替える  
106                           nowMode = MODE_GAME_3_RES;  
107                       }else{  
108                           //エラーの場合、行動モード(1階層目)に戻す  
109                           nowMode = MODE_GAME_1_ACT; エラーの場合
行動処理モード
に戻す
110                       }  
111                        
112                      break;  
113                   //***************  
114                   //結果処理モード  
115                   case MODE_GAME_3_RES:  
116                      //結果処理モード関数呼び出し  
117                       if(execModeResult()){  
118                           //エンディング処理モードに変更する  
119                           nowMode = MODE_ENDING;  
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               }  
・・・      
エラーの場合は、最初の行動処理モードに戻す

 
 

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