【C言語】トランプの絵柄と番号をランダムに表示する方法

今回は、C言語でトランプの絵柄と番号をランダムに表示する方法を紹介したいと思います。

では、さっそくですが、ソースコードを見ていただきましょう。

ソースコード

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

/* 画面表示用 */
char trump_number[][3] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
char trump_kigo[][8] = {"DIAMOND", "HEART", "CLOVER", "SPADE"};

/* カード決定 */
int main (void) {

	// 変数宣言
	int kigo = 0;
	int number = 0;

	srand (time(NULL));
	kigo = rand() % 4;
	number = rand() % 13;

	printf ("%sの%sです。\n", trump_kigo[kigo], trump_number[number]);

	return 0;
}

実行例

実行すると、以下のような出力をします。

図1 実行例

解説

ヘッダファイルの読み込み

ヘッダファイルとは何かというとprintfなどの標準ライブラリ関数を使用するときに、必要になるファイルのことです。この辺に関してはまた別の記事で説明しようと思いますので今回は割愛します。

#include <stdio.h>

printfというような、文字の入出力に関する処理を扱う関数についてまとめられているヘッダファイルを使うために読み込みます。

#include <stdlib.h>

rand関数を使う際に必要になるヘッダファイルです。rand関数は乱数を生成する際に使います。乱数については後程解説します。

#include <time.h>

名前から何となく推測ができると思いますが、time関数など時間を扱う関数を使うときに読み込む必要があるヘッダファイルです。

配列のセット

trump_numberは、トランプの数字を画面に出力するために作成した配列です。全部数字であればこの配列は不要なのですが、トランプにはJやQというような記号も交じっているため、準備しておいた方が処理が楽かなと思います。

trump_kigoは、トランプの絵柄を画面に出力するために準備した配列です。ダイヤモンドやハートなど、4種類のカードを区別するために必要になるかと思います。

2種類の乱数生成

トランプの絵柄とナンバーをランダムに選ぶので、2種類の乱数を作成します。先程準備した配列の要素を乱数により決定して、画面に出力します。

乱数の生成方法

rand関数を使って、疑似的に乱数を生成することができます。

rand関数は、0以上RAND_MAX以下の値を返却します。RAND_MAXは<stdlib.h>ヘッダで定義されています。

今回のプログラムでは、絵柄の方はrand() % 4として乱数を生成しています。絵柄の4種類のいずれかになるように決定しなければいけないため、0~3のどれかの値が出てくるようにしなければなりません。rand() % 4とすることで、乱数の値を4で割った余りが最終的な乱数になるため、0から3の中でランダムに数字が決定することになります。

では、srand (time(NULL))とは何でしょうか?

先程説明したrand関数で乱数が生成できるのですが、実はこのままだと何回実行しても同じ値が乱数として生成されます。これは何故かというと、rand関数は、「種」を利用した計算によって乱数を生成しているからです。この、種の値を変更するために必要なのがsrand関数です。

srand関数を使えば必ず種はリセットされるかというと、そうではありません。例えば、srand(20);をプログラムに記述しても、実行するごとに種を毎回20に変更することになるので(同じ処理を繰り返す)、結局同じ乱数が生成されてしまいます。そのため、srand関数の引数には常に変化する数を与える必要があります。

そこでよく使われる方法が、srand関数の引数に「現在の時刻」を与えるというものです。srand関数の引数にtime(NULL)を与えることで、現在の時刻を種としてセットすることができます。time (NULL)については正直私自身もよく理解できていません。プログラムの流れを理解するためにはあまり必要ではないと思いますし、ここでは割愛します。

まとめ

今回は、トランプの絵柄と番号をランダムに表示する方法について解説しました。

  • トランプの絵柄と番号をランダムに表示するためには乱数を使う。
  • 乱数を使うために必要なヘッダファイルを読み込む。
  • 乱数を計算する関数はrand関数。
  • rand関数の計算に必要な「種」を変更する関数がsrand関数。
  • srand関数で変更する「種」の値を毎回変更するためには、現在時刻を種とすればよい。

というわけで、今回はここで終わりです。参考になれば嬉しいです。

最後までお読みいただき、ありがとうございました。