0

У меня есть программа в Visual Basic 2010, которая эмулирует игровой автомат.Подождите, пока таймер не остановится для продолжения

Во-первых, я генерирую 3 случайных числа от 1 до 9, и, поскольку я хотел имитировать «спины», я решил пройти цикл, в котором на экране появляются изображения фруктов и вещей игрового автомата. По завершении этого цикла пользователь должен получить соответствующие снимки для генерируемых от 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 = истина, то она продолжает в обоих направлениях: Программа входит в функции клеща, но также подходит к концу игры, не дожидаясь остановки таймера. Я хочу 4 секунды, чтобы пройти, ТОГДА показывая правильные фотографии и выполнения любых действий, которые я хочу, или показывая MsgBox или что-то

ответ

0

Просто создайте SUBROUTINE и вызвать его, когда таймер достигает 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 
+0

Спасибо! Я решил следовать вашему совету и создал суб, который в зависимости от независимо от того, выиграл игрок или нет (возможно, позже я изменю его на точечную схему) делает какие-то действия или называет другой дополнительный. – fernandopcg

+0

@fernandopcg Добро пожаловать, рад помочь –

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 

Запуск таймера не заставляет программу останавливаться и ждать.

также:

в то время как цикл будет съедать процессор без сна внутри него - pinkfloydx33

+1

Петля в то время как съест процессор без сна внутри него – pinkfloydx33

+0

Хороший вопрос, я собираюсь сделать к сведению, что в моем ответе. Реквизит! –

+0

Да, это было бы здорово, если бы не использование этого процессора :(Я решил закончить свою функцию при запуске таймера и продолжить в другом, когда останавливаю его – fernandopcg

Смежные вопросы