cd c
を実行した後で( ~/c
に移動した後で)、以下の課題を
やってみよ。
前ページの強制終了の例を打ち込んで動かしてみよ。
先の課題では、seed
には定数を代入したが、キーボードから入力する
ように改造せよ。
0 から 9 までの間の乱数を発生させるプログラムを作成せよ。但し、
seed
にはキーボードから適当な数値を入力するものとする。
ヒント モジュロ演算子を用いる。
10.3 で、-1 から 1 までの間の乱数を発生 させるプログラムを作成せよ。
敵の機体はあなたの所から 10 離れたところから、一つづつ進んで来て、あなたの いる所、すなわち 0 の所まで来たらあなたの負けです。あなたの武器はレーザーガン で、相手が一つ進むごとに一回だけうてます。敵は 6 つのコース(方角)のどれかに いますから、適当な方角を選んでレーザーを 撃ってください。また、敵の位置をレーダーで索敵する 事も出来ますが、レーダーとレーザーは同時には使えません。 敵は、一つ進むごとにコースを変える事が出来ますが、必ず隣り合うコースに しか移動しません。従って、3 のコースに居たら、次は、2、3又は4のコース に必ずいます(コースを変えない事もあります)。 端のコース(0 または 5 のコース)にいる場合は、0 に居たら次は、0 又は 1 に います。 敵の破壊に成功したら、そのメッセージを 出し、外れたら敵との距離を表示して、レーザーの方角の入力を待つようにし、 距離が 0 になったらプレイヤーの負けを表示する事。 ゲームは、5 回戦まであり、敵のスピードは段々と早くなって行きます。
乱数の種(seed
)にはキーボードから適当な数字を入力してもらうように
する。
参考
#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 とすること。
(時間があれば、どうしたらこのゲームをもっと面白く 出来るか考えて見なさい。)