画像を何分の何の確率で表示させるには?


なお  2008-01-25 01:23:50  No: 138721

初心者なのですがVisual Studio6.0でもぐらたたきゲームを利用した作品を現在制作しています。内容は決まった画像がランダムでImageに表示され、それをクリックできると得点加算、クリックできないと減点というゲームです。現在Imageコントロールに決まった画像を呼び出す処理が完成しました。そして追加機能としてそのImageコントロールに5分の1の確率で他の画像を呼び出して表示させたいのですがわからない状態です。宜しくお願いいたします。

こちらがプログラムです。
Option Explicit
Const MinImgAry = 0
Const MaxImgAry = 15
Const GameTime = 15
Dim HitFlg As Integer
Dim TEN As Integer
Dim HoleNum As Integer
Dim IconAry(2) As String

Private Sub Command1_Click()
    Command1.Enabled = False
    Option1.Enabled = False
    Option2.Enabled = False
    Option3.Enabled = False
    HitFlg = 0
    TEN = 0
    Text1.Text = Str(TEN)
    Timer1.Enabled = True
    Timer2.Enabled = True
End Sub

Private Sub Command2_Click()
Form1.Show
End Sub
Private Sub Form_Load()
    Dim StrPath As String
    StrPath = App.Path
    If Right(StrPath, 1) <> "\" Then
        StrPath = StrPath + "\"
    End If
    IconAry(0) = "D:制作\5\画像1.bmp"
    IconAry(1) = "D:制作\5\画像2.bmp"
    IconAry(2) = "D:制作\5\画像3.bmp"
End Sub

Private Sub Image1_Click(Index As Integer)
Image1(Index).Enabled = False
    HitFlg = -1
End Sub

Private Sub Option1_Click()
Timer1.Interval = 1000
End Sub
Private Sub Option2_Click()
Timer1.Interval = 800
End Sub

Private Sub Option3_Click()
Timer1.Interval = 500
End Sub

Private Sub Timer1_Timer()
    Static CtlFlg As Integer
    Select Case CtlFlg
        Case 0
            Image1(HoleNum).Enabled = False
            Image1(HoleNum).Visible = False
            HoleNum = Int((MaxImgAry - _
              MinImgAry + 1) * Rnd + MinImgAry)
            Image1(HoleNum).Picture = _
                        LoadPicture(IconAry(0))
            CtlFlg = 1
            Image1(HoleNum).Visible = True
            Image1(HoleNum).Enabled = True
            Exit Sub
        Case 1
            Image1(HoleNum).Enabled = False
            If HitFlg Then
                 HitFlg = 0
                 Image1(HoleNum).Picture = _
                        LoadPicture(IconAry(2))
                 TEN = TEN + 1
                 Text1.Text = Str(TEN)
           Else
                 Image1(HoleNum).Picture = _
                        LoadPicture(IconAry(1))
                 TEN = TEN - 1
                 Text1.Text = Str(TEN)
            End If
            CtlFlg = 0
            Exit Sub
        End Select
End Sub

Private Sub Timer2_Timer()
 Static TimeCnt As Long
    TimeCnt = TimeCnt + 1
    If TimeCnt <> GameTime Then
        Exit Sub
    End If
    Timer1.Enabled = False
    Timer2.Enabled = False
    MsgBox "おしまい"
    TimeCnt = 0
    Command1.Enabled = True
    Image1(HoleNum).Enabled = False
    Image1(HoleNum).Visible = False
    Option1.Enabled = True
    Option2.Enabled = True
    Option3.Enabled = True
End Sub


なお  2008-01-25 01:26:26  No: 138722

すみませんいい忘れましたが、
このプログラムに何を追加すれば良いのでしょうか?だなたかお願いいたします。


ひんと  2008-01-25 04:22:09  No: 138723

ランダム
以上


なお  2008-01-25 07:27:24  No: 138724

ヒントさん→ランダムというのはわかるんですが何冊も本を調べてネットで調べたものを自分なりに考えて打ってみてもできないんです泣


ひんと  2008-01-25 08:21:48  No: 138725

> 自分なりに考えて打ってみてもできないんです
確率1/5なら、ランダム関数で1〜5もしくは0〜4の値を作成するようにしましょう。
で、1(もしくは0)の時だけ呼び出す画像を別の画像にすればいいじゃな〜い。

ちなみに、あくまでも1/5の確率だから、5回やったら必ず1回は出るというものじゃないよ。
5回で0回かもしれないし、5回で2回かもしれない。
でも1万回繰り返したら総計2000回になるかもしれない。

で、何を持って「出来ない」って言ってるの?
「どこ」が出来てないの?


なお  2008-01-26 20:29:48  No: 138726

ひんと→初心者でまだVBがどんな命令を打てばどんなプログラムが実行されるかもわからないんです(>_<)
どんなソースを打てばいいのかすらわかりません泣


通ってみた  2008-01-26 23:03:29  No: 138727

自分なりに調べて実行してみた、というのが見えませんよね・・・?
虚偽の情報はよい結果を招きませんよ

検索サイトにて「VB6 ランダム」として調べるだけでトップに出てくると思いますが
ここで質問しても、調べて出てくるものと同様の答えしか返ってきませんよ

どんなコードでどんな結果になるのかがわからない、というのであれば本を買って勉強することを強くおすすめします


さるべーじ  URL  2008-01-27 04:43:51  No: 138728

うーんと。

ソースコードを大まかに眺めて、

    ★ 16個の穴に、一定間隔で画像を表示。
        ・穴は「Image1」の配列で実現。
        ・表示する画像は「IconAry」に格納されている。
        ・「IconAry」には 
              0:出てきたもぐら
              1:叩かれたもぐら
              2:叩かれなかったもぐら
          の絵が入っている。

みたいな感じでしょうか。

    HoleNum = Int((MaxImgAry - MinImgAry + 1) * Rnd + MinImgAry)

で出てくる穴を決めていますので、Rnd関数の使い方はおわかりなんですよね。

で、

「Imageコントロールに5分の1の確率で他の画像を呼び出して表示させたい」

ということですので、例えば「出てきたもぐら」を表示する

    Image1(HoleNum).Picture = LoadPicture(IconAry(0))

を、1/5の確率で高得点なスペシャルもぐらに差し替えたい、ということになるんでしょうか。

であれば、例えば

    ・HoleNumを算出するタイミングで、スペシャルもぐらの有無も算出する。
    ・スペシャルもぐら有無フラグの変数を用意。
    ・Rnd関数で0〜4を算出する計算式を作り、0ならフラグ=True、それ以外ならフラグ=False。
    ・IconAryの(3),(4),(5)にスペシャルもぐらの3種類の画像を用意。
    ・LoadPictureで読み込む画像をフラグで分岐させる。
      フラグ=TrueならIconAry(3),(4),(5)のセット、=Falseなら(0),(1),(2)のセット。

のようにしてみてはいかがでしょう。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加