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
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!!!
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 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!
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?
HOLA!!!
Entonces lo que queres es una funcion de numeros aleatorios que no repita y tenga un minimo y un maximo?
GRACIAS POR LEER!!!
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
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".
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!!!
gracias, a ver si eso me sirve jajajaja
Todos los botones tendrán el mismo nombre, la diferencia estará en su indice ("index"), entonces:
'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!
Yo usualmente uso una función que tiene un juego llamado Argentum Online:
Public Function RandomNumber(ByVal LowerBound As Long, ByVal UpperBound As Long) As Long
'Initialize randomizer
Randomize Timer
'Generate random number
RandomNumber = (UpperBound - LowerBound) * Rnd + LowerBound
End Function
Se usa como: var = RandomNumber(1,9)