C++言語講座 第1章 サンプルプログラム1 (世界を大いに盛り上げる三択ゲーム)

今まで勉強した知識を使って、世間をあっといわせるゲームを作りましょう!

お題は「世界を大いに盛り上げる三択ゲーム」です。以下のプログラムを入力、実行して下さい。

[List 1]

   1 #include <iostream>
   2 #include <cstdlib>
   3 using namespace std;
   4 
   5 int main()
   6 {
   7     // 乱数の初期化
   8     srand(time(NULL));
   9 
  10     int x;
  11 
  12     cout << "箱が三つあります。一つだけがあたりです。"
  13          << "あたりはどれでしょう。(1~3の整数で)" << endl;
  14     cin >> x;
  15 
  16     if (x == rand() % 3 + 1) {
  17         cout << "あたり" << endl;
  18         cout << "やったね" << endl;
  19     } else if (x < 1 || 3 < x) {
  20         cout << "そんな箱ないがな!" << endl;
  21     } else {
  22         cout << "はずれ" << endl;
  23         cout << "残念…" << endl;
  24     }
  25 
  26     return 0;
  27 }

ヲタクな方は「箱」を「閉鎖空間」に置き換えましょう。

新しく登場した関数を順に説明しましょう。まずは、

   1 if (x == rand() % 3 + 1) {

というところです。ここでは、C++標準ライブラリの rand() という関数を使っています。rand() は乱数を作る関数です。rand() はその場その場で適当な整数を返値として返してくれます。ですから、ゲーム等で、毎回毎回ランダムに何かを変えたい場合に使います。例えば、このプログラムでは、3つの箱のうち、どれが正解かを乱数で決めています。

箱は3つなのですから、1~3のうちのどれか一つの整数が欲しいわけですが、どうすれば良いでしょう? rand() は適当な整数を返すので、まず 3 で割った 余りを求めます。3 で割った余りは 0 か 1 か 2 です。これに 1 を足すと、 1~3までの整数のうちどれか適当なものが求まります。これをしているのが、

   1 rand() % 3 + 1

です。% (剰余演算子)は余りを求める演算子なのですね。

rand() は乱数を返すと言いましたが、これはあまり良い言い方ではありません。コンピュータというものは元々は計算をするためのもので、人間と違って、「適当な数」を考えるようなあいまいなことは出来ないようになっています。rand() は一見ランダムに見える数を実行するごとに返してくれるだけなのです。このため、rand() の返す数は疑似乱数と呼ばれます。こんな事情がありますから、放っておくと、プログラムを実行するごとにまったく同じ数を rand() は返してしまいます。これを防ぐには、プログラムを実行する時に一度だけ、乱数を初期化する必要があります。それが、

   1 srand(time(NULL));

というところです。これは、time() 関数に NULL を引数として与え、その返値を srand() 関数の引数として与えています。こうすることで、rand() は実行するごとに適当な値を返してくれるようになります。上の書き方がどんな意味を持つかはまた後で説明します。とりあえず、rand() を使いたいときは、main() 関数の最初で

   1 srand(time(NULL));

と書けば良い、と覚えておいて下さい。

rand() と srand() 、time() を使うには cstdlib をインクルードします。

wiredBeep/topics/Programming/Lang/Cpp/n1-s1 (last edited 2007-10-24 13:54:42 by beeplex)