投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/4/29 22:39:45
当然ながら、List の残数が少なくなるほど、数字の切り替わりも鈍くなっていきます。
(トランプの枚数/ビンゴの玉が残り一つとなれば、その値は確定してしまいますしね)

また、トランプの山札/ビンゴの玉数よりも多い回数の抽選もできませんから、
プログラム上では、抽選回数に制限を持たせることも忘れてはいけません。

そうしたことも考えと、最初に用意しておく List 内の個数は、少し多めに用意しておいた方が
良いかと思います。そもそもビンゴゲームの場合、トーナメントのくじ引き等とは異なり、
最後の一個まで抽選を繰り返すことは稀でしょうしね。


> 乱数で取得した数字(上のソースで言うindex)とフォーム上のラベルをどうにかして
> 結び付けられないかと考えています。
Label を配列に入れておくと良いでしょう。そうすれば、1回目の抽選では最初のラベルにセットし、
2回目の抽選ではその次のラベルにといった処理も記述しやすくなります。

# この『回数』は、乱数で得た index や list(index) で得た値とは別物である事に注意。


なお、乱数(Rnd/Random)を使ったこの手の処理については、過去にも話題になっていますので、
過去ログも参照してみると、新たな発見があるかもしれませんよ。


> Dim index As Integer = myRnd.Next(list.Count - 1)
ここで、myRnd.Next(5) となった場合、それは「0以上5未満の値」すなわち 0~4 を得る事に
なるわけですが、その点は大丈夫でしょうか?
http://msdn.microsoft.com/ja-jp/library/zd1bc8e5%28v%3dVS.90%29.aspx

たとえば、list の中身が「3,7,9」の3個だった場合、「list.Count - 1」は 2 を意味しますので、
myRnd.Next(list.Count - 1) からは、0 または 1 のいずれかしか返されない事になります。
という事は、「3,7,9」からは 0 番目の値である「3」と、1番目の値である「7」は得られても、
最後の2番目の値となる「9」は得られない事になってしまうのです。


つまり list 内の最後の位置も乱数に含まれるようにするためには、
.Count - 1 ではなく、.Count そのものを渡さねばならないということです。

先の投稿に記述された
> すなわち、List クラスの Count プロパティですね。
> それを Random クラスの Next(Integer) メソッドの引数に渡してやれば OK です。
および
> 主な理由としては、「n 以上 m 未満」という範囲の乱数を生成するのに都合が良いからです。
という内容が指し示す意味を、もう一度確認しておいてください。