elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  como ocultar números en un juego
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como ocultar números en un juego  (Leído 1,977 veces)
creiko

Desconectado Desconectado

Mensajes: 44


Ver Perfil
como ocultar números en un juego
« en: 4 Septiembre 2016, 04:11 am »

Buenas estoy haciendo el famoso juego de memoria
con 6 botones
tengo problemas en la parte de ocultar los números y que cuando estos no coincidan se vueltan a tapar
ya tengo la parte que estos solo se repitan 2 veces
1 2 3
3 2 1
es un ejemplo
y otra cosa mas como hago para que estos se roten en los cuadros
solo me logrado que se me cambien en 4 posiciones
si alguien me ayude o me facilite algún código de 6 cuadros para guiarme


En línea

pkj

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: como ocultar números en un juego
« Respuesta #1 en: 6 Septiembre 2016, 11:37 am »

Me aburro mucho, así que aquí tienes un ejemplo de tu juego con explicaciones.

Necesitas un command button llamado command1 y una matriz de controles Image de 6 elementos llamado Image1, (osea, pones un control Image en la ventana. lo copias y lo pegas 5 veces mas, y cuando te pregunte si quieres crear una matriz de controles le dices que si.)

Y luego pegas este code en el form:

Código
  1. Option Explicit
  2.  
  3. Dim Numeros(5) As Long
  4. Dim Imagen(5) As String
  5. Dim Descubiertas(5) As Long
  6. Dim Tachadas(5) As Long
  7. Dim ImagenReverso As String
  8. Dim Seguir As Long
  9. Dim Intentos As Long
  10. Const MaxIntentos = 5
  11.  
  12. Private Sub Form_Load()
  13.  Dim F As Long
  14.  ' definimos los ficheros de imagenes
  15.  Imagen(0) = "Imagen1.jpg"
  16.  Imagen(1) = "Imagen2.jpg"
  17.  Imagen(2) = "Imagen3.jpg"
  18.  ImagenReverso = "ImagenReverso.jpg"
  19.  Command1.Caption = "Nueva Partida" ' ponemos el titulo del boton
  20.  For F = 0 To 5
  21.    Image1(F).Stretch = True ' esto sirve para que la imagen se adapte al recuadro del control Image
  22.  Next F
  23.  Randomize Timer
  24.  ' comenzamos una nueva partida
  25.  NuevaPartida
  26. End Sub
  27.  
  28. Private Sub NuevaPartida()
  29.  Dim F As Long
  30.  Dim F2 As Long
  31.  Dim Numero As Long
  32.  ' cargamos los valores aleatorios de alguna manera...
  33.  For F = 0 To 5
  34.    Numeros(F) = 0
  35.  Next F
  36.  For F = 1 To 2
  37. Repite:
  38.    Numero = Int(Rnd * 6)
  39.    If Numeros(Numero) = 0 Then
  40.      Numeros(Numero) = 0
  41.    Else
  42.      GoTo Repite
  43.    End If
  44.  Next F
  45.  For F = 1 To 2
  46. Repite2:
  47.    Numero = Int(Rnd * 6)
  48.    If Numeros(Numero) = 0 Then
  49.      Numeros(Numero) = 1
  50.    Else
  51.      GoTo Repite2
  52.    End If
  53.  Next F
  54.  For F = 1 To 2
  55. Repite3:
  56.    Numero = Int(Rnd * 6)
  57.    If Numeros(Numero) = 0 Then
  58.      Numeros(Numero) = 2
  59.    Else
  60.      GoTo Repite3
  61.    End If
  62.  Next F
  63.  
  64.  ' inicializamos
  65.  Intentos = 0
  66.  Seguir = -1
  67.  For F = 0 To 5
  68.    Image1(F).Enabled = True
  69.    Image1(F).Picture = LoadPicture(ImagenReverso) ' cargamos los reversos de las cartas
  70.    Descubiertas(F) = 0 ' todas estan sin descubrir
  71.    Tachadas(F) = 0 ' no hay parejas tachadas
  72.  Next F
  73. End Sub
  74.  
  75. Private Sub Image1_Click(Index As Integer)
  76.  ' al hacer click
  77.  Static EnUso As Long
  78.  Dim F As Long
  79.  Dim Contador As Long
  80.  ' si la imagen esta descubierta o tachada por haber encontrado la pareja no hacemos nada y salimos
  81.  If Descubiertas(Index) <> 0 Or Tachadas(Index) <> 0 Then Exit Sub
  82.  
  83.  ' si esta sin descubrir...
  84.  ' si estamos en una pausa le metemos prisa a la sub EsperaMiliseg.
  85.  
  86.  
  87.  ' si esta sub esta en uso o ya hemos vuelto a pinchar otra imagen salimos.
  88.  If EnUso = 1 Then
  89.    If Seguir = -1 Then Seguir = Index
  90.    Exit Sub
  91.  End If
  92.  ' si no estaba en uso avisamos de que ahora si lo esta
  93.  EnUso = 1
  94.  
  95.  ' nos ponemos a la espera de otra pulsacion
  96.  Seguir = -1
  97.  
  98.  ' marcamos la imagen como descubierta
  99.  Descubiertas(Index) = 1
  100.  ' cargamos la imagen que hay que mostrar
  101.  Image1(Index).Picture = LoadPicture(Imagen(Numeros(Index)))
  102.  
  103.  ' hacemos una pausa para que se muestre la imagen
  104.  EsperaMiliseg 1000
  105.  
  106.  ' comprobamos si hay parejas o hemos acabado
  107.  Comprobar
  108.  
  109.  ' y salimos
  110.  EnUso = 0
  111.  
  112.  ' si le metimos prisa a la pausa era porque habiamos pinchado
  113.  ' en una imagen, asi que pinchamos la imagen de nuevo
  114.  If Seguir <> -1 Then
  115.    Image1_Click (Seguir)
  116.    Seguir = -1
  117.  End If
  118. End Sub
  119.  
  120. Sub EsperaMiliseg(ByVal Tiempo As Double)
  121.  Dim HoraActual As Double
  122.  On Local Error Resume Next
  123.  Seguir = -1
  124.  HoraActual = Timer
  125.  Do Until (Timer >= HoraActual + (Tiempo / 1000)) Or (Seguir = 1)
  126.    DoEvents
  127.  Loop
  128.  On Local Error GoTo 0
  129. End Sub
  130.  
  131. Private Sub Comprobar()
  132.  Dim F As Long
  133.  Dim Pic1 As Long
  134.  Dim Contador As Long
  135.  Pic1 = -1
  136.  For F = 0 To 5
  137.    ' si una imagen esta descubierta y no esta tachada por haber encontrado ya pareja...
  138.    If Descubiertas(F) <> 0 And Tachadas(F) = 0 Then
  139.      ' la contamos...
  140.      Contador = Contador + 1
  141.      ' y nos guardamos su indice.
  142.      If Pic1 = -1 Then
  143.        Pic1 = F
  144.      Else
  145.        ' si ya tenemos guardado un indice, es que esta es la segunda carta descubierta.
  146.        ' si las 2 cargas son iguales...
  147.        If Numeros(F) = Numeros(Pic1) Then
  148.          ' las tachamos...
  149.          Tachadas(F) = 1
  150.          Tachadas(Pic1) = 1
  151.          ' avisamos del acierto con un beep.
  152.          BeepAcierto
  153.        Else
  154.          ' si son diferentes avisamos del fallo.
  155.          BeepFallo
  156.        End If
  157.        ' y dejamos de buscar porque ya hemos encontrado 2 descubiertas.
  158.        Exit For
  159.      End If
  160.    End If
  161.  Next F
  162.  
  163.  ' comprobamos las descubiertas
  164.  For F = 0 To 5
  165.    If Descubiertas(F) = 0 Then Exit For
  166.  Next F
  167.  ' si hemos descubieto ya todas las cartas hemos ganado
  168.  If F = 6 Then
  169.    MsgBox "Finalizado. Has ganado."
  170.  Else
  171.    ' si no estan todas descubiertas...
  172.    If Contador = 2 Then
  173.      ' contamos los intentos.
  174.      Intentos = Intentos + 1
  175.      ' si ya has llegado al maximo de intentos pierdes
  176.      If Intentos = MaxIntentos Then
  177.        MsgBox "No te quedan intentos. Has perdido."
  178.        ' deshabilitamos los Image para no seguir procesando ordenes.
  179.        For F = 0 To 5
  180.          Image1(F).Enabled = False
  181.        Next F
  182.        ' y salimos.
  183.        GoTo FinSub
  184.      End If
  185.  
  186.      ' si no era el ultimo intento...
  187.      For F = 0 To 5
  188.        ' volteamos las cartas que no estan tachadas y seguimos.
  189.        If Tachadas(F) = 0 Then
  190.          Image1(F) = LoadPicture(ImagenReverso)
  191.          Descubiertas(F) = 0
  192.        End If
  193.      Next F
  194.    End If
  195.  End If
  196.  
  197. FinSub:
  198.  
  199. End Sub
  200.  
  201. Private Sub BeepAcierto()
  202.  Beep
  203. End Sub
  204.  
  205. Private Sub BeepFallo()
  206.  Beep
  207. End Sub
  208.  
  209. Private Sub Command1_Click()
  210.  NuevaPartida
  211. End Sub
  212.  
  213.  

No es una obra de arte pero funciona.

Saludos



 Sorry, la línea 125 (en la sub EsperaMiliseg) debería ser así:

Código
  1. Do Until (Timer >= HoraActual + (Tiempo / 1000)) Or (Seguir <> -1)
  2.  
Si no, no le metemos prisa al timer :P

Resaludos

MOD EDIT: A estas alturas deberías saber que no debes hacer doble post. Edita tu mensaje.

Pido perdón, el botón Modificar es tan pequeño que creo que no lo había visto nunca.
Siempre busco abajo entre los botones grandes (y me cabreo por no poder editar :) )


« Última modificación: 12 Septiembre 2016, 21:55 pm por pkj » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines