10.9 課題10

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

課題 10.1
乱数発生関数を使う I

前ページの強制終了の例を打ち込んで動かしてみよ。

課題 10.2
乱数発生関数を使う II

先の課題では、seed には定数を代入したが、キーボードから入力する ように改造せよ。

課題 10.3
乱数発生関数を使う III

0 から 9 までの間の乱数を発生させるプログラムを作成せよ。但し、 seed にはキーボードから適当な数値を入力するものとする。

ヒント モジュロ演算子を用いる。

課題 10.4
乱数発生関数を使う IV

10.3 で、-1 から 1 までの間の乱数を発生 させるプログラムを作成せよ。

課題 10.5
簡単なゲームを作る。I

敵の機体はあなたの所から 10 離れたところから、一つづつ進んで来て、あなたの いる所、すなわち 0 の所まで来たらあなたの負けです。あなたの武器はレーザーガン で、相手が一つ進むごとに一回だけうてます。敵は 6 つのコース(方角)のどれかに いますから、適当な方角を選んでレーザーを 撃ってください。また、敵の位置をレーダーで索敵する 事も出来ますが、レーダーとレーザーは同時には使えません。 敵は、一つ進むごとにコースを変える事が出来ますが、必ず隣り合うコースに しか移動しません。従って、3 のコースに居たら、次は、2、3又は4のコース に必ずいます(コースを変えない事もあります)。 端のコース(0 または 5 のコース)にいる場合は、0 に居たら次は、0 又は 1 に います。 敵の破壊に成功したら、そのメッセージを 出し、外れたら敵との距離を表示して、レーザーの方角の入力を待つようにし、 距離が 0 になったらプレイヤーの負けを表示する事。 ゲームは、5 回戦まであり、敵のスピードは段々と早くなって行きます。

乱数の種(seed)にはキーボードから適当な数字を入力してもらうように する。

ヒント1
最初に、敵が 6つのコースのどこから現れるかは、乱数で生成する。

ヒント2
敵のコースの移動は課題10.4 を参考にせよ。

参考

#include <stdio.h>
#include <stdlib.h>
main()
{
    int teki_kyori, teki_course, lazer_course, round, sokudo=0;
    char lazer='L';
    /* その外に必要と思われる変数の宣言 */

    /* キーボードから適当な数を入力してもらい */
    /* 乱数の種を決める */

    for(round=1; round<6; round++){
        printf("第 %d ラウンド\n\n", round);
        /* 敵の最初の位置を乱数で決める */
        sokudo ++;      /* 敵の接近速度は段々早くなる */
        for(teki_kyori=10; ; teki_kyori-=sokudo){
           /* もし敵との距離が 0 以下だったら負けを宣告して exit(0) する */
           /* 敵機の移動方向を乱数で決める。*/
           if ( teki_course == 0 ){
               /* 左端にいるとき */
           else if ( teki_course == 5){
               /* 右端にいるとき */
           }else{
               /* 1 から 4 にいるとき */
           }
           /* 敵機との距離を表示する */
           /* レーザーを撃つか、レーダーを使うか ? 入力を待つ */
           /* L ならばレーダー、F はレーザー */
           if ( lazer == 'L' ){
              /* レーダーで、敵のコースの表示 */
           }else{
              /* レーザー */
              /* 撃つ方向の入力を待つ  0 から 5 まで */
              if (teki_course == lazer_course){   /* 命中した場合 */
                 /* プレイヤーの勝ちを表示する */
                 break;
              }
              /* 外れを表示する */
           }
        }
    }
}

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

(時間があれば、どうしたらこのゲームをもっと面白く 出来るか考えて見なさい。)



最初のページ 戻る 目次
Hiroyasu Asami