Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: creiko en 12 Septiembre 2016, 04:43 am



Título: abrir varios formularios desde un solo formulario
Publicado por: creiko en 12 Septiembre 2016, 04:43 am
buenas noches una pregunta



tengo que hacer este  programa que tenga 5 formularios:

1. Se debe Generar el Numero aleatorio del 1 al 25 en cada uno de los tres tableros

2. Se debe Llenar todo el Tablero para ganar

3. Debe haber la opción de manual y automático.

4. En cada tablero se debe llevar las cuentas de buenas y malas.

5 Realizar los 4 formularios pequeños de tal manera que se deben poder ver los 4 a la vez
Formulario 1

6. Desde este formulario se juega se debe poder jugar automático o manual.

tengo lo que me piden en un solo formulario.  los 15 números aleatorios y sin repetirse, el generador de la letra y el numero, el contador de buenas y malas , la parte de forma manual y automático

he visto una orden que es
Dim frm As New Form2()
frm.Show()

me abre los 5 cartones pero no logro. que se me generen los 15 números diferentes en cada cartón y el contador de buenas y malas en cada unos de ellos. y cuando uno de estos se llene me diga ganaste con el cartón ejemplo (cartón numero 2)

si alguien me brinda una ayuda los agradecería


Título: Re: abrir varios formularios desde un solo formulario
Publicado por: okik en 12 Septiembre 2016, 13:59 pm
hombre compañero no querrás que te hagamos el programa entero.
Deberías añadir algo de código y digas donde te da el problema o falla.

¿Cómo generas los números aleatorios? dices que no te los crea, ¿Cómo lo haces? ¿Has usado RANDOM?

Esto generaría un número aleatorio de 1 al 15
Código
  1. Private Sub Form_Load()
  2. Dim N As Integer
  3. Randomize
  4. Me.Show
  5. N = Int((Rnd * 15) + 1)
  6. Print N
  7. End Sub


Funcionamiento del RANDOM

Código:
Int(Rnd * (Límite_superior - límite_inferior + 1)  + límite_inferior)

Ejemplos:
==========================================
Si quieres números del 2 a 5:
Límite superior = 5
Límite inferior = 2

Queda:
Código:
N = Int(Rnd * (5 - 2 + 1) + 2)

Resolviendo queda:
Código:
N = Int((Rnd * 4) + 2)


==========================================
Si quieres números del 1 al 15:
Límite superior = 15
Límite inferior = 1

Queda:
Código:
N = Int(Rnd * (15 - 1 + 1) + 1)

Resolviendo queda:
Código:
N = Int((Rnd * 15) + 1)


Para evitar que se repitan:


Esto lo metes en un MÓDULO

Código
  1. Option Explicit
  2. Dim Contador As Integer
  3. Const LimSuperior = 200
  4. Dim lstNumAzar(1 To LimSuperior) As Integer
  5. Public Function NumeroAleatorio(ByVal SizeBucle As Integer) As Integer
  6. 'On Error GoTo EvitarError
  7. Dim i As Integer
  8. Dim strNumAzar As Integer
  9. Dim Repetido As Boolean
  10.  
  11.  
  12. 'reiniciar bucle
  13. If Contador = SizeBucle Then
  14. Contador = 0
  15. strNumAzar = 0
  16. NumeroAleatorio = 0
  17. For i = 1 To LimSuperior
  18. lstNumAzar(i) = 0
  19. Next i
  20. End If
  21. '.................................................
  22.  
  23. Do
  24. If Contador = SizeBucle Then Exit Do
  25. Randomize
  26. Repetido = False
  27.    strNumAzar = Int(Int(SizeBucle) * Rnd) + 1
  28. For i = 1 To SizeBucle
  29.        If lstNumAzar(i) = strNumAzar Then Repetido = True
  30.     Next i
  31. If Repetido = False Then
  32. Contador = Contador + 1
  33. lstNumAzar(Contador) = strNumAzar
  34. NumeroAleatorio = strNumAzar
  35. Repetido = False
  36. End If
  37. DoEvents
  38. Loop While Repetido = True
  39. End Function
  40.  


Desde de un FORM lo llamas así (como ejemplo):
Código
  1. Dim I as integer
  2. Text1.Text = ""
  3. For I = 1 To 15
  4. Text1.Text = Text1.Text & NumeroAleatorio(15) & vbCrLf
  5. Next I
  6.  

Cada vez que se llama a NumeroAleatorio devuelve un número del 1 al 15 distinto. Una vez se obtienen todos si se vuelve a llamar vuelve a empezar



Nota:
la variable SizeBucle antes lo llamé TamañoBucle, pero como el GesSHI de el hacker no acepta la Ñ lo he cambiado a SizeBucle.

El máximo permitido por la función es 200. pero se puede cambiar a otro valor cambiando la constante LimSuperior.




Otro ejemplo de uso:

Código
  1. Option Explicit
  2. Dim CuentaClicks As Integer
  3. Private Sub Command2_Click()
  4.  
  5. If CuentaClicks <= 15 Then
  6.    Text1.Text = ""
  7.    CuentaClicks = CuentaClicks + 1
  8.    Text1.Text = NumeroAleatorio(15)
  9.  
  10.    If CuentaClicks = 15 Then
  11.       MsgBox ("ganaste con el cartón ejemplo cartón numero 1")
  12.       CuentaClicks = 0
  13.    End If
  14. End If
  15.  
  16. End Sub
  17.  

Creas un contador para saber cuando se han generado todo los números.

Suerte con el Bingo


Título: Re: abrir varios formularios desde un solo formulario
Publicado por: creiko en 12 Septiembre 2016, 15:59 pm
tengo todo lo que me piden en un solo cartón;  los 15 numero aleatorios, contador de buenas y malas, y el juego se para cuando lleno el cartón y no logro pasar todo eso a los demás cartones.

he visto esta orden que es e pasar de un formulario a otro
Dim frm As New Form2()
frm.Show()

la ayuda es como hago para que toda esa información se pase a los 4 cartones restantes, y  se me generen los 15 números diferentes en cada cartón y el contador de buenas y malas en cada unos de ellos. y cuando uno de estos se llene me diga ganaste con el cartón ejemplo (cartón numero 2)




Título: Re: abrir varios formularios desde un solo formulario
Publicado por: okik en 12 Septiembre 2016, 16:56 pm


osea que la ayuda es que yo o cualquiera haga todo esto:
tengo todo lo que me piden en un solo cartón;  los 15 numero aleatorios, contador de buenas y malas, y el juego se para cuando lleno el cartón y no logro pasar todo eso a los demás cartones.

Que por cierto no somos adivinos y no sabemos como as implementado todo eso. Cada cual lo puede hacer de una manera distinta. Y luego que hagamos lo demás, o sea todo.

En resumen que te hagamos el programa.  :¬¬

de nada