• 締切済み

画像のランダム表示

初心者なのですがVisual Studio6.0でもぐらたたきゲームを利用した作品を現在制作しています。内容は決まった画像がランダムでImageコントロールに表示され、それをクリックできると画像が変わり得点加算、クリックできないと画像が変わり減点というゲームです。現在Imageコントロールに決まった画像を呼び出す処理が完成しました。そして追加機能としてクリックできたらボーナスポイントの画像をImageコントロールに何分の何かの確率で表示させたいのですがわからない状態です。ちなみに画像は私のパソコンのDドライブから呼び出して表示させています。 どういった命令文を打ったら良いのかわかる方教えて下さい。宜しくお願いします。 こちらがプログラムです。 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

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

Imageコントロール単体で画像の重ね合わせは出来ないと思います 表示する元画像とボーナス用の画像を合成した画像を準備してそれを ボーナス有り、ボーナス無しとして切り替えるなら可能でしょう

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ImageまたはPictureコントロールを使うということなんですが … ボーナス表示用のイメージコントロールまたはピクチャーコントロールをフォームに貼り付けていてこれを操作するようにします

naobu-k
質問者

お礼

redfox63さま ご回答ありがとうございます。私の考えでは新しいImageコントロールを貼り付けるのではなく、同じImageコントロールにボーナス画像を出そうと思っていたんですが(>_<) つまり同じImage1コントロールにランダムで2つの画像を重ならないように表示させたいということです。私の説明が悪かったようですみません(>_<)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

よく意図が飲み込めないんですが ・・・ Timer1_Timerイベントの ctlFlagが1、HitFlgが1のときにボーナスを表示させたいってことですか でしたら ' ここの 0.03などはご希望の確率に修正してください if rnd() < 0.03 then   ImageBonus.Picture = LoadPicture("Bonus.bmp")   ImageBonus.Visible = True   Ten = Ten + 10 end if といった具合でしょうか ・・・ Timrt1_Timerの先頭で ImageBonus.Visible = False も追加って感じだろうと思います 毎回 LoadPictureで画像を読み込むより アプリケーション起動時にイメージを変数に取り込んでおいた方がいいように思います Dim oImg(2) as stdPicture をフォームレベルの変数として用意して Set oImg(0) = LoadPicture("D:制作\5\画像1.bmp") Set oImg(1) = LoadPicture("D:制作\5\画像2.bmp") Set oImg(2) = LoadPicture("D:制作\5\画像3.bmp") といった具合に初期化して Image1.Picture = oImg(0) といった具合に使えばいいかと思います

naobu-k
質問者

お礼

時間が迫ってて本当に困ってます(>_<) どなたか宜しくお願いします。

naobu-k
質問者

補足

redfox63さま とてもご丁寧な回答をありがとうございます。 さっそくtimerイベントに↓ 『ImageBonus.Visible = False』 と 『if rnd() < 0.03 then  ImageBonus.Picture = LoadPicture("Bonus.bmp")  ImageBonus.Visible = True  Ten = Ten + 10  end if』 を追加してみました。 実行してみましたら、3つあるimageBonus部分にコンパイルエラーで『変数が定義されていません。』と出てきました。 この場合にはどのような変数を定義したら良いのでしょうか?よろしくお願いします。

関連するQ&A