Números Aleatorios!

Iniciado por ka0s, 8 Abril 2009, 21:30 PM

0 Miembros y 1 Visitante están viendo este tema.

ka0s

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!

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

ka0s

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!

Novlucker

Eso ocurre porque el rnd genera números entre 0 y 1, para generar enteros dentro de un intervalo en particular:

Código (vb) [Seleccionar]
Randomize()
Msgbox Int((3 - 1 + 1) * Rnd + 1)


Código (vb) [Seleccionar]
Randomize()
Msgbox Int((mayor - menor + 1) * Rnd + menor)


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

ka0s

Muchas gracias nuevamente Novlucker, voy a poner mi código con otro "problema" que surgió (creo que es problema xD)

Código (vb) [Seleccionar]
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!

ka0s

Aclaro que al final me funciona todo correctamente.
Muchas gracias nuevamente Novlucker :)

Saludos!