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

SESSION 13 その62
オープニング、エンディングを作る つづき

次は呼び出し側を
見ていこう。


呼び出し元は
関数から戻り値で
エンディングフラグを
受け取って判定する。

trueならモード変更ね。

これで変更完了!
ここで始めてモード変更
するんだね。

これで戻り値で
モード変更できたんだ!
おしまい。
やったね。
 

テキストアドベンチャーゲーム
エンディングフラグ 戻り値使用
KottonCastleEscapeのKCEMain.java)109行目~
 
・・・      
109                   //***************  
110                   //結果処理モード  
111                   case MODE_GAME_3_RES:  
112                      //結果処理モード関数呼び出し  
113                       boolean endingFlg = execModeResult(); フラグを戻り値で取得。
エンディングフラグに代入
114      
115                       //エンディング判定  
116                       if(endingFlg){ フラグで判定
117                           //エンディング処理モードに変更する  
118                           nowMode = MODE_ENDING; trueならモード変更
119      
120                       }else{  
121                           //行動処理モード(1階層目)に戻す  
122                           nowMode = MODE_GAME_1_ACT; falseなら継続
123                       }  
124                        
125                       break;  
・・・      
戻り値を判定して処理を分岐させた

  条件式に関数を書く

省略形って感じ。

覚えておこう。
ちなみに、
関数は、条件式に直接
書くこともできる。


関数の戻り値が
boolean型の場合、

if(execModeResult()) {・・・

の様に書いて、制御文に
直接、戻り値を渡せる。
 
えー!
条件式に関数って
書けたんだ!


この書き方だと、
受け渡し用のエンディング
フラグが不要になるから・・・

戻り値を取っておく必要が
無い場合に使えるね。
  なんか
不思議ー
 
 

テキストアドベンチャーゲーム
エンディングフラグ 戻り値使用
KottonCastleEscapeのKCEMain.java)109行目~
 
 
条件式に関数を書く例
・・・      
109                   //***************  
110                   //結果処理モード  
111                   case MODE_GAME_3_RES:  
112                      //結果処理モード関数呼び出し  
113                       if(execModeResult()){ 戻り値の値を直接
制御文に渡す
114                           //エンディング処理モードに変更する  
115                           nowMode = MODE_ENDING;  
116                       }else{  
117                           //行動処理モード(1階層目)に戻す  
118                           nowMode = MODE_GAME_1_ACT;  
119                       }  
120                        
121                       break;  
122      
関数の戻り値がboolean型の場合、
条件式に関数を書いて直接、制御文に渡すことも出来る。

この場合、直接、値を渡すのでフラグ変数が不要になる。

戻り値はそのまま消える。



ことのイメージ
 
・・・      
    //*****************  
   //関数の呼び出し例  
   //*****************  
       
       //変数を宣言  
       int nowMode = MODE_GAME;//ゲームモードで初期化  
       int nowStoneCount = 999;//魔法石の数  
      
       //結果の戻り値でモードを変更する。  
       //直接代入するので、モード切替処理とフラグは不要。  
       if(checkEndingEX(nowStoneCount) >= 10) { 関数の戻り値と
数値の比較もできる
      
       }else(checkEndingEX(nowStoneCount) >= 5){ 判定の度に関数が
実行される
      
       }  
・・・      
 
このコードはサンプルです。入力しても動きません。
 

書式だけ見てね。

内容は変だから
見ないでね。
 
じゃあ、関数の戻り値が
int型とかの数値なら・・・

関数の戻り値と数値の
比較もできるの?

魔法石の例で考えたよ。
 
ああ、できるよ。

ただし、この例の場合、
関数が2回実行され
ちゃうからね。

フラグに写してから
判定しよう。
 


戻り値が比較できる型同士なら
変数との比較も出来るし、
関数同士の比較だってできる。

やってる事自体は、
戻り値を一度変数に写してから
比較するのと同じだけどね。
いろいろな
書き方が
出来るんだね。
臨機応変で
使おう。
はい。
 

条件式に関数を書く(関数の戻り値の判定)
    関数を条件式に直接書くことが出来る(例の戻り値はboolean型)    
  if(checkTestBoolean()){
   

     System
.out.println("条件式に直接書けます");

   
}
   
         
    戻り値と同じ型の値との比較も可能(例の戻り値はint型)    
  if(checkTestInt() > 10){
   

     System
.out.println("数値と比較も出来ます");

   
}
   
         
    変数との比較も可能(例の戻り値はint型)    
  int a = 100;

if(checkTestInt() > a){
   

     System
.out.println("もちろん変数との比較もOK");

   
}
   
         
    関数同士の比較も可能(例の戻り値はint型)    
  if(checkTestA() > checkTestB()){
   

     System
.out.println("関数同士の比較だって可能。");

   
}
   
 

  参考:推奨しない書き方

使ってるの
見たことないね。

分かりづらいし。

いろいろな書き方が
できるって参考ね。
実は、条件式に関数を書いて
同時に戻り値を
受け取る事もできる


でも、普通やらないからね。

戻り値を保存したい場合は
先に保存してから判定しよう。
 
使わないように
するね。
  なぽちゃんも
使った事
ないんだ。。。
 
 

条件式に関数を書く例(非推奨)
 
・・・      
                    //***************  
                    //結果処理モード  
                    case MODE_GAME_3_RES:  
       
                       boolean endingFlg = false;  
       
                       //結果処理モード関数呼び出し  
                        if(endingFlg = execModeResult()){ 戻り値を変数に
受け取って
判定をする
                            //エンディング処理モードに変更する  
                            nowMode = MODE_ENDING;  
                        }else{  
                            //行動処理モード(1階層目)に戻す  
                            nowMode = MODE_GAME_1_ACT;  
                        }  
                         
                        break;  
122      
戻り値を変数に受け取り、条件式を判定をする。
一般的に使われない書き方。
セッションでは推奨しないし使わない。
 
 
・・・      
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;  
・・・      
戻り値を保存したい場合は、先に保存してから判定するようにする。

     

コードの解説は
おしまい。


何か質問ある?
ありがとう
ございました。

えーと質問は・・・
あるって
顔してるよね。
うーん・・・。

 
 

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