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

SESSION 13 その60
オープニング、エンディングを作る つづき
  ポイント:関数の戻り値で処理を分岐させる

メンバ変数のエンディングフラグを
関数の引数と戻り値を
使ったやり方
に書き直したよ。

写しながら理解するように
読んでね。

説明するから、今はなんとなく
でいいよ。
「理解するように読む」ね!

うーん、どうやって
エンディング処理モードに
してるのかな?
こっち側で
解説久しぶりー。

なんか
落ち着くわあ。
うーんと、
なにが
違うのかな。
 
コード10:エンディングフラグ 戻り値使用 
コードをリンク先から参照して下さい


はいっ!

なぽちゃん、
できました。
よし、じゃあ、
まずはやり方を
ざっと見て行こう。

やり方の概要
説明するよ。
 
まずは概要ね。

難しそうに見えるけど
じっくり読めば
そうでもないから。

何回かゆっくり
読んでね。

  処理の概要

やり方の
例を作って
みたよ。

イメージね。
関数の戻り値は
処理の分岐に使える。


関数の処理の成功、失敗・・・

関数の結果を真偽値の
戻り値で返すことで
呼び出し元は、その値で
処理を分岐できる。

つまり、
関数をフラグのように
使えるんだ。
 
 

関数の戻り値をフラグのように使う例(真偽値)
 
1、関数を定義する。
関数 checkEnding
エンディングチェック関数。引数の魔法石の数でエンディングかチェックする。

結果をboolean型の戻り値で返す。
引数の値が10以上なら成功、それ以外は失敗になる。
戻り値 boolean型
処理に成功した場合の戻り値
(引数 count が 10以上)
true
それ以外の場合の戻り値
(引数 count が 10以上以外。つまり10未満)
false
・・・    
    //*****************
   //関数の定義例
   //*****************
    
   //エンディングかチェックする関数:魔法石の数をチェック
   static private boolean checkEnding(int count) {
       //魔法石の数が10個以上集まっていたら
       if(count >= 10){
           return true;//成功:エンディングへ
       }
    
       return false;//それ以外はfalse
   }
・・・    
 
2、呼び出し元は、関数の戻り値を受け取って判定。trueならモード変更。
関数 checkEnding を使う(呼び出し元で戻り値を判定)
もしtrueの場合 モード変更
もしfalseの場合 今のモードを継続
・・・    
    //*****************
   //関数の呼び出し例
   //*****************
    
        //変数を宣言
       int nowMode = MODE_GAME;//ゲームモードで初期化
       int nowStoneCount = 999;//魔法石の数
    
       //判定結果を戻り値で受け取る:魔法石の判定結果
       boolean resultFlg = checkEnding(nowStoneCount);
    
       //モード切替処理:関数の結果が成功か判定する
       if(resultFlg){
           //モードを変更する。魔法石が集まった!エンディングモードへ
            nowMode = MODE_ENDING;
       }
・・・    
※MODE_GAME、MODE_ENDINGはint型のメンバ変数(定数)とします
 
関数の戻り値で処理を分岐させる
このコードはサンプルです。入力しても動きません。
 
そうか!

関数の処理が
成功したらtrueで
それ以外はfalse。


関数の処理の結果を
フラグみたいに使う

んだね。
  魔法石の数を
チェックする
関数なんだ。
 


これを応用すれば、
関数の結果で
複数の処理に分岐
させる
ことも出来るね。
数値の戻り値を使って
直接モード変更してる!

if文で戻り値を判定しないでも
モードが変えられるんだ。

戻り値は、計算結果を
返すだけじゃないんだね!
例だってば。

このゲーム
遊びたーい!

次作るの
魔法石
使いたいね!
 

関数の戻り値をフラグのように使う例(数値)
 
1、関数を定義する。
関数 checkEndingEX
エンディングチェック関数。引数の魔法石の数でエンディングかチェックする。

結果をint型定数の戻り値で返す。
引数の値が
・10以上なら、バッドエンディングモード
・100以上なら、グッドエンディングモード
・それ以外は、ゲームモードでゲーム継続
戻り値 int型定数
魔法石が10以上の場合 MODE_ENDING_BAD
魔法石が100以上の場合 MODE_ENDING_GOOD
それ以外の場合 MODE_GAME
・・・    
    //*****************
   //関数の定義例
   //*****************
    
   //エンディングかチェックする関数:魔法石の数をチェック
   static private int checkEndingEX(int count){
       //魔法石の数が100以上ならグッドエンディングへ
       if(count >= 100){
           return MODE_ENDING_GOOD;
    
       //魔法石の数が10以上ならバッドエンディングへ
       }else(count >= 10){
           return MODE_ENDING_BAD;
        }
     
        return MODE_GAME;//それ以外はゲームモード
   }
・・・    
※MODE_GAME、MODE_ENDING_GOOD、MODE_ENDING_BADは、
int型のメンバ変数(定数)とします
 
2、呼び出し元は、関数の戻り値を直接モード変数に代入。モード変更する。
関数 checkEndingEXを使う(戻り値を代入して直接分岐)
戻り値を直接 nowMode に代入 分岐の判定をしないでモード変更できる
フラグも不要
・・・    
    //*****************
   //関数の呼び出し例
   //*****************
     
       //変数を宣言
       int nowMode = MODE_GAME;//ゲームモードで初期化
       int nowStoneCount = 999;//魔法石の数
    
       //結果の戻り値でモードを変更する。
       //直接代入するので、モード切替処理とフラグは不要。
       nowMode = checkEndingEX(nowStoneCount);
・・・    
 
関数の戻り値で「複数」の分岐をさせる
このコードはサンプルです。入力しても動きません。


やり方の概要は
こんな感じ。

戻り値の使い方の
1つとして覚えてくれ。
今は
なんとなく
でいいよ。

これから普通に
使ってくから
慣れるよ。
はいっ。

まだなんとなく
だけど。
ほんとに
いろいろな書き方が
できるんだね。


うーん・・・

でも、実際にどんな風に
使うのかな。

  動作テスト

じゃあ、
改変したコードを
実行して動作を確認
して見てくれ。
はいっ。

えーと・・・
動作は前と変わりません。

ちゃんとモード変更も
出来てます。
おっけーね?
同じです!

実行して動作が変わらないのを確認して下さい


 
OK。

じゃあ、
コードがどう変わったか、
内容を説明していこう。
 
はいっ。

実際に使った場合の
書き方ね。
  お願い
しますっ。
 


 
 

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