next up previous contents
Next: 12. ポインタ I Up: 11. 関数 II Previous: 4. 関数の返り値

5. 課題 12

cd c を実行した後で( ~/c に移動した後で)、以下の課題を やってみよ。

課題 11.1
関数を動かしてみる。

例 7 で、x の値をキーボードから入力出来るように改造し、 色々な値を入力し、動かしてみよ。

課題 11.2
ゲームの表示関数を作る。I

課題 10.4 で作成したゲームでは、メッセージは全て文字であったが、これを もう少し見易くすることを考える。 まず、レーダーを用いたときに敵のコースが数字で表示されたが、これを以下の ように表示するように改良しよう。


Enemy course   0 2 4
              |--E--|

関数の仕様は、引数は敵のコース、返り値はなし、関数名は EnemyCourse とする。


#include <stdio.h>
#include <stdlib.h>

EnemyCourse(int course){
    ...
}

main(){
    ...
        if(lazer==0){
            EnemyCourse(teki_course);
        }
    ...
}

ヒント 高々コースは5個なので、あらかじめ5個分の printf を用意し、 引数の値によって、if 文で分岐するようにする。

課題 11.3
ゲームの表示関数を作る。II

課題 11.2 のプログラムを更に改良し、敵機の距離を表示する部分を次のように表示 するように関数を用いて改造する。


               9876543210
    distance |---E------Y|    E:enemy , Y: yours

敵機が上の図より一つ進むと次のようになる。


               9876543210
    distance |----E-----Y|    E:enemy , Y: yours

関数の仕様は、引数は、全体のコースの長さ(コースの長さを変えても関数は変更なく 使えるようにする)、 敵機との距離、敵機を表す文字で、返り値はなし、 関数名は、EnemyDistance とする。

但し、先の課題とは違い、今度はコースの長さを変えても良いように関数を作りたい ので、あらかじめ printf を用意する方法は使えない。敵の文字を何処に 表示したら良いかは、if 文で判断するようにする。


#include <stdio.h>
#include <stdlib.h>

EnemyCourse( int course ){
    ...
}

EnemyDistance( int courselength, int distance, char enemy){
    ...
}

main(){
    ...
}

ヒント コースの長さ(courselength) だけループで回し、敵との距離に等しい 時には敵の文字を表示し、それ以外は '-' を表示するようにすれば良い。

プレイしてみて、問題がないかどうか確かめよ。

 

作成したプログラムをメイルで、creport まで送ること。 但し、題は kadai11 とすること。

前回の復習
関数の定義
関数の動作を定義する

関数の動作をプログラムすることを関数を定義するという。関数の定義は、以下の ように書く。


    [関数の型]  関数名( 引数の型 引数 [,...] ){
            文
    }

関数の型を省略すると整数型になる。

関数の引数
関数に情報を渡す

関数に情報を渡すのには、引数を使う。引数の型と順序は、呼び出し元と定義とで 一致していなければならないが、変数名は一致してなくても良い。

関数の終了

関数は、関数の定義の最初の { に対応する } で終了する。 (呼び出しもとに帰る。)

また、return 命令で終了させることも出来る。

返り値
関数の返り値

関数の返り値を決めるには、return 命令の後に式を書く。


    return   式;

プログラムの終了

exit() 関数を用いることで、任意の時点でプログラムを終了させることが出来る。 引数は、プログラムの呼び出し元に返され、通常は正常終了は 0 を指定する。



Noriyo Kanayama 平成14年11月26日