オープニング、エンディングを作る つづき |
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
次は呼び出し側を
見ていこう。
呼び出し元は
関数から戻り値で
エンディングフラグを
受け取って判定する。
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; |
|
・・・ |
|
|
|
|
戻り値を保存したい場合は、先に保存してから判定するようにする。 |
|
|
 |
|
 |
|
|
|
|
|
あるって
顔してるよね。 |
 |
|
 |
うーん・・・。 |
|
|