0

Visual Basic 2010には、スロットマシンをエミュレートするプログラムがあります。

まず、1から9までの3つの乱数を生成し、「スピン」をシミュレートしたかったので、スロットマシンの果物や物の画像が画面に表示されるループを通過することにしました。このループが終了した後、ユーザーは生成された1〜9の数字に対応する画像を取得する必要があります。

そのため、タイマーを設定し、たとえば100の間隔を設定して開始し、各ティックで画面にランダムな画像を表示するのが最善のアイデアだと思いました。

ただし、タイマーを開始すると、呼び出されたメイン関数と同じように動作するようです。ここXDで情報を提供しているかどうかはわかりません。自分自身をよく見てください:

'CALCULATE WINNING RESULT
valor1 = GeneraAleatorio(1, 9)   -> This custom function returns a random number
valor2 = GeneraAleatorio(1, 9)
valor3 = GeneraAleatorio(1, 9)

Timer1.Enabled = True

'NOW I PUT THE WINNING PICTURES THAT CORRESPOND WITH THE NUMBERS
ColocaImagen(1, valor1)  -> Another custom made function, takes the position (1 to 3) and an image (1 to 9)
ColocaImagen(2, valor2)
ColocaImagen(3, valor3)

'END GAME
End()          -> or whatever

私のtimer_tick関数はこれです:

    If tiempo >= 4000 Then
        Timer1.Enabled = False        ' -> To make it stop when it reaches 4000 (4 seconds)

    ElseIf tiempo <= 3900 Then

        ColocaImagen(1, GeneraAleatorio(1, 9))
        ColocaImagen(2, GeneraAleatorio(1, 9))
        ColocaImagen(3, GeneraAleatorio(1, 9))

        If tiempo >= ProgressBar.Minimum & tiempo <= ProgressBar.Maximum Then
            ProgressBar.Value = tiempo         
        End If

        tiempo = tiempo + 100                  'Tiempo is "time" in Spanish, it increases 100 every 100ms
    End If

timer1.enabled = trueを呼び出すと、両方の方法で続行されるようです。プログラムはティック関数に入りますが、タイマーが停止するのを待たずにゲームの終わりに向かって進みます。4秒経過してから、正しい画像を表示し、必要なアクションを実行するか、msgboxなどを表示します。

4

2 に答える 2

0

これを試して:

While (Timer1.Enabled) {} // タイマーが終了するまでブロックし続けます

'CALCULATE WINNING RESULT
valor1 = GeneraAleatorio(1, 9)   -> This custom function returns a random number
valor2 = GeneraAleatorio(1, 9)
valor3 = GeneraAleatorio(1, 9)

Timer1.Enabled = True

While (Timer1.Enabled) {} // Will keep blocking until the timer sets Enabled to false

'NOW I PUT THE WINNING PICTURES THAT CORRESPOND WITH THE NUMBERS
ColocaImagen(1, valor1)  -> Another custom made function, takes the position (1 to 3) and an image (1 to 9)
ColocaImagen(2, valor2)
ColocaImagen(3, valor3)

'END GAME
End()          -> or whatever

タイマーを開始しても、プログラムが停止して待機することはありません。

また:

while ループは、内部にスリープがない場合、CPU を使い果たします – pinkfloydx33

于 2013-02-24T00:14:43.130 に答える
0

SubRoutine を作成し、Timer が 4000 に達したときに呼び出すだけです。このようなものがうまくいくかどうかを確認してください。

Public Class Form1

    Dim valor1 As Integer
    Dim valor2 As Integer
    Dim valor3 As Integer


    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If Timer1.Enabled Then Exit Sub
        'CALCULATE WINNING RESULT
        valor1 = GeneraAleatorio(1, 9)
        valor2 = GeneraAleatorio(1, 9)
        valor3 = GeneraAleatorio(1, 9)
        Timer1.Enabled = True

    End Sub

    Public Sub ShowFinalResult()
        'NOW I PUT THE WINNING PICTURES THAT CORRESPOND WITH THE NUMBERS
        ColocaImagen(1, valor1)
        ColocaImagen(2, valor2)
        ColocaImagen(3, valor3)
    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Static tiempo As Integer
        Timer1.Enabled = False
        If tiempo >= 4000 Then
             tiempo = 0
             ShowFinalResult()

        ElseIf tiempo <= 3900 Then

            ColocaImagen(1, GeneraAleatorio(1, 9))
            ColocaImagen(2, GeneraAleatorio(1, 9))
            ColocaImagen(3, GeneraAleatorio(1, 9))

            tiempo = tiempo + 100 

            If tiempo >= ProgressBar1.Minimum And tiempo <= ProgressBar1.Maximum Then ProgressBar1.Value = tiempo

            Timer1.Enabled = True
        End If

    End Sub

End Class
于 2013-02-24T05:29:58.837 に答える