プログラミングで使うサイコロ『乱数』

今回は、『乱数』というものについて解説したいと思います。
乱数というのは、ある数値の範囲からランダムに選ばれる数値のことです。というと少し難しそうに聞こえますが、プログラミングで使うサイコロのようなものだと考えてください。

プログラミングのサイコロ

ただし、みなさんがイメージするサイコロは、1から6の数から1つの目が決まるものですが、乱数は、例えば「1から20の中から1つ選ぶ」の様に、数値の範囲を自由に設定することができます。

また、必ずしも1から始まる範囲でなくても構いません。「10から20」という指定もできますし、負数を使って「-10から10」という範囲を設定することも可能です。

ゲームでは必須の機能

乱数は特にゲームのようなプログラムを作成する時には必須の機能といえるでしょう。もちろん、すごろくのようなゲームでない限り、直接サイコロを使うことはありませんが、あらかじめ予測ができない動きなどが必要な場合には、この乱数の出番となります。

例えば『ジャンケン』のゲームがあるとします。ジャンケンは、グー、チョキ、パーのどの手を出すか、規則的ではなく毎回ランダムに選びますね。ジャンケンの相手が何の手を出すか、あらかじめ予測できるようだとゲームになりません。

このように、ジャンケンの手をランダムに決めたい場合、乱数を使うことで実現できます。「1から3」の範囲の数値を取得する乱数にしておいて、例えば、「1が出たらグー」、「2が出たらチョキ」、「3が出たらパー」というように、乱数の結果の数値によって処理を分ければ、ランダムにジャンケンの手を変えることができます。

または、下の画像のようなシューティングゲームでも乱数の出番がありそうです。敵機が画面の上から登場して、まっすぐ下に向かって降りてくるという動きだとしましょう。

自分の機体を操作して、画面の上から登場する敵機を撃墜するのですが、敵機が毎回同じ位置から登場したのでは、ゲームの面白みがありません。敵が登場する位置の下で待ち構えておいて、敵が現れたら弾を発射するだけになってしまいます。

やはりここは、敵機の登場位置を毎回ランダムに変更したいですね。上の画像のシューティングゲームはScratchで作ったもので、Scratchでは作品の舞台となるステージ上の位置を『座標』という数値で指定します。敵機が登場する際に、その登場位置の座標を、乱数を使って決めれば、毎回ランダムな位置に登場するということになります。

乱数の使い方

先ほどScratchの例を出しましたので、Scratchでの乱数の使い方を見てみましょう。乱数は『演算』カテゴリの中のブロックとして提供されています。

この「○から○まで」の数値の範囲を自分で入力して自由に決められるので、とても使いやすくなっています。

この乱数は当然、他のプログラミング言語でも使えますが、身近なところでExcelでの乱数の使い方を紹介しておきましょう。Excelでは、いろいろな機能が関数として提供されています。その中のひとつ、RAND関数を使ってランダムな数値を作成することができます。

ただし、この関数は数値の範囲を指定することができず、0以上1未満の小数の乱数を作成するだけなので、上の画像のように「0.135119913」のような数値が返ってきます。なので、前述のように「1から10まで」の範囲で乱数をつくりたい場合、少し工夫が必要になります。(RAND関数で得た数値を10倍して、小数点以下を切り捨て、さらに乱数の範囲に指定したい最小の数値を足す、というものです。ここで詳しく解説はしませんが、1から10までの乱数にする場合、「=INT(RAND()*10+1)」という書き方になります)

もっと簡単に使えそうなものとして、RANDBETWEEN関数というものがありますので、これを使えば「=RANDBETWEEN(1,10)」というように、数値の範囲を指定することができます。

このように、様々な場面で『乱数』は使われています。ScratchやExcelなど、身近なところで使ってみるとそれほど難しくありません。機会があれば是非使ってみてください。