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

SESSION 13 その39
「見る」処理を作る(対象処理モード、結果処理モード) つづき
  変数と定数の追加

まず、
定数と変数を追加しました。

定数

対象コマンド(見る用)を
追加しました。

名前のつけ方とかは
LOOK+「部屋」+「物」にしたよ。
うん、いいね。

部屋別に、
見る物を分けた
んだな。

この定数を使って
「見る」分岐をしよう。
各部屋の
背景だね。
 
 

テキストアドベンチャーゲーム
「見る」処理(対象処理モード、結果処理モード)
KottonCastleEscapeのKCEMain.java)14行目~
 
・・・    
014       //********************************************
015       //                   定数
016       //********************************************     
017       //入力・表示処理モード
018       private static final int MODE_GAME_1_ACT = 1;//行動処理モード(1階層目 どうする?行動コマンド)
019       private static final int MODE_GAME_2_TAR = 2;//対象処理モード(2階層目 なにを?対象コマンド)
020       private static final int MODE_GAME_3_RES = 3;//結果処理モード
021       //行動コマンド
022       private static final int ACT_NONE = 0;//無し
023       private static final int ACT_MOVE = 1;//移動
024       private static final int ACT_LOOK = 2;//見る
025       private static final int ACT_USE = 3;//使う
026       //対象コマンド 移動用 部屋の現在地
027       private static final int TAR_ROOM_ENTRANCE = 1;//入口
028       private static final int TAR_ROOM_PASSAGE = 2;//廊下
029       private static final int TAR_ROOM_BED = 3;//寝室
030       //対象コマンド 見る用(部屋別に用意する)
031       //入口用
032       private static final int TAR_LOOK_ENTRANCE_DOOR = 1;//ドア
033       //廊下用
034       private static final int TAR_LOOK_PASSAGE_WINDOW = 1;//窓
035       private static final int TAR_LOOK_PASSAGE_PICTURE = 2;//絵画
036       //寝室用
037       private static final int TAR_LOOK_BED_BED = 1;//ベッド
038       private static final int TAR_LOOK_BED_TABLE = 2;//テーブル
039       private static final int TAR_LOOK_BED_SAFE = 3;//金庫
040       //********************************************
041       //                   変数
042       //********************************************
043       private static int inputNum = 0;//入力番号
044       private static int nowMode = MODE_GAME_1_ACT;//現在の処理モード:最初は1階層目
045       private static int nowRoomNum = TAR_ROOM_ENTRANCE;//現在位置:ドアの部屋から開始
046       private static int keepActNum = ACT_NONE;//行動コマンド保存用:無しで初期化
047       //アイテムフラグ
048       private static boolean itemKeyFlg = false;//金庫の鍵
049       private static int tableLookCount = 0;//テーブル調査回数
・・・    
対象コマンド(見る用)の定数を追加


定数の番号
部屋別にして1から振りました。


最初、見る用の定数全部で
連番をつけたんだけど・・・。

そしたら、
寝室の対象リストの表示が
7:ベット
8:テーブル
9:金庫
になっちゃったから・・・。

やっぱりリストの表示は
部屋ごとに1番からがいいよね。

だから、部屋別に分けて
対象リストの番号が1番から
表示できるようにしました。
部屋別に
番号分けました。
よくできすぎました。

この娘、センス
あるのかしら?
ないのかしら?
うん、部屋毎に分岐が
違うから定数の番号が
かぶっても大丈夫。

同じ分岐に使う定数の値は
かぶらない様にしよう。
判定できなくなるからね。
 

テキストアドベンチャーゲーム
「見る」処理(対象処理モード、結果処理モード)
KottonCastleEscapeのKCEMain.java)26行目~
 
・・・    
026       //対象コマンド 見る用(部屋別に用意する)
027       //入口用
028       private static final int TAR_LOOK_ENTRANCE_DOOR = 1;//ドア
029       //廊下用
030       private static final int TAR_LOOK_PASSAGE_WINDOW = 1;//窓
031       private static final int TAR_LOOK_PASSAGE_PICTURE = 2;//絵画
032       //寝室用
033       private static final int TAR_LOOK_BED_BED = 1;//ベッド
034       private static final int TAR_LOOK_BED_TABLE = 2;//テーブル
035       private static final int TAR_LOOK_BED_SAFE = 3;//金庫
・・・    
対象コマンドは部屋別に分けて「1」から番号を振った
 

テキストアドベンチャーゲーム
「見る」処理(対象処理モード、結果処理モード)
KottonCastleEscapeのKCEMain.java)186行目~
 
・・・      
185      /**  
186       * 対象処理モード  
187       */  
188      private static void execModeTarget() {  
189         //***** 入力された行動コマンドから対象コマンドを表示する *****  
190      
191         //対象コマンドの一覧を表示  
192         System.out.println("---------------------------------------------");  
193      
194         //部屋ごとの処理  
195         //***************  
196         //もし入口なら  
197          if (nowRoomNum == TAR_ROOM_ENTRANCE) {  
198            //もし移動なら  
199             if (inputNum == ACT_MOVE) {  
200               selectMove();//対象モード 移動表示処理  
201      
202            //もし見るなら  
203            } else if (inputNum == ACT_LOOK) {  
204               //全部の部屋共通の表示  
205               System.out.println("何を見る?");  
206                 
207               //対象コマンド表示(ドア)  
208               System.out.println(TAR_LOOK_ENTRANCE_DOOR + ":ドア"); 1
209                 
210            //もし使うなら  
211            } else if (inputNum == ACT_USE) {  
212               System.out.println("テスト:対象処理モード 使う"); //テスト用:表示確認  
213      
214            }  
215      
216         //***************  
217         //もし廊下なら  
218         } else if (nowRoomNum == TAR_ROOM_PASSAGE) {  
219            //もし移動なら  
220             if (inputNum == ACT_MOVE) {  
221               selectMove();//対象モード 移動表示処理  
222      
223            //もし見るなら  
224            } else if (inputNum == ACT_LOOK) {  
225                //全部の部屋共通の表示  
226               System.out.println("何を見る?");  
227                 
228               //対象コマンド表示(窓、絵画)  
229               System.out.println(TAR_LOOK_PASSAGE_WINDOW + ":窓"); 1
230               System.out.println(TAR_LOOK_PASSAGE_PICTURE + ":絵画"); 2
231                 
232            //もし使うなら  
233            } else if (inputNum == ACT_USE) {  
234               System.out.println("テスト:対象処理モード 使う"); //テスト用:表示確認  
235      
236            }  
237      
238         //***************  
239         //もし寝室なら  
240         } else if (nowRoomNum == TAR_ROOM_BED) {  
241            //もし移動なら  
242            if (inputNum == ACT_MOVE) {  
243               selectMove();//対象モード 移動表示処理  
244      
245            //もし見るなら  
246            } else if (inputNum == ACT_LOOK) {  
247               //全部の部屋共通の表示  
248               System.out.println("何を見る?");  
249              
250               //対象コマンド表示(ベット、テーブル、金庫)  
251               System.out.println(TAR_LOOK_BED_BED + ":ベッド"); 1
252               System.out.println(TAR_LOOK_BED_TABLE + ":テーブル"); 2
253               System.out.println(TAR_LOOK_BED_SAFE + ":金庫"); 3
254                 
255            //もし使うなら  
256            } else if (inputNum == ACT_USE) {  
257               System.out.println("テスト:対象処理モード 使う"); //テスト用:表示確認  
258      
259            }  
260         }  
261      
262           //対象コマンド共通の表示  
263         System.out.print(">");  
264      }  
・・・      
どの部屋も対象リストの表示を1~にできる
 

テキストアドベンチャーゲーム
「見る」処理(対象処理モード、結果処理モード)
KottonCastleEscapeのKCEMain.java)267行目~
 
・・・      
266      /**  
267       * 結果処理モード  
268       */  
269      private static void execModeResult() {  
270         //***** 入力された対象コマンド別に実行処理と表示をする *****  
271      
272         //部屋ごとの処理  
273         //***************  
274         //もし入口なら  
275          if (nowRoomNum == TAR_ROOM_ENTRANCE) { 分岐
276            //行動コマンド選択別処理:保存しておいた値を使用  
277            //もし移動なら  
278             if (keepActNum == ACT_MOVE) {  
279               resultMove();//結果モード 移動表示処理  
280      
281            //もし見るなら  
282            } else if (keepActNum == ACT_LOOK) {  
283               //選択処理表示  
284               //ドア  
285                if (inputNum == TAR_LOOK_ENTRANCE_DOOR) { 1
286                  System.out.println("L-01:扉です。");  
287               }  
288                    
289            //もし使うなら  
290            } else if (keepActNum == ACT_USE) {  
291               System.out.println("テスト:結果処理モード 使う"); //テスト用:表示確認  
292      
293            }  
294      
295         //***************  
296         //もし廊下なら  
297         } else if (nowRoomNum == TAR_ROOM_PASSAGE) { 分岐
298            //行動コマンド選択別処理:保存しておいた値を使用  
299            //もし移動なら  
300             if (keepActNum == ACT_MOVE) {  
301               resultMove();//結果モード 移動表示処理  
302      
303            //もし見るなら  
304            } else if (keepActNum == ACT_LOOK) {  
305                  //選択処理表示  
306                  //窓  
307                   if (inputNum == TAR_LOOK_PASSAGE_WINDOW) { 1
308                     System.out.println("L-02:窓の外は海です。");  
309      
310                  //絵画  
311                  } else if (inputNum == TAR_LOOK_PASSAGE_PICTURE) {  
312                     System.out.println("L-03:絵です。");  
313                  }  
314      
315            //もし使うなら  
316            } else if (keepActNum == ACT_USE) {  
317               System.out.println("テスト:結果処理モード 使う"); //テスト用:表示確認  
318      
319            }  
・・・      
定数の値は両方とも「1」だが、部屋ごとに分岐が違うので判定に問題ない。

同じ分岐で使う場合は、「1」が2つになるので正常に判定できなくなるので注意。


変数
必要なアイテムの鍵フラグ
テーブルを調査した
カウンターを追加しました。
 
おっけ。
初期化は、
アイテムフラグはfalseで
「持ってない」にして
カウンターは0にしたんだな。
 

テキストアドベンチャーゲーム
「見る」処理(対象処理モード、結果処理モード)
KottonCastleEscapeのKCEMain.java)14行目~
 
・・・    
014       //********************************************
015       //                   定数
016       //********************************************     
017       //入力・表示処理モード
018       private static final int MODE_GAME_1_ACT = 1;//行動処理モード(1階層目 どうする?行動コマンド)
019       private static final int MODE_GAME_2_TAR = 2;//対象処理モード(2階層目 なにを?対象コマンド)
020       private static final int MODE_GAME_3_RES = 3;//結果処理モード
021       //行動コマンド
022       private static final int ACT_NONE = 0;//無し
023       private static final int ACT_MOVE = 1;//移動
024       private static final int ACT_LOOK = 2;//見る
025       private static final int ACT_USE = 3;//使う
026       //対象コマンド 移動用 部屋の現在地
027       private static final int TAR_ROOM_ENTRANCE = 1;//入口
028       private static final int TAR_ROOM_PASSAGE = 2;//廊下
029       private static final int TAR_ROOM_BED = 3;//寝室
030       //対象コマンド 見る用(部屋別に用意する)
031       //入口用
032       private static final int TAR_LOOK_ENTRANCE_DOOR = 1;//ドア
033       //廊下用
034       private static final int TAR_LOOK_PASSAGE_WINDOW = 1;//窓
035       private static final int TAR_LOOK_PASSAGE_PICTURE = 2;//絵画
036       //寝室用
037       private static final int TAR_LOOK_BED_BED = 1;//ベッド
038       private static final int TAR_LOOK_BED_TABLE = 2;//テーブル
039       private static final int TAR_LOOK_BED_SAFE = 3;//金庫
040       //********************************************
041       //                   変数
042       //********************************************
043       private static int inputNum = 0;//入力番号
044       private static int nowMode = MODE_GAME_1_ACT;//現在の処理モード:最初は1階層目
045       private static int nowRoomNum = TAR_ROOM_ENTRANCE;//現在位置:ドアの部屋から開始
046       private static int keepActNum = ACT_NONE;//行動コマンド保存用:無しで初期化
047       //アイテムフラグ
048       private static boolean itemKeyFlg = false;//金庫の鍵
049       private static int tableLookCount = 0;//テーブル調査回数
・・・    
アイテムの取得を管理する変数と
イベントをカウントする変数を追加した

 
 

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