トランプをシャッフルするようなロジックを考えてみましょう。
簡単に説明するために、種類は1種類のみとし、1から13の数で表すものとします。
まず、配列を、2つ作成します。
一つは、シャッフル前の配列、もう一つは、シャッフル後の配列です。シャッフル前の配列には、順序良く、トランプをならべておきましょう。
シャッフル前
01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 |
シャッフル後
まずは、この中から、ランダム関数を使って、1から13までの乱数を発生させ、一つだけ選びます。
選ばれた数が、5だったとしたら、シャッフル前の配列から、5番目の数を削除し、シャッフル後の配列に追加します。
シャッフル前
シャッフル後
こんどは、ランダム関数を使って、1から12までの乱数を発生させ、一つだけ選びます。
選ばれた数が、9だったとしたら、シャッフル前の配列から、9番目の数を削除し、シャッフル後の配列に追加します。
シャッフル前
シャッフル後
あとは、シャッフル前の配列がなくなるまで、これを繰り返していけば、シャッフルできます。
VB でコーディングしてみましょう。
配列の代わりに、コレクションを使うと楽チンです。
Dim colBefore As Collection
Dim colAfter As Collection
Dim i As Long
Set colBefore = New Collection
Set colAfter = New Collection
For i = 1 To 13
colBefore.Add CStr(i)
Next
Do Until colBefore.Count = 0
i = Int(Rnd(1) * colBefore.Count) + 1
colAfter.Add colBefore.Item(i)
colBefore.Remove i
Loop
For i = 1 To 13
Debug.Print colAfter.Item(i)
Next