§2 モグラたたきゲームの制作 VB6 | |
(3) 乱数のサンプル |
9個のボタンのうち、1ヶ所だけ色を変えてモグラが出てきたことにする。順番に色を変えてもゲームにならない。どこのボタンの色が変わるかわからないようにする必要がある。ここで利用するのが乱数である。
乱数
乱数とは、数字が、それぞれ同じ確率で現れるように並べられた数字の列のことである。
例えば、整数1から10の範囲の乱数では、それぞれの数字が同じ確立で現れる。
プログラムでは、Rnd関数を使う。この関数は乱数を計算で求めており、各数字が同じ確率で現れることはないので、擬似(ぎじ)乱数とも言う。また、ある値を元に乱数を計算し、2回目以降は、前回の乱数値を元に計算するので、最初のある値(初期シード値という)が同じであれば、同じ乱数の列が現れる言語もある。
初期シード値を設定するため、Randomize命令が用意されている。引数なしで実行すると、システムタイマー(コンピュータ内蔵の時計)から取り出した値を使用する。(ヘルプ参照。キーワード=Rnd関数、Randomaizeステートメント)
Randomize : 乱数を初期化する。
Rnd(1) : 乱数を得る。
乱数のテスト
図2-3-1 |
新規フォームを用意して、図2-3-1のようにテキストボックス2個、コマンドボタン1個を配置する。
ボタンをクリックすると、1から9の範囲の乱数を100個発生させる。乱数値は、Text1に表示される。
1から9の各数字が何個ずつ発生したかをカウントして、Text2に表示する。
・プログラムリスト
Dim cnt(9) As Integer Private Function Ransuu(lower As Integer, upper As Integer) As Integer 'ユーザ関数 '乱数の発生 ' Form_Loadなどで乱数を初期化(Randomize)すること。 ' 引数lowerから引数upperの範囲の整数値を返却する。 Ransuu = Int((upper - lower + 1) * Rnd + lower) End Function Private Sub Command1_Click() Dim n As Integer, ran As Integer For n = 1 To 100 ran = Ransuu(1, 9) '乱数(1-9)発生 cnt(ran) = cnt(ran) + 1 '各数字をカウント Text1.Text = Text1.Text & Str(ran) & vbCrLf Text1.SelStart = Len(Text1.Text) Next n 'カウント結果の表示 Text2.Text = "1=" & Str(cnt(1)) & " 6=" & Str(cnt(6)) & vbCrLf Text2.Text = Text2.Text & "2=" & Str(cnt(2)) & " 7=" & Str(cnt(7)) & vbCrLf Text2.Text = Text2.Text & "3=" & Str(cnt(3)) & " 8=" & Str(cnt(8)) & vbCrLf Text2.Text = Text2.Text & "4=" & Str(cnt(4)) & " 9=" & Str(cnt(9)) & vbCrLf Text2.Text = Text2.Text & "5=" & Str(cnt(5)) End Sub Private Sub Form_Load() Randomize '乱数初期化 End Sub
ユーザ関数
指定した範囲の整数値の乱数が得られるように、ユーザ関数としてプログラムしている。ユーザ関数は次のような形式でユーザが自由に作成することができる。
Function 関数名(引数) As 返却値の型
…(処理)…
関数名=返却値
End Function
ユーザ関数は、Function 〜 End Functionではさむ。
Functionの前にPrivateまたはPublicを付けることができる。PrivateとPublicは、この関数の有効範囲で、Privateはこのフォーム内だけで有効であることを表す。対して、Publicはプロジェクト全体で有効である。(詳しくはヘルプ参照)
関数名は、変数名と同じでユーザが自由に決めることができる。関数は、処理の結果を返却するので、その返却値の型を指定する。
実際、処理の結果を返却するには、関数名に返却値を代入する形でプログラムする(C言語では、return文で書いた)。
実行すると、各数字がおおよそ、あくまでもおおよそ同じ個数ずつ得られる(Text2に表示)。
(3) 乱数のサンプル | |
Copyright © 2001,2002 Hiroshi Masuda |