![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
昨日しました質問が要領を得ていなくて、回答してくださった皆様すいません。
ランダムで4種類の画像が同時に16個のImageにランダムに表示するようにしています。が、ランダムに表示するなかでも画像がかぶってしまい3種類、もしくは2種類しか表示されなくなってしまっています。どうしたら4種類とも表示できるでしょうか?
<コード>
Private Sub Form_Load()
Randomize
End Sub
Private Sub Timer1_Timer()
n = n + 1
If n <= 20 Then
i = Int(Rnd * 16)
f = Int(Rnd * 16)
s = Int(Rnd * 16)
b = Int(Rnd * 16)
Image1(i0) = Image4
Image1(f0) = Image4
Image1(s0) = Image4
Image1(b0) = Image4
Image1(i) = Image2
Image1(f) = Image2
Image1(s) = Image5
Image1(b) = Image7
Label1.Caption = " バイキンマンの数 = " & (2 * n)
Label3.Caption = " ドキンちゃんの数 = " & n
i0 = i
s0 = s
b0 = b
f0 = f
Else
Timer1.Enabled = False
Command1.Caption = " 再度トライ "
End If
End Sub
もっとコードが必要でしたら公開します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
設定した数を確実に入れるには
テーブルを準備して、必要な絵を必要個数順番にいれます。
その後でループを(ランダム回数)まわして、入れ替え(元と先はランダム)を行います。
順番が変わるだけなので、設定した絵が出るかと...
No.2
- 回答日時:
すでに、ANo.1さんが回答されていますが、
補足版の前に書き込みましたので、
一応責任があるかと・・・(^^;;
コードの書き方は色々と考えられます。
ANo.1さんがおっしゃる通り配列を使うとか。
難しく考えるより、単純に考えた方がいい場合もあります。
下記コードはANo.1さんの内容をそのままコードにしてみました。
i = Int(Rnd * 16)
Do
f = Int(Rnd * 16)
If f <> i Then Exit Do
Loop
Do
s = Int(Rnd * 16)
If i <> s And f <> s Then Exit Do
Loop
Do
b = Int(Rnd * 16)
If i <> b And f <> b And s <> b Then Exit Do
Loop
単純に乱数の重複をチェックしているだけです。
下手にややこしいコードを書くより、
4種類の乱数程度なら、比較で十分対応出来ると思いますよ。
なお、上のコードはあくまで一例です。
動作の責任は持てませんm(__)m
No.1
- 回答日時:
>i = Int(Rnd * 16)
>f = Int(Rnd * 16)
>s = Int(Rnd * 16)
>b = Int(Rnd * 16)
ここで乱数発生させて各変数に0~15までの値が入りますが、これだと同じ値が入る確立が結構ありますよね。
一番簡単なのは、それまでに発生させた0~15間での値がすでに変数に格納されていたらもう一度乱数を発生させればOKですよね。
ここで注意が必要なのは、再度乱数を発生させる必要があるのは1度だけではなく、重複がなくなるまで繰り返す必要があります。
Do ~ Loopを使って、ループさせてください。
また、2番目の変数なら1番目との重複をチェックするだけでいいですが、
3番目の変数の場合、1番目と2番目の両方と重複しない値を求めないといけません。
もちろん4番目なら1,2,3とすべてとの重複をチェックする必要があります。
こういった場合、うまくロジックを組むには乱数を入れる変数を配列にしたり、ループを組み合わせるといいかと。
なれないと難しいかもしれませんががんばってください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
ACCESSユニオンクエリでORDER B...
-
1、Rstudioで回帰直線を求める...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
Access DCountでの連番について
-
Nullの使い方が不正です。
-
ASCIIコード表の出力
-
JavaScriptの定数名が取り消し...
-
【VB6】実行ファイルとした後、...
-
videopadについて
-
VBAでファイルオープン後にコー...
-
SQL
-
レポートでグループレベルの変...
-
Excel VBA素人です。VBAで図形...
-
VB6のComboBox関連の書き方をVB...
-
managed(push, off) の意味
-
access2003 クエリSQL文に...
-
C#で入力可能なカウントダウン...
-
VBA・VB6.0・VB.NETの文字列型
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
オートフィルタで抽出結果に 罫...
-
変数名「cur」について
-
JavaScriptの定数名が取り消し...
-
ACCESSユニオンクエリでORDER B...
-
Exel VBA 別ブックから該当デ...
-
UWSCでMOUSEORG関数が上手く処...
-
COBOLの文法
-
PreviewKeyDownイベントが2回...
-
1、Rstudioで回帰直線を求める...
-
VBAでファイルオープン後にコー...
-
【VB6】実行ファイルとした後、...
-
Nullの使い方が不正です。
-
特定行の背景色を変えたいのですが
-
◾️Excel VBA 統合について Cons...
-
アルファベットに付いて質問し...
-
Excel VBAでOpenTextのFieldInf...
おすすめ情報