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

SESSION 13 その55
オープニング、エンディングを作る つづき
  ヒント1:エンディングフラグを作る

うーん、うーん・・・
できないな・・・。

どうしたら
いいのかな・・・?
いいね、
悩んで考えるのは
いいことだ。

どんどん悩めー。

今回はヒント無し
だからねー。
ううっ・・・

調子に
のりすぎ
ちゃった・・・
自信満々
だったしねー

いやほーい。



ねーねー
お願い。

独り言だけど。
うーんとね。独り言なんだけど。

結果処理モードから
エンディング処理モードに
うまく移行できないの。


爆弾で扉を壊したら
エンディング開始でしょ。
こんな感じで作ってみたんだけど
うまくいかないんだよね。

どうやって作ったらいいのかな?

なぽちゃんも独り言
言いたくなったでしょ?
 
 

結果処理モード(終了判定処理を考える)

エンディング処理モードへ移行させたい
 

テキストアドベンチャーゲーム
「使う」処理(対象処理モード、結果処理モード)
KottonCastleEscapeのKCEMain.java)
 
結果処理モード関数
・・・    
270      /**
271        * 結果処理モード
272       */
273      private static void execModeResult() {
274         //***** 入力された対象コマンド別に実行処理と表示をする *****
275    
276         //部屋ごとの処理
277         //***************
278         //もし入口なら
279         if (nowRoomNum == TAR_ROOM_ENTRANCE) {
280            //行動コマンド選択別処理:保存しておいた値を使用
281            //もし移動なら
282            if (keepActNum == ACT_MOVE) {
283               resultMove();//結果モード 移動表示処理
284    
285            //もし見るなら
286            } else if (keepActNum == ACT_LOOK) {
287               //選択処理表示
288               //ドア
289               if (inputNum == TAR_LOOK_ENTRANCE_DOOR) {
290                  System.out.println("L-01:扉です。");
291               }
292                  
293            //もし使うなら
294            } else if (keepActNum == ACT_USE) {
295               //アイテム処理
296               //暗証番号
297               if (inputNum == TAR_USE_ITEM_CODE_5963
298                     || inputNum == TAR_USE_ITEM_CODE_3156
299                     || inputNum == TAR_USE_ITEM_CODE_3150) {
300                  System.out.println("U-01:使えません。");
301    
302               //鍵
303               } else if (inputNum == TAR_USE_ITEM_KEY) {
304                       System.out.println("U-02:ドアの鍵穴には入らない。");
305    
306               //爆弾
307               } else if (inputNum == TAR_USE_ITEM_BOM) {
308                       System.out.println("U-03:爆弾でドアを吹き飛ばしました。");
309                       System.out.println("脱出しました。エンディングへ");
310    
311                      nowMode = MODE_ENDING;//エンディング処理モードへ移行する
312               }
313            }
・・・    
扉を破壊した後、現在の処理モードをエンディング処理モードに切り替えた。
 
 
 
メイン関数(モード切替処理部分)
・・・    
071               /////////////////////////////////////////////////////
072               //実行処理(選択されたコマンドによって表示)
073               switch (nowMode) {
   
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                
097                   //***************
098                   //結果処理モード
099                   case MODE_GAME_3_RES:
100                      //結果処理モード関数呼び出し
101                      execModeResult();
102    
103                      //行動処理モード(1階層目)に戻す
104                      nowMode = MODE_GAME_1_ACT;
105                      
106                       break;
107                   //***************
108                   //エンディング処理モード
109                   case MODE_ENDING:                    
110  
111                       break;
112               }
・・・    
しかし、メイン関数に処理が戻ってきた後、値が上書きされてしまう。

エンディング処理モードに移行するにはどうすればいい?
 
思いっきりヒント
要求してるし!
  はいはい。
 


えーと、この場合は
エンディング用のフラグを
作ったらいい
ね。

メンバ変数でエンディングフラグを
作っておいて、爆弾で扉を壊した時
そのフラグを立てればいい。
なるほど!

メイン処理側の
モード切替処理で、
そのフラグを使って
次のモードを決めたら
いいんだね。

こんな感じかな?
いいんじゃ
ないかな。

ひとりごとー
フラグを使えば
よかったんだ。
 

ことのイメージ
 
結果処理モード関数
・・・    
       /**
         * 結果処理モード
        */
       private static void execModeResult() {
          //***** 入力された対象コマンド別に実行処理と表示をする *****
     
          //部屋ごとの処理
          //***************
          //もし入口なら
          if (nowRoomNum == TAR_ROOM_ENTRANCE) {
             //行動コマンド選択別処理:保存しておいた値を使用
             //もし移動なら
             if (keepActNum == ACT_MOVE) {
                resultMove();//結果モード 移動表示処理
     
             //もし見るなら
             } else if (keepActNum == ACT_LOOK) {
                //選択処理表示
                //ドア
                if (inputNum == TAR_LOOK_ENTRANCE_DOOR) {
                   System.out.println("L-01:扉です。");
                }
                   
             //もし使うなら
             } 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) {
                        System.out.println("U-02:ドアの鍵穴には入らない。");
     
                //爆弾
                } else if (inputNum == TAR_USE_ITEM_BOM) {
                        System.out.println("U-03:爆弾でドアを吹き飛ばしました。");
                        System.out.println("脱出しました。エンディングへ");
     
                       endingFlg = true;//エンディング処理モードへ移行する
                }
             }
・・・    
エンディング移行用のフラグを立てる。
 
 
 
メイン関数(モード切替処理部分)
・・・    
                /////////////////////////////////////////////////////
                //実行処理(選択されたコマンドによって表示)
                switch (nowMode) {
   
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   
                    //***************
                    //結果処理モード
                    case MODE_GAME_3_RES:
                       //結果処理モード関数呼び出し
                       execModeResult();
     
                        //エンディング判定
                        if(endingFlg){
                            //エンディング処理モードに変更する
                            nowMode = MODE_ENDING;
     
                        }else{
                            //行動処理モード(1階層目)に戻す
                            nowMode = MODE_GAME_1_ACT;
                        }
                       
                        break;
                    //***************
                    //エンディング処理モード
                    case MODE_ENDING:                    
   
                        break;
                }
・・・    
エンディングフラグが立っているかで次のモードを切り替える。


なぽちゃん、
独り言ありがと!


やってみるね!
大好きー
どーいたまして。
もう、大丈夫だな。

あと少し。
がんばってね。

     






うーん・・・

ねえ、ねえ、なぽちゃん、
これも独り言なんだけどね、

待機する処理は・・・

もうっ、
ちゃんと聞いて!
あのね・・・

独り言なんでしょ!!!

解答は次のページです
 
 

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