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

コード10:エンディングフラグ 戻り値使用
コード(KottonCastleEscapeのKCEMain.java)
1 現在のコード:現在のコードから 赤色の部分を削除 緑色の部分を切り取り(2のコードの同じ内容部分に貼り付けて移動) して下さい。

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

広告
  サイト内検索: