Buenas...
Tengo un problema con nº aleatorios en VB, probé muchísimos códigos de como generarlos pero siempre me repite los mismos números.
Lo que estoy haciendo es un "Piedra, papel o Tijera" y poniendo que cuando salga el número 1 muestre piedra, número 2 muestre papel y número 3 muestra tijera.
Pero como dije, todos los códigos que encontré en google no me sirvieron, o sea genera números aleatorios pero siempre que se vuelve a ejecutar el programa sigue con los mismos numeros. Siempre comienza igual.
Por ejemplo:
Elijo piedra y me sale papel xD.
Cierro el programa vuelvo a hacer lo mismo y me sale PAPEL.
O sea que siempre hace la misma secuencia de numeros, aleatorios pero la misma secuencia.
Espero que hayan entendido y me puedan a ayudar...
Muchas gracias!
Antes de comenzar con el rnd (Random), pon "Randomize", sin comillas, con eso inicias la semilla del random y ya no se repite cada vez que lo ejecutas :P
Es igual a esto:
http://foro.elhacker.net/scripting/vbscomo_usar_randomize-t247133.0.html
(es vbs pero la aplicación es la misma)
Saludos
Cita de: Novlucker en 8 Abril 2009, 21:34 PM
Antes de comenzar con el rnd (Random), pon "Randomize", sin comillas, con eso inicias la semilla del random y ya no se repite cada vez que lo ejecutas :P
Es igual a esto:
http://foro.elhacker.net/scripting/vbscomo_usar_randomize-t247133.0.html
(es vbs pero la aplicación es la misma)
Saludos
Hola Novlucker, gracias por responder tan rapido.
Vi el post que me pusiste arriba. Probé eso y me dio aleatorios PERFECTAMENTE.
Randomize
for i = 1 to 3
msgbox rnd()
next
El único problema es que los daba poniendo decimales. Como puedo hacer para que sea redondeados? o sea 1 o 2 o 3 y no 0.234, 1,657 etc...
Muchas gracias!
Eso ocurre porque el rnd genera números entre 0 y 1, para generar enteros dentro de un intervalo en particular:
Randomize()
Msgbox Int((3 - 1 + 1) * Rnd + 1)
Randomize()
Msgbox Int((mayor - menor + 1) * Rnd + menor)
Saludos
Muchas gracias nuevamente Novlucker, voy a poner mi código con otro "problema" que surgió (creo que es problema xD)
Private Sub image1_Click()
Frame1.Enabled = False
imgpiedra.Visible = True
Randomize (Timer)
alea = Int((3 - 1 + 1) * Rnd + 1)
If alea = 1 Then
imgpiedra2.Visible = True
ElseIf alea = 2 Then
imgpapel2.Visible = True
ElseIf alea = 3 Then
imgtijera2.Visible = True
End If
If imgpiedra.Visible = True And imgpiedra2.Visible = True Then
MsgBox ("EMPATE!!")
ElseIf imgpiedra.Visible = True And imgpapel2.Visible = True Then
MsgBox ("PERDISTE!!")
ElseIf imgpiedra.Visible = True And imgtijera2.Visible = True Then
MsgBox ("GANASTE")
End If
End Sub
Private Sub image2_Click()
imgpapel.Visible = True
Frame1.Enabled = False
Randomize (Timer)
alea = Int((3 - 1 + 1) * Rnd + 1)
If alea = 1 Then
imgpiedra2.Visible = True
ElseIf alea = 2 Then
imgpapel2.Visible = True
ElseIf alea = 3 Then
imgtijera2.Visible = True
End If
If imgpapel.Visible = True And imgpiedra2.Visible = True Then
MsgBox ("GANASTE!!")
ElseIf imgpapel.Visible = True And imgpapel2.Visible = True Then
MsgBox ("EMPATE!!")
ElseIf imgpapel.Visible = True And imgtijera2.Visible = True Then
MsgBox ("PERDISTE!!")
End If
End Sub
Private Sub image3_Click()
imgtijera.Visible = True
Frame1.Enabled = False
Randomize (Timer)
alea = Int((3 - 1 + 1) * Rnd + 1)
If alea = 1 Then
imgpiedra2.Visible = True
ElseIf alea = 2 Then
imgpapel2.Visible = True
ElseIf alea = 3 Then
imgtijera2.Visible = True
End If
If imgtijera.Visible = True And imgpiedra2.Visible = True Then
MsgBox ("PERDISTE!!")
ElseIf imgtijera.Visible = True And imgpapel2.Visible = True Then
MsgBox ("GANASTE!!")
ElseIf imgtijera.Visible = True And imgtijera2.Visible = True Then
MsgBox ("EMPATE!!")
End If
End Sub
Así lo hice yo pero probando siempre da casi igual como te decía en el anterior post. Ahora da aleatorio por ejemplo algo asi: Piedra, Piedra, Piedra, Papel, Tijera.
Y si cierro el programa empieza Tijera Tijera Tijera, Piedra :P. Siempre da los mismos o no se si fue casualidad.
Como dije les dejo el código por ahi algo esta mal.
Muchas gracias nuevamente!
Aclaro que al final me funciona todo correctamente.
Muchas gracias nuevamente Novlucker :)
Saludos!