excluir numeros de la funcion Rnd(x,y)?

Iniciado por marrison, 1 Mayo 2013, 20:39 PM

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

marrison

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
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

79137913

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!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

marrison

Cita de: 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!!!

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 :)
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

ignorantev1.1

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!

marrison

Cita de: 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!

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?
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

79137913

HOLA!!!

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

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

marrison

Cita de: 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!!!

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
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

79137913

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 (vb) [Seleccionar]
Private Sub Form_Load()
    Dim Excluidos(2) As Long
    Excluidos(0) = 2
    Excluidos(1) = 4
    Excluidos(2) = 5
    Debug.Print RndExcluye(1, 7, Excluidos)
    End
   
End Sub
Private Function RndExcluye(Min As Long, Max As Long, Excluir() As Long) As Long
    Dim Num As Long
    Dim Flag As Boolean
        Randomize Timer
        Flag = True
        Do While Flag = True
            Num = CLng((Min - Max) * Rnd + Max)
            Flag = False
            For x = 0 To UBound(Excluir)
                If Excluir(x) = Num Then Flag = True
            Next
        Loop
        RndExcluye = Num
End Function


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

marrison

gracias, a ver si eso me sirve jajajaja
"Es genial trabajar con ordenadores. No discuten, lo recuerdan todo y no se beben tu cerveza" (Paul Leary)

"Controlar la complejidad es la esencia de la programación" (Brian Kernigan)

"Primero resuelve el problema. Entonces, escribe el código" (John Johnson)

"640K deberían ser suficientes para todo el mundo" (Bill Gates, 1981)

ignorantev1.1

Todos los botones tendrán el mismo nombre, la diferencia estará en su indice ("index"), entonces:

Código (vb) [Seleccionar]

'Los botones se llamarán "boton"
Dim arrayConIndicesValidos() as Integer
Dim tamanoArray as Integer

Sub paraLlenarElArray()
   Dim i as Integer

   Erase arrayConIndicesValidos 'Borrar el contenido del array
   tamanoArray = 0  ' ...
   For i=0 to Boton.Count - 1 'Recorre todos los botones
        If Boton(i).Enabled Then 'Si hay un boton (activado|válido|enabled) lo mete al array de botones válidos
             If tamanoArray=0 Then 'Si el array está vacío
                  Redim arrayConIndicesValidos(0) 'Lo inicializa
             else
                  Redim Preserve arrayConIndicesValidos(tamanoArray) 'Si no lo está, lo hace un campo más grande
             End If
             arrayConIndicesValidos(tamanoArray) = i 'En el último campo creado registra el inidice del botón válido
             tamanoArray = tamanoArray + 1 '...
        End If
   Next
End Sub

' (...)
Call paraLlenarElArray()
botonValidoAleatorio = Int(Rand * tamanoArray)
Boton(botonValidoAleatorio).Enabled = False
' (...)


¡Saludos!