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

SESSION 13 その61
オープニング、エンディングを作る つづき
  コードの解説

関数の定義側と
呼び出し側に分けて
見ていくよ。

最初に、関数の定義側
結果処理モード関数を
見ていこう。
よろしく
お願いします。
順番ね。
はいっ。


まず、エンディングフラグ。

関数の中の先頭

boolean型の変数
endingFlgを宣言したよ。

今までメンバ変数で
宣言していたのをやめて、
関数の変数に変更したんだ。

エンディングモードに移行したい
場合はこれをtrueにしよう。

最初は false ね。
メンバ変数
の方は削除ね。
うーん・・・

これだと
関数終わると
消えちゃうよね。
まず、この
関数の中だけのフラグ
を作るんだね。

うーん、
今までとどう違うんだろう。
 

テキストアドベンチャーゲーム
エンディングフラグ 戻り値使用
KottonCastleEscapeのKCEMain.java)308行目~
 
・・・      
308     /**  
309       * 結果処理モード  
310      */  
311     private static void execModeResult() {  
312        //***** 入力された対象コマンド別に実行処理と表示をする *****  
313     
314           boolean endingFlg = false;//エンディングフラグ 関数の先頭で
falseでフラグを宣言
315      
・・・      
メンバ変数だったエンディングフラグを削除。
関数の先頭で再度宣言した。


次に
ドアで爆弾を吹き飛ばす
処理の所・・・


つまり
入口>使う>爆弾
の処理の所だな。

そこで endingFlg を
true に変更ね。
えーと、
これはあたし作ったのと
同じだから特に変更無しね。

ここで仮のフラグを立てた
んだね。
エンディング
フラグを
仮にON。
まだ仮ね。
 

テキストアドベンチャーゲーム
エンディングフラグ 戻り値使用
KottonCastleEscapeのKCEMain.java)333行目~
 
・・・      
333           //もし使うなら  
334           } else if (keepActNum == ACT_USE) {  
335              //アイテム処理  
336              //暗証番号  
337              if (inputNum == TAR_USE_ITEM_CODE_5963  
338                    || inputNum == TAR_USE_ITEM_CODE_3150  
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;//エンディング処理モードへ移行する 必要な場所で
フラグをtrue
352              }  
353           }  
・・・      
エンディングにしたい処理の場所で endingFlg を true にする


 
で、関数の最後に
戻り値で、フラグの値を
呼び出し元に戻す。

これで、呼び出し元は
フラグが立ったか判定できる。

関数の戻り値の型は
boolean型に変更してね。
 
なるほど。

戻り値がtrueかfalseか
調べればエンディングに
なったか分かる
んだね。
   
 
 

テキストアドベンチャーゲーム
エンディングフラグ 戻り値使用
KottonCastleEscapeのKCEMain.java)483行目~
 
・・・      
483          //共通の処理  
484          printWait();//待機表示処理  
485     
486           return endingFlg;//モード変更フラグを戻す フラグの結果を
戻り値で返す
487     }  
・・・      
エンディングフラグを戻り値で戻す
 

テキストアドベンチャーゲーム
エンディングフラグ 戻り値使用
KottonCastleEscapeのKCEMain.java)308行目~
 
・・・      
308     /**  
309       * 結果処理モード  
310      */  
311     private static boolean execModeResult() { 戻り値の型を変更
312        //***** 入力された対象コマンド別に実行処理と表示をする *****  
313     
314           boolean endingFlg = false;//エンディングフラグ  
315      
・・・      
関数の戻り値の型をboolean型に変更した


今回のフラグの返し方を
まとめてみよう。


今回はこんな流れだね。

このやり方は、関数を
最後まで実行してから
結果を戻せるよ。

もちろん必要に応じて
値をリターンしてもいい。
そっか!
return文で戻すと途中で
終わっちゃうんだっけ。

今回の場合は、
関数の途中でリターンすると
最後の待機表示処理が
表示されなくなっちゃう
もんね。
柔軟に
使っていこう。
いろいろ
使えそうだね。
 

フラグを使った戻り値の返し方
 
1、関数の先頭でまずフラグをfalseで宣言。
2、必要な所でフラグを立てる。
3、関数の終わりまで処理。
4、フラグを戻り値で返す。
 
・・・      
308     /**  
309       * 結果処理モード  
310      */  
311     private static void execModeResult() {  
312        //***** 入力された対象コマンド別に実行処理と表示をする *****  
313     
314           boolean endingFlg = false;//エンディングフラグ 関数の先頭で
falseでフラグを宣言
     
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
   
335              //アイテム処理  
336              //暗証番号  
337              if (inputNum == TAR_USE_ITEM_CODE_5963  
338                    || inputNum == TAR_USE_ITEM_CODE_3150  
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;//エンディング処理モードへ移行する 必要な場所で
フラグをtrue
352              }  
     
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
   
483         //共通の処理  
484         printWait();//待機表示処理 return文を
使わないので
終わりまで処理が
実行できる
485     
486           return endingFlg;//モード変更フラグを戻す フラグの結果を
戻り値で返す
487     }  
・・・      
途中でリターンしないで関数の最後まで実行できる
関数を最後まで実行してから結果を返したい場合などに向いている。

もちろん、途中でリターンしてもいい。


これで
関数の定義側は
おしまい。

次は呼び出し側ね。
はいっ。
やっぱり
解説の方が
いいわね。
なぽちゃん
上手ー。

 
 

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