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

コード11:エラー処理
コード(KottonCastleEscapeのKCEMain.java)
1 現在のコード:現在のコードから 赤色の部分を削除 緑色の部分を切り取り(2のコードの同じ内容部分に貼り付けて移動) して下さい。

現在のコードから 削除 及び 切り取り はありません
 
 
2 今回のコード:1で修正したコードに、緑色の部分に貼り付け 黄色の部分を修正 青色の部分を追加 してこの形にして下さい。

テキストアドベンチャーゲーム エラー処理
KottonCastleEscapeのKCEMain.java)12行目~
 
・・・    
012   public class KCEMain {
013  
014       //********************************************
015       //                   定数
016       //********************************************     
017       //入力・表示処理モード
018       private static final int MODE_OPENING = 1;//オープニング
019       private static final int MODE_GAME_1_ACT = 2;//行動処理モード(1階層目 どうする?行動コマンド)
020       private static final int MODE_GAME_2_TAR = 3;//対象処理モード(2階層目 なにを?対象コマンド)
021       private static final int MODE_GAME_3_RES = 4;//結果処理モード
022       private static final int MODE_ENDING = 5;//エンディング
023       //行動コマンド
024       private static final int ACT_NONE = 0;//無し
025       private static final int ACT_MOVE = 1;//移動
026       private static final int ACT_LOOK = 2;//見る
027       private static final int ACT_USE = 3;//使う
028       //対象コマンド 移動用 部屋の現在地
029       private static final int TAR_ROOM_ENTRANCE = 1;//入口
030       private static final int TAR_ROOM_PASSAGE = 2;//廊下
031       private static final int TAR_ROOM_BED = 3;//寝室
032       //対象コマンド 見る用(部屋別に用意する)
033       //入口用
034       private static final int TAR_LOOK_ENTRANCE_DOOR = 1;//ドア
035       //廊下用
036       private static final int TAR_LOOK_PASSAGE_WINDOW = 1;//窓
037       private static final int TAR_LOOK_PASSAGE_PICTURE = 2;//絵画
038       //寝室用
039       private static final int TAR_LOOK_BED_BED = 1;//ベッド
040       private static final int TAR_LOOK_BED_TABLE = 2;//テーブル
041       private static final int TAR_LOOK_BED_SAFE = 3;//金庫
042       //対象コマンド 使う用
043       private static final int TAR_USE_ITEM_CODE_5963 = 1;//暗証番号:5963(ごくろうさん)
044       private static final int TAR_USE_ITEM_CODE_3156 = 2;//暗証番号:3156(サイコロ)
045       private static final int TAR_USE_ITEM_CODE_3150 = 3;//暗証番号:3150(最高)
046       private static final int TAR_USE_ITEM_KEY = 4;//金庫の鍵
047       private static final int TAR_USE_ITEM_BOM = 5;//爆弾
048       //********************************************
049       //                   変数
050       //********************************************
051       private static int inputNum = 0;//入力番号
052       private static int nowMode = MODE_OPENING;//現在の処理モード:最初は1階層目
053       private static int nowRoomNum = TAR_ROOM_ENTRANCE;//現在位置:ドアの部屋から開始
054       private static int keepActNum = ACT_NONE;//行動コマンド保存用:無しで初期化
055       //アイテムフラグ
056       private static boolean itemKeyFlg = false;//金庫の鍵
057       private static boolean itemBomFlg = false;//爆弾
058       private static int tableLookCount = 0;//テーブル調査回数
059       
060       /**
061        * @param args the command line arguments
062        */
063       public static void main(String[] args) {
064           // TODO code application logic here
065  
066           //********************************************
067           //                メイン処理
068           //********************************************
069           boolean loopFlg = true;//ループフラグ
070    
071           while (loopFlg ) {
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                       if(execModeTarget()){
102                           //入力された行動コマンドを保存する
103                           keepActNum = inputNum;
104                           //結果処理モード(3階層目)に切り替える
105                           nowMode = MODE_GAME_3_RES;
106                       }else{
107                           //エラーの場合、行動モード(1階層目)に戻す
108                           nowMode = MODE_GAME_1_ACT;
109                       }
110                      
111                      break;
112                   //***************
113                   //結果処理モード
114                   case MODE_GAME_3_RES:
115                      //結果処理モード関数呼び出し
116                       if(execModeResult()){
117                           //エンディング処理モードに変更する
118                           nowMode = MODE_ENDING;
119                       }else{
120                           //行動処理モード(1階層目)に戻す
121                           nowMode = MODE_GAME_1_ACT;
122                       }
123    
124                      break;
125                   //***************
126                   //エンディング処理モード
127                   case MODE_ENDING:                    
128                       //エンディング処理モード関数呼び出し
129                       execModeEnding();
130  
131                       //終了処理
132                       loopFlg = false;
133  
134                       break;
135               }
136  
137               //キー入力処理
138               inputNum = scanInputData();
139  
140               //表示開始の区切り
141               printSeparateMark();
142    
143           }
144  
145       }
146  
147       /**
148        * キー入力処理
149        */
150       private static int scanInputData() {
151  
152           /////////////////////////////////////////////////////
153           //キー入力処理 そのまま書き写してください ここから
154           int tmpInputNum = 0;//入力番号初期化
155           while (true) {
156               try {
157                   //初期化処理
158                   final int IMPUT_MAX = 5;//最大入力値
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                       break;
166                   } else {
167                       System.out.println("※ コマンドは" + IMPUT_MAX + "以下で入力して下さい ※ ");
168                       System.out.print(">");
169                   }
170               } catch (Exception e) {
171                   System.out.println("※ 数字以外は入力しないで下さい ※ ");
172                   System.out.print(">");
173               }
174           }
175           //キー入力処理 そのまま書き写してください ここまで
176           /////////////////////////////////////////////////////
177  
178           //入力番号を返す
179           return tmpInputNum;
180       }
181  
182       /**
183        * 区切り処理
184        */
185       private static void printSeparateMark() {
186           //表示終了の区切り
187           System.out.println("");
188           System.out.println("######################################################");
189           System.out.println("");
190       }
191  
192       /**
193        * オープニング処理モード
194        */
195       private static void execModeOpenig() {
196           System.out.println("テスト:オープニング開始"); //テスト用:表示確認
197    
198           printWait();//待機表示処理
199       }
200  
201       /**
202        * 行動処理モード
203        */
204       private static void execModeAction() {
205           //***** 部屋の状況と行動のコマンドを表示する *****
206  
207           //部屋の状況を表示(部屋ごとの処理)
208           //もし入口なら
209           if (nowRoomNum == TAR_ROOM_ENTRANCE) {
210               System.out.println("S-01:ここは入口です。");
211  
212           //もし廊下なら
213           } else if (nowRoomNum == TAR_ROOM_PASSAGE) {
214               System.out.println("S-02:ここは廊下です。");
215  
216           //もし寝室なら
217           } else if (nowRoomNum == TAR_ROOM_BED) {
218               System.out.println("S-03:ここは寝室です。");
219           }
220  
221           //行動コマンドの一覧を表示
222           System.out.println("");
223           System.out.println("---------------------------------------------");
224           System.out.println("どうする?");
225           System.out.println("1:移動 2:見る 3:使う");
226           System.out.print(">");
227       }
228  
229      /**
230       * 対象処理モード
231       */
232      private static boolean execModeTarget() {
233         //***** 入力された行動コマンドから対象コマンドを表示する *****
234    
235         //対象コマンドの一覧を表示
236         System.out.println("---------------------------------------------");
237    
238         //部屋ごとの処理
239         //***************
240         //もし入口なら
241         if (nowRoomNum == TAR_ROOM_ENTRANCE) {
242            //もし移動なら
243            if (inputNum == ACT_MOVE) {
244               selectMove();//対象モード 移動表示処理
245    
246            //もし見るなら
247            } else if (inputNum == ACT_LOOK) {
248               //全部の部屋共通の表示
249               System.out.println("何を見る?");
250               
251               //対象コマンド表示(ドア)
252               System.out.println(TAR_LOOK_ENTRANCE_DOOR + ":ドア");
253               
254            //もし使うなら
255            } else if (inputNum == ACT_USE) {
256               selectUse();//対象モード 使う表示処理
257    
258            //それ以外なら
259            } else {
260               System.out.println("無効なコマンド番号です:" + inputNum);
261               printWait();//待機表示処理
262    
263                return false;
264            }
265    
266         //***************
267         //もし廊下なら
268         } else if (nowRoomNum == TAR_ROOM_PASSAGE) {
269            //もし移動なら
270            if (inputNum == ACT_MOVE) {
271               selectMove();//対象モード 移動表示処理
272    
273            //もし見るなら
274            } else if (inputNum == ACT_LOOK) {
275               //全部の部屋共通の表示
276               System.out.println("何を見る?");
277               
278               //対象コマンド表示(窓、絵画)
279               System.out.println(TAR_LOOK_PASSAGE_WINDOW + ":窓");
280               System.out.println(TAR_LOOK_PASSAGE_PICTURE + ":絵画");
281               
282            //もし使うなら
283            } else if (inputNum == ACT_USE) {
284               selectUse();//対象モード 使う表示処理
285    
286            //それ以外なら
287            } else {
288                System.out.println("無効なコマンド番号です:" + inputNum);
289                printWait();//待機表示処理
290    
291                return false;
292            }
293    
294         //***************
295         //もし寝室なら
296         } else if (nowRoomNum == TAR_ROOM_BED) {
297            //もし移動なら
298            if (inputNum == ACT_MOVE) {
299               selectMove();//対象モード 移動表示処理
300    
301            //もし見るなら
302            } else if (inputNum == ACT_LOOK) {
303               //全部の部屋共通の表示
304               System.out.println("何を見る?");
305            
306               //対象コマンド表示(ベット、テーブル、金庫)
307               System.out.println(TAR_LOOK_BED_BED + ":ベッド");
308               System.out.println(TAR_LOOK_BED_TABLE + ":テーブル");
309               System.out.println(TAR_LOOK_BED_SAFE + ":金庫");
310               
311            //もし使うなら
312            } else if (inputNum == ACT_USE) {
313               selectUse();//対象モード 使う表示処理
314    
315            //それ以外なら
316            } else {
317               System.out.println("無効なコマンド番号です:" + inputNum);
318               printWait();//待機表示処理
319    
320               return false;
321            }
322         }
323    
324         //対象コマンド共通の表示
325         System.out.print(">");
326    
327         return true;
328      }
329    
330      /**
331       * 結果処理モード
332       */
333      private static boolean execModeResult() {
334         //***** 入力された対象コマンド別に実行処理と表示をする *****
335    
336         boolean endingFlg = false;//エンディングフラグ
337    
338         //部屋ごとの処理
339         //***************
340         //もし入口なら
341         if (nowRoomNum == TAR_ROOM_ENTRANCE) {
342            //行動コマンド選択別処理:保存しておいた値を使用
343            //もし移動なら
344            if (keepActNum == ACT_MOVE) {
345               resultMove();//結果モード 移動表示処理
346    
347            //もし見るなら
348            } else if (keepActNum == ACT_LOOK) {
349                //選択処理表示
350                //ドア
351                if (inputNum == TAR_LOOK_ENTRANCE_DOOR) {
352                  System.out.println("L-01:扉です。");
353    
354                //それ以外なら
355                } else {
356                  System.out.println("無効なコマンド番号です:" + inputNum);
357                }
358                  
359            //もし使うなら
360            } else if (keepActNum == ACT_USE) {
361               //アイテム処理
362               //暗証番号
363               if (inputNum == TAR_USE_ITEM_CODE_5963
364                     || inputNum == TAR_USE_ITEM_CODE_3156
365                     || inputNum == TAR_USE_ITEM_CODE_3150) {
366                  System.out.println("U-01:使えません。");
367    
368               //鍵
369               } else if (inputNum == TAR_USE_ITEM_KEY) {
370                   if (itemKeyFlg) {
371                       System.out.println("U-02:ドアの鍵穴には入らない。");
372    
373                   } else {
374                       System.out.println("無効なコマンド番号です:" + inputNum);
375                   }
376    
377               //爆弾
378               } else if (inputNum == TAR_USE_ITEM_BOM) {
379                   if (itemBomFlg ) {
380                       System.out.println("U-03:爆弾でドアを吹き飛ばしました。");
381                       System.out.println("脱出しました。エンディングへ");
382    
383                       endingFlg  = true;//エンディング処理モードへ移行する
384    
385                   } else {
386                       System.out.println("無効なコマンド番号です:" + inputNum);
387                   }
388    
389               //それ以外なら
390               } else {
391                   System.out.println("無効なコマンド番号です:" + inputNum);
392               }
393            }
394    
395         //***************
396         //もし廊下なら
397         } else if (nowRoomNum == TAR_ROOM_PASSAGE) {
398            //行動コマンド選択別処理:保存しておいた値を使用
399            //もし移動なら
400            if (keepActNum == ACT_MOVE) {
401               resultMove();//結果モード 移動表示処理
402    
403            //もし見るなら
404            } else if (keepActNum == ACT_LOOK) {
405               //選択処理表示
406               //窓
407               if (inputNum == TAR_LOOK_PASSAGE_WINDOW) {
408                  System.out.println("L-02:窓の外は海です。");
409    
410               //絵画
411               } else if (inputNum == TAR_LOOK_PASSAGE_PICTURE) {
412                  System.out.println("L-03:絵です。");
413    
414               //それ以外なら
415               } else {
416                  System.out.println("無効なコマンド番号です:" + inputNum);
417               }
418    
419            //もし使うなら
420            } else if (keepActNum == ACT_USE) {
421               //行動コマンド選択別処理:保存しておいた値を使用
422               //アイテム処理
423               //暗証番号
424               if (inputNum == TAR_USE_ITEM_CODE_5963
425                     || inputNum == TAR_USE_ITEM_CODE_3156
426                     || inputNum == TAR_USE_ITEM_CODE_3150) {
427                  System.out.println("U-01:使えません。");
428    
429               //鍵
430               } else if (inputNum == TAR_USE_ITEM_KEY) {
431                   if (itemKeyFlg) {
432                       System.out.println("U-04:ここには鍵を使うものが無い。");
433    
434                   } else {
435                       System.out.println("無効なコマンド番号です:" + inputNum);
436                   }
437    
438               //爆弾
439               } else if (inputNum == TAR_USE_ITEM_BOM) {
440                   if (itemBomFlg ) {
441                       System.out.println("U-05:爆発させても意味が無い。");
442    
443                   } else {
444                       System.out.println("無効なコマンド番号です:" + inputNum);
445                   }
446    
447               //それ以外なら
448               } else {
449                   System.out.println("無効なコマンド番号です:" + inputNum);
450               }
451            }
452    
453         //***************
454         //もし寝室なら
455         } else if (nowRoomNum == TAR_ROOM_BED) {
456            //行動コマンド選択別処理:保存しておいた値を使用
457            //もし移動なら
458            if (keepActNum == ACT_MOVE) {
459               resultMove();//結果モード 移動表示処理
460    
461            //もし見るなら
462            } else if (keepActNum == ACT_LOOK) {       
463               //選択処理表示
464               //ベッド
465               if (inputNum == TAR_LOOK_BED_BED) {
466                  System.out.println("L-04:大きなベッドです。");
467    
468               //テーブル
469               } else if (inputNum == TAR_LOOK_BED_TABLE) {
470                  System.out.println("L-05:何も無いテーブルです。");
471    
472                  tableLookCount += 1;//見るカウンタを加算
473    
474                  //見るカウントチェック
475                  if (tableLookCount == 2) {
476                     System.out.println("L-06:あ、そう言えば、・・・");
477    
478                  //3回以上見たら鍵取得
479                  } else if (tableLookCount >= 3) {
480                      tableLookCount = 3;//何回見てもこれ以上大きくさせない
481    
482                     //鍵をまだ見つけてなければ
483                     if (!itemKeyFlg) {
484                        System.out.println("L-07:<アイテム>:金庫の鍵を手に入れました");
485    
486                         itemKeyFlg = true;//キーアイテムフラグを立てる
487                     }
488                  }
489    
490               //金庫
491               } else if (inputNum == TAR_LOOK_BED_SAFE) {
492                  System.out.println("L-08:開けるには暗証番号と鍵が必要です。");
493    
494               //それ以外なら
495               } else {
496                  System.out.println("無効なコマンド番号です:" + inputNum);
497               }
498    
499            //もし使うなら
500            } else if (keepActNum == ACT_USE) {
501                //アイテム処理
502               //暗証番号(5963)
503               if (inputNum == TAR_USE_ITEM_CODE_5963) {
504                  //暗証番号:鍵を持っている場合のみ入力可能
505                  if (itemKeyFlg) {
506                     System.out.println("U-06:この番号じゃない。");
507    
508                  } else {
509                     System.out.println("U-09:鍵を持っていないと入力しても意味がありません。");
510                  }
511    
512                //暗証番号(3156)
513               } else if (inputNum == TAR_USE_ITEM_CODE_3156) {
514                  //暗証番号:鍵を持っている場合のみ入力可能
515                  if (itemKeyFlg) {
516                     System.out.println("U-07:<アイテム>:爆弾を手に入れました");
517    
518                      itemBomFlg = true;//爆弾アイテムフラグを立てる
519    
520                  } else {
521                     System.out.println("U-09:鍵を持っていないと入力しても意味がありません。");
522                  }
523    
524               //暗証番号(3150)
525               } else if (inputNum == TAR_USE_ITEM_CODE_3150) {
526                  //暗証番号:鍵を持っている場合のみ入力可能
527                  if (itemKeyFlg) {
528                     System.out.println("U-08:この番号じゃない。");
529    
530                  } else {
531                     System.out.println("U-09:鍵を持っていないと入力しても意味がありません。");
532                  }
533    
534               //鍵
535               } else if (inputNum == TAR_USE_ITEM_KEY) {
536                  if (itemKeyFlg) {
537                     System.out.println("U-10:金庫の鍵はこれでOKです。");
538    
539                  } else {
540                     System.out.println("無効なコマンド番号です:" + inputNum);
541                  }
542    
543               //爆弾
544               } else if (inputNum == TAR_USE_ITEM_BOM) {
545                  if (itemBomFlg ) {
546                     System.out.println("U-11:ベッドを壊さないで下さい。");
547    
548                  } else {
549                     System.out.println("無効なコマンド番号です:" + inputNum);
550                  }
551    
552               //それ以外なら
553               } else {
554                  System.out.println("無効なコマンド番号です:" + inputNum);
555               }
556            }
557         }
558    
559           //共通の処理
560           printWait();//待機表示処理
561    
562           return endingFlg;//モード変更フラグを戻す
563      }
564    
565       /**
566        * エンディング処理モード
567        */
568       private static void execModeEnding() {
569           System.out.println("テスト:エンディング開始"); //テスト用:表示確認
570    
571           printWait();//待機表示処理
572       }
573    
574      /**
575       * 対象処理モード 移動表示処理
576       */
577      private static void selectMove() {
578         //対象コマンド移動先表示
579         System.out.println("どの部屋に移動する?");
580         System.out.println(TAR_ROOM_ENTRANCE + ":入口");
581         System.out.println(TAR_ROOM_PASSAGE + ":廊下");
582         System.out.println(TAR_ROOM_BED + ":寝室");
583      }
584      
585      /**
586       * 対象処理モード 使う表示処理
587       */
588      private static void selectUse() {
589         //全部の部屋共通の表示
590         System.out.println("何を使う?");
591    
592         //暗証番号表示
593         System.out.println(TAR_USE_ITEM_CODE_5963 + ":金庫の暗証番号:5963");
594         System.out.println(TAR_USE_ITEM_CODE_3156 + ":金庫の暗証番号:3156");
595         System.out.println(TAR_USE_ITEM_CODE_3150 + ":金庫の暗証番号:3150");
596    
597         //アイテムの取得有無
598         //金庫の鍵
599         if (itemKeyFlg) {
600            System.out.println(TAR_USE_ITEM_KEY + ":金庫の鍵");
601         }
602         //爆弾
603         if (itemBomFlg) {
604            System.out.println(TAR_USE_ITEM_BOM + ":爆弾");
605         }
606    
607      }
608      
609      /**
610       * 結果処理モード 移動表示処理
611       */
612      private static void resultMove() {
613         //全部の部屋共通の表示
614           //もしどこかの部屋にいたら
615           if (inputNum == TAR_ROOM_ENTRANCE ||
616            inputNum == TAR_ROOM_PASSAGE ||
617            inputNum == TAR_ROOM_BED ) {
618    
619               System.out.println("M-01:別の部屋に行きます。");
620    
621               //現在の部屋を変更する
622               nowRoomNum = inputNum;
623    
624           //それ以外なら
625           } else {
626               System.out.println("無効なコマンド番号です:" + inputNum);
627           }
628    
629      }
630    
631       /**
632        *待機表示処理
633        */
634       private static void printWait() {
635           System.out.println("");
636           System.out.println("---------------------------------------------");
637           System.out.println("-- 1を入力してEnterキーを押してください ---");
638           System.out.print(">");
639       }
640      
641   }
642    
643    
 
 
home

広告
  サイト内検索: