Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VB.NETでビンゴゲーム作成
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9616#CommentId14546
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2010/4/26 19:56:23
> Tag を -1 から始めれば、1 回だけ実行され、Tag の中身は -1 になります。
失礼しました。-1 から始めたら、-2 ですね。
> そこでbtnStart_ClickイベントのMe.Timer1.Enabled = True前に
Timer の停止/再開は Enabled プロパティでも行えますが、
Stop / Start メソッドを使った方が、意図が分かりやすいコードになると思いますよ。
また乱数生成も、Randomize / Rnd を使うのではなく、Random クラスを使った方が良いかと。
> 「タイマーが止まった時点の数字をListなどに詰めていって、既にListに含まれている数字はタイマーを止めない」としようかと考えていますが、現実的ではない気がします。
そういう方法でも実装できますが、実際のビンゴゲームと同様のロジックの方が都合が良いでしょう。
http://www.adroom.co.jp/wp-content/uploads/383_1.jpg
ビンゴゲームだと分かりにくければ、「トランプ」を思い浮かべてみて下さい。
トランプには 53種類のカードがありますよね。
その中から、好きな位置にあるカードを一枚を抜いてもらいます。
次に、残った52枚から、さらにもう一枚カードを引きます。
その次は、残った 51 枚から…と順に抜いていくイメージです。
この場合、同じカードが2回続けて引かれる心配はありませんよね。
それと同様の方法にすれば良いわけです。
たとえば 0~9 の 10 個の値を使うのだとすれば、
List に 0~9 の連番を記録しておきます。これがトランプのかわりです。
(実際には連番で無くとも良いですが、とにかくすべて別の値にしておきます)
最初、List の中身は 0,1,2,3,4,5,6,7,8,9 という並びです。
0番目の位置には 0 という値、9番目には 9 という値が入っています。
さて、最初のリストの数は 10 個なので、0~9 の範囲で乱数を生成します。
もしも乱数が 8 という値だったら、8番目にある「8」を取り出します。
もしも乱数が 4 という値だったら、4番目にある「4」を取り出します。
もしも乱数が 0 という値だったら、0番目にある「0」を取り出します。
タイマーが止まった場合には、その位置の値を RemoveAt で削除します。たとえば、
3 番目の位置を削除すれば、List の中身は 0,1,2,4,5,6,7,8,9 になりますし、
7 番目の位置を削除すれば、List の中身は 0,1,2,3,4,5,6,8,9 になるわけです。
2回目は、リストが 9 個に減ったので、0~8 の範囲で乱数を生成します。
得られた乱数を List 内の位置として、同様に値を取り除いていきます。
以前に選ばれた数字は、既に List 内からは取り除かれていますので、
何番目の値を取り出しても、同じ数字が出現する心配はありませんね。