乱数でおみくじを作ってみよう
だいぶプログラミングにも慣れてきましたか?
ずいぶん進歩しましたよ。素直に自分をほめてあげましょう。
さて、決まったことを決まった手順で決まった通りに実行するのは、プログラミングの基本です。だいたいのことはそれでいいんですが・・・、
たとえば、サイコロを振るとき、決まった数字が決まった順番に出てきたりしませんよね。今回は、そんなふうに、毎回異なる、予想できない結果が出るようなプログラムを考えましょう。
題材は「おみくじ」です。
おみくじって、何種類あるんでしょうね。「大吉」「小吉」「凶」「大凶」・・・、それぞれが出る割合は?
神社によっても違いそうですね。
今回はとりあえず、「大吉」「中吉」「小吉」「凶」「大凶」の5種類で、同じくらいの割合で出るとしましょう。
プログラムはこんな感じになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub おみくじ() Dim kuji As Long Randomize kuji = Int(Rnd() * 100 + 1) Select Case kuji Case Is <= 20 MsgBox kuji & "番:大凶" Case Is <= 40 MsgBox kuji & "番:凶" Case Is <= 60 MsgBox kuji & "番:小吉" Case Is <= 80 MsgBox kuji & "番:中吉" Case Else MsgBox kuji & "番:大吉" End Select End Sub |
こんな感じになりましたか?
今回新しく出てきたのは2つです。
ひとつめは、乱数を発生させるこの部分。
1 2 |
Randomize kuji = Int(Rnd() * 100 + 1) |
Randomize というのは、いまから、乱数を使うよ!という、宣言みたいなものです。買ってきたばかりのトランプをゲームの前に、シャッフルするみたいな行為だと思っておけばいいと思います。これをしないと、本当に毎回同じ順番で数字が出てきちゃうんです。
次のIntは()の中の小数を、小数点以下切り捨てて整数に変える命令、Rnd()は0以上~1未満の、でたらめな数字をプログラムを実行するたびに出してくる命令です。
Rnd() * 100で、0以上100未満のでたらめな小数になり、Intで0以上100未満の整数になり、最後に1を足して、1以上100以下の整数になります。
ふたつめは、Select~End Selectのひとかたまりのブロックです。
1 2 3 4 5 6 7 8 9 10 11 12 |
Select Case kuji Case Is <= 20 MsgBox kuji & "番:大凶" Case Is <= 40 MsgBox kuji & "番:凶" Case Is <= 60 MsgBox kuji & "番:小吉" Case Is <= 80 MsgBox kuji & "番:中吉" Case Else MsgBox kuji & "番:大吉" End Select |
case の後ろの条件に最初に当てはまった時に、そのすぐあとの処理をして、ブロックを抜けます。
20以下の時は「大凶」とメッセージを表示して、End Selectのあとまで飛ぶということです。
80以下まで同様に判定して、どれにもあてはまらなかったとき、つまり、80より大きいときは「大吉」を表示します。
IF~Else Ifでもいいのですが、複数の条件を並べて書くときは、こちらの方がすっきりと書けます。
おみくじの種類を増やしたり、割合を変えて遊んでみてください。