• Domingo 22 de Diciembre de 2024, 08:58

Autor Tema:  Problemas Con El Mastermind  (Leído 2836 veces)

ildiavolo

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Problemas Con El Mastermind
« en: Viernes 13 de Junio de 2008, 22:08 »
0
hola soy nuevo en esto i estoy tratando de hacer un mastermind de numeros en vb6 aca les dejo una foto si me pueden ayudar de que estoy haciendo mal  :(
gracias
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #1 en: Sábado 14 de Junio de 2008, 16:31 »
0
Estás intentando hacer ¿asignaciones? o declaraciones en una miss ma línea de forma múltiple.

si es lo 1º en VB.6 eso no es la forma sino a través de un bucle

Código: Text
  1. For k= 1 to 4
  2.   txtn(k).text =left$(strn, len(val(txtnumero)))
  3. next
  4.  

Como vez txtn es ahora una matriz de controles si no deseas que sea así deberás hacer la asignación manualmente uno a uno, por ejemplo

 
Código: Text
  1. txtn1.text =left$(strn, len(val(txtnumero)))
  2.  txtn2.text=txtn1.text
  3.    ...
  4.    ...
  5.  

Si en cambio lo que pretendías hacer no eran asginaciones múltiples sino declaraciones múltiples, eso si es posible pero en la misma línea no puede ir otro tipo de 'tratamiento'

todo esto es válido:

Código: Text
  1. dim s,b,c,d,e   'todas son variants
  2.  
  3. dim f,g,h,i,j as integer ' excepto j las demás son variants
  4.  
  5. dim t as integer, s as string, v as single
  6.  

entonces en la línea:
Código: Text
  1.  
  2. txtn1,  txtn2, txtn3
  3.  

señala que tipo de instrucción es si son declaraciones precédelas de un 'dim' y especifica el tipo de declaración para cada una.  Si son controles ya estan declaradas en el formulario y entonces parecer que intentas hacer asignaciones, debes hacerlo uno a uno o hacer una matriz con ellos y asignarles el valor como se indica más arriba.

Si son declaraciones y la última además (o a todas) se le asigna un valor, primero debes declarala, y luego asignarles el valor.

En vb6.0 no se permite asignar valor directamente en la declaración, todas las variables se asignan a su valor por defecto al ser creadas.
«Ma non troppo»
----> ModoVacaciones = False<----

ildiavolo

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #2 en: Sábado 14 de Junio de 2008, 18:37 »
0
veo que estoy frito no sabes donde puedo bajarlo para ver y investigarlo,  por que el asunto es que quiero entenderlo desde ya gracias  :D

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #3 en: Lunes 16 de Junio de 2008, 22:30 »
0
Yo solo te he indicado lo que veo en el cóodigo.

Sobre mastermind, no he dicho nada, tú eres quien habla de ello.

Si en vez de decir vaguedades fueras claro .... entonces se te podría orientar mejor, pero con vaguedades y generalidades no se puede hacer nada.
«Ma non troppo»
----> ModoVacaciones = False<----

ildiavolo

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #4 en: Miércoles 18 de Junio de 2008, 01:34 »
0
algo asi seria  ingresa un numero de 4 digitos ****  i el frame desaparece guardandolo en un dim a as integer, despues uno ingresa los numeros en los casilleros aca te dejo el esqueleto del proyecto  :blink:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #5 en: Miércoles 18 de Junio de 2008, 11:06 »
0
A ver, recuerda que aquí no se hacen tareas. Expones dudas y se te orienta.

No se exactamente cual es tu problema, creía que era que no entendías el código anterior, ahora pones el formulario pero no reflejas cuales son las dudas que tienes ... no cnoces las reglas del juego?.

En fin más bien creo que no sabes por donde empezar.Entonces te explico someramente como proceder pero el trabajo de programarlo será tuyo.

Veamos: De entrada podrías usar colores en vez de números, basta que pintes 10 colores, por ejemplo 10 controles label(label1(0) ... label1(9))  y le das color de fondo distinto y que la 'banca' elija al azar 4 de ellos .
Algo así:
Código: Text
  1.  
  2. public function Barajar_JugadaBanca() as integer()
  3.    dim colores(0 to 3) as integer
  4.     randomice timer  ' activamos aleatorio usando como semilla el timer
  5.     for k= 0 to 3
  6.        colores(k)= int(10 * (rnd +1)  'tomamos una bola al azar, no nos importa el color sólo la posición en la matriz
  7.     next
  8.     Barajar_JugadaBanca=colores
  9. end function
  10.  
  11.  

Luego de tener la jugada guardada, le cedes el turno al jugador 'destapando' las celdillas y activando las bolas. las bolas son controles  label (o controles image o picture) . Inicias el contador de oportunidades del jugador (un bucle va bien si tiene 10 jugadas pues eso ). Cuando pulse en el control que contiene un color capturas el color del fondo  colorElegido= label1(index).backcolor  ' colorelegido es un long

luego esperas que pulse en la línea de controles, las celdillas son una matriz de dos dimensiones

Código: Text
  1. public type infoCeldas
  2.     celda as long   ' contedrá el color
  3.     usado as boolean   ' para marcar que se ha colocado bola en ella
  4. end type
  5.  ' será 0 to 9, 0 to 3 pero eso cuando se redimensiones el array
  6. dim celdas() as infoceldas
  7.  

Cuando el usuario pulse en la línea activa (para indicar la línea activa ponle un shape rodeando las 4 celdas en que debe depositar sus bolas.

Las celdas como controles son tambien label pero con fondo blanco de entrada. necesitarás 40,

Código: Text
  1. dim lineaActiva as integer ' indica que línea sería la activa, al iniciar una partida su valor se pone a 1
  2. lineaActiva=1
  3.  
en el evento click delos  'labelCeldas' compruebas si se pulsó en la línea activa

Código: Text
  1.  
  2.  dim lineaJugador as integer
  3.  dim posicionLinea as integer
  4.   lineaJugador= index&#092;4  ' por ejemplo si era la 18  = línea 4
  5.  
  6. if lineaJugador= lineaActiva then  '
  7.     posicionLinea = index mod 4 ' por ejemplo si pulsó en la celda 18 será la 2ª en
  8. la línea
  9.     if celdas(lineaJugador,posicionlinea).usado=false then    ' depositamos el color elegido
  10.          labelcelda(index).backcolor=colorelegido
  11.          celdas(lineaJugador,posicionlinea).usado=true ' la marcamos como usada
  12.          celdas(lineaJugador,posicionlinea).color=colorElegido  ' para comprobar color posteriormente
  13.         for k=0 to 3  ' comprobamos si la línea está completa
  14.              if celdas(lineaactiva,k).usado=false then exit sub  ' si hay alguna sin marcar se sale, a la espera de que esté completo, entonces el bucle finaliza sin salir y se ejecuta el código que le sigue
  15.         next
  16.         if comprobar_Linea=true then
  17.               ' acertó , se notifica al jugador, juego termina
  18.         else
  19.               lineaActiva=lineaActiva +1
  20.               ' desplazamos el shape a la siguiente línea
  21.         end if
  22.     else
  23.         beep ' esa posición ya está ocupada
  24.     end if
  25. else
  26.     beep  ' la línea no es la activa
  27. end if
  28.  
  29.  
  30.  

comprobar_Linea es una función que compara la matriz por pareja de índices en un bucle entre 0 y 3 entre la matriz que contiene los colores ocultos que elegimos aleatoriamente y la matriz celdas(lineaActiva, ...)... esta función a su vez marca cada acierto o fallo al lado con unos form1.line(x1,y1)-(x2,y2), monoColor, BF  (monoColor debería ser blanco o negro (vbBlack ó vbWhite) en función de si acertó o falló.

Como el que debe pensar es el jugador aquí no hay que diseñar estrategia para resolverlo, te limitas a: crear función Iniciar_Partida donde pones todas las celdas del jugador en blanco haces un form1.cls para borrar los cuadraditos de fallo o acierto sobre las líneas. iniciar partida se invoca desde un botón que se activa cuando la partida termina y cuando se abre el programa, iniciar partida también borra la matriz celdas,  redim celdas(0 to 9, 0 to 3), toma la matriz aleatoria de colores (usando índices o el color eso a tu gusto) se deshabilita el botón a sí mismo y antes de salir de dicho evento se le pasa al turno al jugador...

Vamos ya lo tienes mascado...
«Ma non troppo»
----> ModoVacaciones = False<----

ildiavolo

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #6 en: Viernes 20 de Junio de 2008, 04:09 »
0
ok muy agradecido  :D

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #7 en: Viernes 20 de Junio de 2008, 22:18 »
0
Hay algunos detalles que he dejado sueltos...

Por ejemplo es deseable que el color elegido al azar no esté repetido, por lo que tendrás que comprobarlo con cada elección eso es tarea tuya.

En casi todo he usado un índica basado en 0 así 'lineaActiva' también debería ser 0 de entrada ya que hasta que no se llegue a las celda 4 no será la línea 1 de acuerdo a la fórmula usada  'lineaactiva= celda \ 4'.

No incluí una comprobación de final de juego si el jugador completa todas las líneas sin acertar. Tu deberías saber donde debe ponerse, así que queda a tu trabajo.

Fíjate que he dejado abierto la posibilidad de que puedas referirte a la matriz de solución tanto por su color como por el índice que ocupa en la fila de donde el jugador selecciona las 'bolas', en el código esto se 've' mezclado, para forzarte a pensar y descubrir que falla, por tanto antes de empezar si lo piensas bien deberías elegir cual, para hacer la lógica acorde a esa eleccción.

Si te animas pon el resultado final que veamos como te quedó...
«Ma non troppo»
----> ModoVacaciones = False<----

ildiavolo

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #8 en: Sábado 28 de Junio de 2008, 19:43 »
0
el trabajo era mas que nada en numeros, no me deja poner un link para que puedan bajar el juego pero buen aca les dejo el codigo final   B)

Option Explicit
Dim strnum As String
Dim byterr As Byte
 Dim S_MIN, S_SEC As Integer


Private Sub cmdprocesar_Click()
Dim i As Byte
Dim j As Byte
Dim pbueno As Integer
Dim pmedio As Integer
Dim pmalo As Integer
Dim bueno As Integer
Dim medio As Integer
Dim malo As Integer
Dim a As Boolean
Dim b As String
b = Txtnumero.Text

For i = 1 To Len(Txtnumerofinal.Text)
  For j = 1 + i To Len(Txtnumerofinal.Text)
    If Mid(Txtnumerofinal, i, 1) = Mid(Txtnumerofinal, j, 1) Then
      MsgBox "SOLO NUMEROS DISTINTOS"
      Txtnumerofinal.Text = ""
      Txtnumerofinal.SetFocus
      Exit Sub
    End If
  Next
Next

If Not IsNumeric(Txtnumerofinal.Text) Then
  MsgBox "SOLO SE PERMITEN NUMEROS"
  Txtnumerofinal.Text = ""
  Txtnumerofinal.SetFocus
  Exit Sub
Else
  If Txtnumerofinal.Text = "" Then
    MsgBox "SOLO NUMEROS DISTINTOS"
    Txtnumerofinal.Text = ""
    Txtnumerofinal.SetFocus
    Exit Sub
  Else
    If Len(Txtnumerofinal.Text) <> 4 Then
      MsgBox "SOLO NUMEROS DISTINTOS"
      Txtnumerofinal.Text = ""
      Txtnumerofinal.SetFocus
      Exit Sub
    End If
  End If
End If

For i = 1 To Len(Txtnumerofinal.Text)
  a = False
  j = 1
  bueno = 0
  medio = 0
 malo = 0
  Do While a = False And j <= 9
    If Mid(Txtnumerofinal.Text, i, 1) = Mid(b, j, 1) Then
      If i = j Then
       bueno = 1
        medio = 0
        malo = 0
      Else
        medio = 1
        bueno = 0
       malo = 0
      End If
      a = True
    Else
      If bueno = 0 And medio = 0 Then
        malo = 1
       bueno = 0
     medio = 0
      End If
    End If
    j = j + 1
  Loop
pbueno = pbueno + bueno
  pmedio = pmedio + medio
  pmalo = pmalo + malo
Next

Txtmalo.Text = pmalo
Txtmedio.Text = pmedio
Txtbueno.Text = pbueno

If Txtbueno = 4 Then
  MsgBox "ENHORABUENA HAS GANADO " & Txtnumero.Text
  End
End If

If Txtbueno.Text & 4 Then
  byterr = byterr + 1
  lblVer.Caption = "" & byterr & " de 10"
End If

If byterr = 10 Then
  MsgBox "PERDISTE EL NUMERO ERA: " & Txtnumero.Text
End
End If
Txtnumerofinal = ""
Txtnumerofinal.SetFocus
Print Txtnumerofinal; ""

End Sub

Private Sub Cmdorde_Click()
Dim strg As String
Dim i As Integer
Dim j As Integer
Dim numeric As Integer
Timer = True
    For i = 1 To Len(Txtnumero.Text)
        For j = 1 + i To Len(Txtnumero.Text)
            If Mid(Txtnumero, i, 1) = Mid(Txtnumero, j, 1) Then
                MsgBox "SOLO NUMEROS"
                Txtnumero.Text = ""
                Txtnumero.SetFocus
                Exit Sub
            End If
        Next
    Next
If Not IsNumeric(Txtnumero.Text) Then
    MsgBox "INGRESE SOLO NUMEROS"
        Txtnumero.Text = ""
        Txtnumero.SetFocus
    Exit Sub
Else
If Txtnumero.Text = "" Then
    MsgBox "INGRESE SOLO NUMEROS"
        Txtnumero.Text = ""
        Txtnumero.SetFocus
    Exit Sub
Else
If Len(Txtnumero.Text) <> 4 Then
    MsgBox "INGRESE SOLO NUMEROS"
        Txtnumero.Text = ""
        Txtnumero.SetFocus
    Exit Sub
End If
End If
End If
Franum.Visible = False
Framegame.Visible = True
Cmdprocesar.Enabled = True
Txtnumerofinal.Enabled = True
Txtnumerofinal.SetFocus
End Sub


Private Sub CmdSalir_Click()
End
End Sub

Private Sub cmdsalir2_Click()
End
End Sub

Private Sub Txtnum_Change()

End Sub

Private Sub Command1_Click()

MsgBox "EL JUEGO DE TRATA DE INGRESAR 4 NUMEROS DISTINTOS Y TRATAR DE ACERTAR LOS NUMEROS I SU CORRESPONDIENTE LUGAR SOLO TIENES 10 OPORTUNIDADES "
End Sub

Private Sub Form_Load()

End Sub

Private Sub Timer_Timer()
 
S_SEC = S_SEC + 1
 
 If S_SEC = 60 Then
    S_SEC = 0
    S_MIN = S_MIN + 1
End If
If S_SEC < 10 Then
    Label5.Caption = Str$(S_MIN) + ":0" + Str$(S_SEC)
Else
    Label5.Caption = Str$(S_MIN) + ":" + Str$(S_SEC)
End If
 
End Sub
Public Sub initilize()

SI = 0
TI = 0
   
Counter = 0
S_MIN = 0
S_SEC = 0
   
Dim X, Y, w, Z As Integer
   
   
   
    X = Int(10)
   Time(0) = X
    Y = Int(10)
    Do While (X = Y)
        Y = Int(10)
    Loop
   Time(1) = Y
    Z = Int(10)
    Do While (X = Z) Or (Y = Z)
        Z = Int(10)
    Loop
   Time(2) = Z
    w = Int(10)
    Do While (w = Y) Or (w = X) Or (w = Z)
        w = Int(10)
    Loop
   Time(3) = w
End Sub
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Problemas Con El Mastermind
« Respuesta #9 en: Domingo 29 de Junio de 2008, 17:05 »
0
No tiene mala pinta.  :beer:
El código no es muy clarificador, resulta nebuloso. Acostúmbrate a usar funciones y rutinas para separar el código de manipulación de la interfaz (botones, y demás) de lo que es la lóogica del programa en este caso del juego. No es posible separarlo totalmente pero usando una función puedes darle un nombre coherente y cuando decidas cambiar un botón por otro objeto para realizar la misma acción te quedará más claro. Siempre que puedas nombra tus variables con algo que tenga sentido al menos para ti. :hitcomp:

Te mando un ejemplo de un ejecutable gráfico que acabo de realizar...   :comp:   en otro momento (si a la gente le interesa y lo pide) las fuentes...
debajo de la imagen se puede descargar el ejecutable:


debajo de la imagen se puede descargar el ejecutable:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
«Ma non troppo»
----> ModoVacaciones = False<----