練習問題のように断片的なプログラムではなく、まとまりのあるプログラムを作ることによって、
“設計”→“コーディング”→“デバッグ”
という基本的な工程を体験します。
よくある例題として、簡単なアドレス帳を作るというようなものがありますが、実際に使用することの無いそのようなプログラムは、あまり面白いものではありません。
この練習プログラム集では、学習者に少しでも“プログラミングの面白さ”を感じてもらえるよう、ゲームを題材としました。
また、パーソナル・コンピューターの黎明期に流通していたテキスト・ベースのゲームの世界を、これからプログラミングを始める人たちに知ってもらいたいということも理由のひとつです。
■ この練習プログラムは...
- プログラムのレベル
基本的には“C言語練習問題集”の範囲で作成できますが、一部では練習問題集で触れていない書式も使用します。 - 入出力について
出力はprintf、入力にはscanf関数を使用すれば作成できます。 -
仕様の厳密さ
出題の文章だけでは仕様に曖昧さがありますが、ゲームとして成立するよう、補ってください。
この練習プログラムの作成には、乱数を使用します。
■ 乱数
サイコロを振って選んだ数のように、出現に規則性のない数を“乱数”と言います。コンピューターでは、実用上、ほぼ規則性のない擬似乱数を使用します。
■ 擬似乱数を発生する関数
標準ライブラリに擬似乱数を発生する関数が用意されています。サイコロを振る関数と考えてください。
int rand( void ); stdlib.h
rand 関数は、0 ~ RAND_MAX (32767) の範囲の整数の擬似乱数を返します。関数を呼び出すたびに違う値を返すのですが、プログラム起動からは毎回同じ値を返します。
■ 擬似乱数の初期化
プログラムを起動するたびに違う値を返すようにするためには、srand関数を使用します。
void srand( unsigned int seed );
seedに毎回違う値を渡すことによって、rand関数で得られる値が変わります。
ここで問題となるのが、毎回違う値をどのように得るか、ということです。これには現在時刻を得るtime関数(time.h)を使用します。プログラムを起動する時間は毎回違うはずなので、得られる値も毎回違います。
以下の文を、プログラムの最初に一回だけ実行することで、rand関数で毎回違う値が得られます。
srand( (unsigned int)time(0) );
詳しくは、それぞれの関数のリファレンスを参照してください。
例:1~6の数字を10回表示するプログラム
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main()
{
int i;
srand( (unsigned int)time( 0 ) );
for( i = 0 ; i < 10 ; i++ ){
int n = ( rand() % 6 ) + 1;
printf( "%d ", n );
}
}
実行結果
5 6 2 5 1 6 4 4 6 1