Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: marrison en 1 Mayo 2013, 20:39 pm



Título: excluir numeros de la funcion Rnd(x,y)?
Publicado por: marrison en 1 Mayo 2013, 20:39 pm
Hola buenas, os explico, estoy haciendo un juego para b4a y vb, pero hay una cosa que necesito y no se hacerla, el juego tendria 6 botones, el ordenador asigna a una variable x un valor aleatorio del 1 al 6, Rnd(1,7).

Vale el juego en un principio lo hice con dos jugadores y todo bien, se trata de ir pulsando botones que se desactivan cada vez que los pulsas, y si pulsas el boton correspondiente al valor aleatorio elegido anteriormente pierdes, ahora lo que queria era hacerlo de un jugador, jugar contra la maquina, pero me atasco a la hora de hacer que elija un numero, habia pensado en otro Rnd, pero lo que me preguntaba es si se pueden excluir del intervalo los valores de los botones que esten desactivados, para asi que tenga que cojer uno de los que aun estan activos, se podria excluir estos valores?

Tambien habia pensado otra cosa que era hacer un numero aleatorio, mirar si ese esta desactivado, y si esta desactivado elegir otro hasta que coja un valor posible, pero es muy largo y lioso, y podria equivocarme, hay alguna otra forma de hacerlo?

Como lo hariais? muchas gracias de antemano, un saludo


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: 79137913 en 2 Mayo 2013, 13:30 pm
HOLA!!!

Esto es programacion basica!

Te diria que leas esto, seguramente encuentres la respuesta:
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/71.htm

GRACIAS POR LEER!!!


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: marrison en 2 Mayo 2013, 18:15 pm
HOLA!!!

Esto es programacion basica!

Te diria que leas esto, seguramente encuentres la respuesta:
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/71.htm

GRACIAS POR LEER!!!

En primer lugar gracias por contestar, solo eso ya se agradece, tambien gracias por el link, encontre cosas utiles, pero no exactamente lo que buscaba... de todas formas muchas gracias;

Una cosa con lo de que esto es programacion basica que has querido decir? No puedo ponerlo aqui?
 Me tocara hacer un bucle con la sentencia if, espero no liarme mucho jajaja, muchas gracias :)


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: ignorantev1.1 en 2 Mayo 2013, 19:10 pm
Es sencillo: Mete el indice de cada botón válido a un arreglo, llama a la función Rand con el tamaño del arreglo como parámetro, y ¡chanchan!, te arrojará un número dentro del arreglo que contendrá el indice de un botón válido.

¡Saludos!


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: marrison en 3 Mayo 2013, 15:03 pm
Es sencillo: Mete el indice de cada botón válido a un arreglo, llama a la función Rand con el tamaño del arreglo como parámetro, y ¡chanchan!, te arrojará un número dentro del arreglo que contendrá el indice de un botón válido.

¡Saludos!

lo siento, soy nuevo en esto de vb y no lo he entendido muy bien... hago un arra de los botones validos, pero es que eso cambia, como puedo hacer que solo esten los validos?


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: 79137913 en 3 Mayo 2013, 15:19 pm
HOLA!!!

Entonces lo que queres es una funcion de numeros aleatorios que no repita y tenga un minimo y un maximo?

GRACIAS POR LEER!!!


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: marrison en 3 Mayo 2013, 15:26 pm
HOLA!!!

Entonces lo que queres es una funcion de numeros aleatorios que no repita y tenga un minimo y un maximo?

GRACIAS POR LEER!!!

no exactamente, hay 6 botones, cada boton con un numero, al principio genero un numero aleatorio con Rnd(1,7), al pulsar un boton hay dos opciones, si el numero del boton corresponde con el numero aleatorio pierdes, si no pasa turno y se bloquea,

Lo he hecho con dos jugadores, cada uno elige el boton, ahora lo que quiero es hacer que solo sea para un jugador, de tal forma que el pc piense un boton para pulsar, de ahi lo del aleatorio, pero como hay algunos botones que estan desactivados no funionaria, por eso quiero excluir de la funcion Rnd los numeros de los botones que esten desactivados, no se si me explico....

Muchas gracias por contestar, un saludo


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: 79137913 en 3 Mayo 2013, 15:58 pm
HOLA!!!

Espero que entiendas el codigo que arme.

Es un ejemplo, la funcion devolvera numeros enteros entre el minimo y el maximo inclusive exeptuando los numeros que se encuentren en el Vector "Excluir".

Código
  1. Private Sub Form_Load()
  2.    Dim Excluidos(2) As Long
  3.    Excluidos(0) = 2
  4.    Excluidos(1) = 4
  5.    Excluidos(2) = 5
  6.    Debug.Print RndExcluye(1, 7, Excluidos)
  7.    End
  8.  
  9. End Sub
  10. Private Function RndExcluye(Min As Long, Max As Long, Excluir() As Long) As Long
  11.    Dim Num As Long
  12.    Dim Flag As Boolean
  13.        Randomize Timer
  14.        Flag = True
  15.        Do While Flag = True
  16.            Num = CLng((Min - Max) * Rnd + Max)
  17.            Flag = False
  18.            For x = 0 To UBound(Excluir)
  19.                If Excluir(x) = Num Then Flag = True
  20.            Next
  21.        Loop
  22.        RndExcluye = Num
  23. End Function
  24.  

GRACIAS POR LEER!!!


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: marrison en 3 Mayo 2013, 16:04 pm
gracias, a ver si eso me sirve jajajaja


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: ignorantev1.1 en 3 Mayo 2013, 19:16 pm
Todos los botones tendrán el mismo nombre, la diferencia estará en su indice ("index"), entonces:

Código
  1. 'Los botones se llamarán "boton"
  2. Dim arrayConIndicesValidos() as Integer
  3. Dim tamanoArray as Integer
  4.  
  5. Sub paraLlenarElArray()
  6.   Dim i as Integer
  7.  
  8.   Erase arrayConIndicesValidos 'Borrar el contenido del array
  9.   tamanoArray = 0  ' ...
  10.   For i=0 to Boton.Count - 1 'Recorre todos los botones
  11.        If Boton(i).Enabled Then 'Si hay un boton (activado|válido|enabled) lo mete al array de botones válidos
  12.             If tamanoArray=0 Then 'Si el array está vacío
  13.                  Redim arrayConIndicesValidos(0) 'Lo inicializa
  14.             else
  15.                  Redim Preserve arrayConIndicesValidos(tamanoArray) 'Si no lo está, lo hace un campo más grande
  16.             End If
  17.             arrayConIndicesValidos(tamanoArray) = i 'En el último campo creado registra el inidice del botón válido
  18.             tamanoArray = tamanoArray + 1 '...
  19.        End If
  20.   Next
  21. End Sub
  22.  
  23. ' (...)
  24. Call paraLlenarElArray()
  25. botonValidoAleatorio = Int(Rand * tamanoArray)
  26. Boton(botonValidoAleatorio).Enabled = False
  27. ' (...)
  28.  

¡Saludos!


Título: Re: excluir numeros de la funcion Rnd(x,y)?
Publicado por: Miseryk en 3 Mayo 2013, 23:54 pm
Yo usualmente uso una función que tiene un juego llamado Argentum Online:

Código
  1. Public Function RandomNumber(ByVal LowerBound As Long, ByVal UpperBound As Long) As Long
  2.    'Initialize randomizer
  3.    Randomize Timer
  4.  
  5.    'Generate random number
  6.    RandomNumber = (UpperBound - LowerBound) * Rnd + LowerBound
  7. End Function
  8.  

Se usa como: var = RandomNumber(1,9)