BLOCKS MEMORY

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

User avatar
LOUIS
Posts: 270
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

BLOCKS MEMORY

Post by LOUIS »

Hola Estimados Amigos

Me puse a programar un jueguito parecido al memory blocks que salió allá por 1991, he avanzado bastante (aunque no es igual al original :roll: ) el problema está en que al dar click en un número (del 1 al 20) para luego dar click en otro número y tratar de encontrar el par similar, en cada click muestra una imagen, pero luego se va y permanece la pantalla principal de los 20 números, es decir no puedo hacer que permanezca abierta la primera imagen hasta dar el siguiente click y que muestre la segunda imagen (si las 2 imágenes no coinciden, deberían desaparecer y dejar la pantalla principal con los números del 1 al 20 y proseguir el juego)... Ahora bien, si ambas imágenes fuesen idénticas, deberían permanecer ambas imágenes abiertas sobre su número respectivo, tapando dichos números para que ya no puedan volver a ser solicitados, o también se podría limpiar el espacio correspondiente a esas 2 imágenes en la posición que fueron halladas y por ende también se borrarían los números ya encontrados, o también se podría colocar una X Grande sobre cada cuadro de la pareja ya encontrada ... y proseguir el juego buscando la siguiente pareja ... pero ese es mi gran problema, ya que soy un programador empírico y hay cosas que no entiendo bien como eso del focus o cuando una imagen haga pareja con otra idéntica y haga notar que se encontró un par.

Pero OjO, los pares sólo funcionan cuando los 2 clicks son seguidos, es decir, buscamos en el 2 con el 11, si hay pareja ok, sino, se solicita otro par como el 8 con el 20 y si no hay par, seguimos pidiendo el 2 con el 10 (se puede volver a pedir el 2 porque aún no ha encontrado su pareja respectiva).

Les adjunto el programa completo y de antemano les agradezco por darse un tiempito y darme una manito.

P.D.- El programa está compilado en la versión HMG 3.0.46 porque es con la que me he adaptado a programar.
Attachments
BLOCKS.rar
FULL PROGRAMA (INCLUYE TODO)
(1.02 MiB) Downloaded 127 times
PANTALLA PRINCIPAL
PANTALLA PRINCIPAL
IMAGEN 1.jpg (202.85 KiB) Viewed 3151 times
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: BLOCKS MEMORY

Post by SALINETAS24 »

LOUIS wrote: Sat Apr 09, 2022 1:24 am Hola Estimados Amigos

Me puse a programar un jueguito parecido al memory blocks que salió allá por 1991, he avanzado bastante (aunque no es igual al original :roll: ) el problema está en que al dar click en un número (del 1 al 20) para
.... / ...
Hola Louis, me ha gustado tu programa, un clásico para ejercitar la memoria.
Me he tomado la libertar de modificarlo.
Lo he ajustado a la resolución de mi equipo.. (tengo un cacharro :lol: ).
Ahora te genero de manera totalmente aleatoria el orden de los dibujos, pulsando la tecla de funcion F10, se reinicia.
Te pide las respuesta de dos en dos, y comprueba. Si son correctas las deja visibles, en caso contrario las tapa las dos.
Y le he puesto unos acumuladores para que veas cuantos intentos llevas y cuantos aciertos.
Espero que sea de tu agrado.
Vamos con una cervecita bien fresquita.
Attachments
BLOCKS.rar
(1.49 MiB) Downloaded 127 times
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
User avatar
LOUIS
Posts: 270
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: BLOCKS MEMORY

Post by LOUIS »

Muchas Gracias SALINETAS24 por su Amabilidad de revisar mi programita ... Está Súper ... Me encantó !!!

Tuve esta Idea porque a veces vienen parientes a mi casa y me gusta entretenerlos con adivinanzas triviales, preguntas de conocimiento básico, juegos mentales (mucho más cuando son chicos) y al que acierta les doy un premio :mrgreen:

Gracias por Compartir vuestro Conocimiento y Gracias a los Creadores de este Maravilloso Espacio de Aprendizaje.

Atentamente,
Louis
emzampi
Posts: 106
Joined: Sun Aug 11, 2013 9:00 am

Re: BLOCKS MEMORY

Post by emzampi »

Cattura_2022_04_10_21_10_49_63.jpg
franco
Posts: 921
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: BLOCKS MEMORY

Post by franco »

Thank you all.
I added 2 labels, one for New Game and one for Exit because there was no where to tell you this.
My kids can not get enough and really enjoy.
All The Best,
Franco
Canada
User avatar
LOUIS
Posts: 270
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: BLOCKS MEMORY

Post by LOUIS »

Hola Amigos

Hice una modificación al jueguito de buscar las 2 Parejas Iguales, le añadí 10 números más para que el juego no termine rápido, la cantidad de personas que pueden jugar son muchas a la vez, empieza una persona pidiendo sus 2 números y quien maneja el pc da click en los 2 números pedidos, si hay par se le da un premio y continúa pidiendo otro par, si no acierta, cede el turno a la siguiente persona.

Las figuritas jpg del 0 al 14, pueden ser cambiadas por uds si desean ... cuando se encuentra un par igual hay un sonido ...

Cuando ya se hayan obtenido las 15 parejas iguales en pantalla, se pulsa la tecla F10 y empieza otro juego.
Para salir del juego, sólo basta con dar escape.

Espero les guste, acá en mi casa nos divertimos mucho en familia.

Mi agradecimiento al Amigo SALINETAS24 por su magnífica colaboración, sin la cual no se hubiera hecho realidad este jueguito.
Attachments
BLOCKS.rar
(1.07 MiB) Downloaded 133 times
User avatar
LOUIS
Posts: 270
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: BLOCKS MEMORY

Post by LOUIS »

Amigos, qué tal ?

Espero estén todos bien de salud ... Saben les traigo una novedad, en nuestro jueguito de Blocks Memory (Buscando Pares de Imágenes Iguales), no sé si se dieron cuenta, hay un pequeño error ...

La última imagen, es decir la #30 siempre permanece ahí, es decir, no cambia, así se dé F10 o se salga del juego con Esc ... siempre la imagen #15 permanece en la posición #30 y eso me fastidiaba un poquito ... entonces revisé y revisé (Yo les dije que soy un programador empírico, no profesional) y entonces encontré una solución dirán uds rústica :oops: pero solución al fin :mrgreen:

Por favor como hice cambios en el PRG que les adjunto, la Imagen 0.jpg por favor renombrarla a 15.jpg para que no tengan inconvenientes.

Si alguien de Uds lo quiere hacer de otra forma a la que Yo hice, bueno, estamos para aprender, pueden modificar el PRG y volverlo a compartir.

De antemano, Gracias a todos Uds.
  • // ------------------------------------------------------------------------
    // --> Idea origal de LOUIS
    // ------------------------------------------------------------------------
    // --> Primera Modificación realizada por SALINETAS24
    // --> email...: SargantanaSoft@GMAIL.COM
    // --> Autor...: José Manuel Carbonell Bernabé
    // ------------------------------------------------------------------------
    // Juego de Imagenes por parejas
    // ------------------------------------------------------------------------
    // --> Segunda Modificación realizada por LOUIS
    // ------------------------------------------------------------------------

    #include "HMG.CH"
    #include "minigui.ch"
    #include "hbgtinfo.ch"
    #include "Inkey.ch"
    #include 'hbclass.ch'
    #include 'common.ch'

    FUNCTION MAIN()
    PRIVATE aAlbedrio:=ARRAY(30,2) // Son los 30 cuadros + Imagen + Estado
    PRIVATE aRespuesta[2] // Contendrá el nº de cuadro pulsado
    PRIVATE aPictu[2] // Contendrá la imagen del cuadro pulsado
    PRIVATE nContador:=0 // Para saber si es 1er cuadro o 2do
    PRIVATE nIntento :=0
    PRIVATE nAcierto :=0

    // Inicio el Albedrio
    CAMALEON()
    // PRESENTO PANTALLA
    DEFINE WINDOW PRINCIPAL1 ;
    AT 0,0 WIDTH 0 HEIGHT 0 ;
    BACKCOLOR {0,125,250} NOCAPTION MAIN

    ON KEY ESCAPE ACTION SALIR()
    ON KEY F10 ACTION Reinicio()

    @ 020,0020 IMAGE FOTO1 PICTURE "1A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(1)
    @ 020,0304-60 IMAGE FOTO2 PICTURE "2A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(2)
    @ 020,0588-120 IMAGE FOTO3 PICTURE "3A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(3)
    @ 020,0872-180 IMAGE FOTO4 PICTURE "4A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(4)
    @ 020,1156-240 IMAGE FOTO5 PICTURE "5A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(5)
    @ 020,1156 IMAGE FOTO6 PICTURE "6A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(6)

    @ 190,0020 IMAGE FOTO7 PICTURE "7A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(7)
    @ 190,0304-60 IMAGE FOTO8 PICTURE "8A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(8)
    @ 190,0588-120 IMAGE FOTO9 PICTURE "9A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(9)
    @ 190,0872-180 IMAGE FOTO10 PICTURE "10A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(10)
    @ 190,1156-240 IMAGE FOTO11 PICTURE "11A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(11)
    @ 190,1156 IMAGE FOTO12 PICTURE "12A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(12)

    @ 360,0020 IMAGE FOTO13 PICTURE "13A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(13)
    @ 360,0304-60 IMAGE FOTO14 PICTURE "14A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(14)
    @ 360,0588-120 IMAGE FOTO15 PICTURE "15A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(15)
    @ 360,0872-180 IMAGE FOTO16 PICTURE "16A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(16)
    @ 360,1156-240 IMAGE FOTO17 PICTURE "17A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(17)
    @ 360,1156 IMAGE FOTO18 PICTURE "18A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(18)

    @ 530,0020 IMAGE FOTO19 PICTURE "19A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(19)
    @ 530,0304-60 IMAGE FOTO20 PICTURE "20A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(20)
    @ 530,0588-120 IMAGE FOTO21 PICTURE "21A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(21)
    @ 530,0872-180 IMAGE FOTO22 PICTURE "22A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(22)
    @ 530,1156-240 IMAGE FOTO23 PICTURE "23A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(23)
    @ 530,1156 IMAGE FOTO24 PICTURE "24A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(24)

    @ 700,0020 IMAGE FOTO25 PICTURE "25A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(25)
    @ 700,0304-60 IMAGE FOTO26 PICTURE "26A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(26)
    @ 700,0588-120 IMAGE FOTO27 PICTURE "27A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(27)
    @ 700,0872-180 IMAGE FOTO28 PICTURE "28A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(28)
    @ 700,1156-240 IMAGE FOTO29 PICTURE "29A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(29)
    @ 700,1156 IMAGE FOTO30 PICTURE "30A.JPG" WIDTH 180 HEIGHT 150 ONCLICK Comprueba(30)

    @ 875,050 LABEL LBL1 VALUE "# DE INTENTOS" TRANSPARENT AUTOSIZE SIZE 16 BOLD
    @ 875,150 LABEL INTENTO VALUE "0" TRANSPARENT SIZE 16 FONTCOLOR WHITE BOLD
    @ 875,300 LABEL LBL2 VALUE "ACIERTOS" TRANSPARENT AUTOSIZE SIZE 16 BOLD
    @ 875,380 LABEL ACIERTO VALUE "0" TRANSPARENT SIZE 16 FONTCOLOR WHITE BOLD

    @ 860,0446 LABEL LX WIDTH 999 HEIGHT 40 FONT "MAGNETO" SIZE 20 BOLD FONTCOLOR GREEN VALUE "Creado por Louis - Reprogramado por Salinetas24 and Louis" TRANSPARENT

    @ 000,1350 LABEL L0 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "H" TRANSPARENT
    @ 090,1350 LABEL L1 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "E" TRANSPARENT
    @ 180,1350 LABEL L2 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "C" TRANSPARENT
    @ 270,1350 LABEL L3 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "H" TRANSPARENT
    @ 360,1350 LABEL L4 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "O" TRANSPARENT
    @ 450,1350 LABEL L5 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "E" TRANSPARENT
    @ 540,1350 LABEL L6 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "N" TRANSPARENT
    @ 630,1350 LABEL L7 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "H" TRANSPARENT
    @ 720,1350 LABEL L8 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "M" TRANSPARENT
    @ 810,1350 LABEL L9 WIDTH 090 HEIGHT 90 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN VALUE "G" TRANSPARENT

    END WINDOW
    PRINCIPAL1.MAXIMIZE
    PRINCIPAL1.ACTIVATE

    RETURN


    // ----------------------------------------------------------------------------------
    // Comprobacion de las respuestas
    // ----------------------------------------------------------------------------------
    FUNCTION Comprueba(nOpc)
    LOCAL cCadena, nRes1, nRes2

    // Compruebo si no está resuelto, y que no repito respuesta
    IF !aAlbedrio[nOpc][2] .AND. nOpc!=aRespuesta[1] .AND. nOpc!=aRespuesta[2]
    // Respuesta correcta, incremento contador
    nContador ++
    // Me guardo la respuesta
    aRespuesta[nContador]=nOpc
    // Veo donde estoy
    cCadena:="FOTO"+ALLTRIM(STR(nOpc))
    // Me guardo la imagen del numero
    aPictu[nContador] :=GETPROPERTY ("Principal1",cCadena,"Picture")
    // Muestro la imagen aleatoria
    SETPROPERTY("Principal1",cCadena,"Picture",aAlbedrio[nOpc][1])
    INKEY(1)
    // Estoy enseñando dos imagenes
    IF nContador = 2
    nRes1:=aRespuesta[1]
    nRes2:=aRespuesta[2]
    // Compruebo si es la misma imagen
    IF aAlbedrio[nRes1][1]=aAlbedrio[nRes2][1]
    // Son iguales, las marco como resueltas
    aAlbedrio[nRes1][2]=.T.
    aAlbedrio[nRes2][2]=.T.
    // Acumulo Acierto y lo muestro en pantalla
    nAcierto ++
    SETPROPERTY("Principal1","acierto","value",TRANSFORM(nAcierto,"999"))
    // Aqui puedes poner un aplauso u otro sonido
    PLAY WAVE "PAR.wav"
    ELSE
    // Si estoy aqui, es que no son iguales
    // cargo imagen anterior
    cCadena:="FOTO"+ALLTRIM(STR(nRes1))
    SETPROPERTY("Principal1",cCadena,"Picture",aPictu[1])
    cCadena:="FOTO"+ALLTRIM(STR(nRes2))
    SETPROPERTY("Principal1",cCadena,"Picture",aPictu[2])
    // Aqui puedes poner un sonido de error
    ENDIF
    // Inicializo contadores parciales
    nContador := 0
    aRespuesta[1]:=0
    aRespuesta[2]:=0
    // Acumulo Intentos y lo muestro en pantalla
    nIntento ++
    SETPROPERTY("Principal1","intento","value",TRANSFORM(nIntento,"999") )
    ENDIF
    ENDIF

    RETURN

    // -----------------------------------------------------------------------------------
    // Esta función Genera de forma aleatoria una secuencia de ordenación.
    // -----------------------------------------------------------------------------------
    FUNCTION CAMALEON
    // Modificación para cargar los dibujos ALEATORIAMENTE
    LOCAL nFor, nPos, nNUm, lOk
    // Inicializo el Array
    aAlbedrio:=ARRAY(30,2)
    // Genero un orden Aleatorio
    // Son QUINCE imagenes a repartir <de la 0.jpg a la 14.jpg>
    FOR nFor=1 TO 15
    // Me he dado cuenta que en la ultima se engancha,
    // asi que cargo cuando estoy en la ultima la cargo
    IF nFor=15
    FOR x=1 TO 30
    IF VALTYPE(aAlbedrio[X][1])="U"
    aAlbedrio[x][1]:=ALLTRIM(STR(nFor)+".jpg")
    aAlbedrio[x][2]:=.F.
    ENDIF
    NEXT
    EXIT
    ENDIF
    // Mientras no encuentre un cuadro vacio, y tienen que ser dos
    lOk:=.T.
    DO WHILE lOk
    nNum:=INT(HB_RANDOM(1,30)) // Genero el 1Er Número de Cuadro
    IF VALTYPE(aAlbedrio[nNum][1])="U"
    aAlbedrio[nNum][1]:=ALLTRIM(STR(nFor)+".jpg")
    aAlbedrio[nNum][2]:=.F.
    lOk:=.F.
    ENDIF
    ENDDO
    lOk:=.T.
    DO WHILE lOk
    nNum:=INT(HB_RANDOM(1,30)) // Genero el 2do Número de Cuadro
    IF VALTYPE(aAlbedrio[nNum][1])="U"
    aAlbedrio[nNum][1]:=ALLTRIM(STR(nFor)+".jpg")
    aAlbedrio[nNum][2]:=.F.
    lOk:=.F.
    ENDIF
    ENDDO
    NEXT
    RETURN

    //--------------------------------------------------------------------------------
    // Reiniciliza el Juego si se pulsa f10
    // --------------------------------------------------------------------------------
    FUNCTION Reinicio()


    LOCAL nFor, cCadena,cFoto

    XYZ()

    // Inicializo Variables
    nContador := 0
    aRespuesta[1]:=0
    aRespuesta[2]:=0
    aPictu[1]:=""
    aPictu[2]:=""
    nIntento:=0
    nAcierto:=0
    SETPROPERTY("Principal1","intento","value",TRANSFORM(nIntento,"999") )
    SETPROPERTY("Principal1","acierto","value",TRANSFORM(nAcierto,"999") )
    // Pongo imagenes originales
    FOR nFor=1 to 30
    cCadena:="FOTO"+ALLTRIM(STR(nFor))
    cFoto:=ALLTRIM(STR(nFor))+"A.JPG"
    SETPROPERTY("Principal1",cCadena,"Picture",cFoto)
    NEXT
    // Inicio el Albedrio
    CAMALEON()
    RETURN


    *-------------
    FUNCTION SALIR

    PLAY WAVE "FIN.wav"
    INKEY(1) && WAIT FOR SOUND
    PRINCIPAL1.RELEASE
    RETU



    *-------------
    FUNCTION XYZ

    * ESTO SE HACE PORQUE LA IMAGEN 15 SIEMPRE PERMANECE EN LA POSICIÓN 30 (PARA QUE ROTE)

    MY1 = substr(time(),7,1)
    MY2 = substr(time(),8,1)
    *MSGINFO (MY1)
    *MSGINFO (MY2)

    MY3=VAL(MY1)+VAL(MY2)
    *MSGINFO (STR(MY3))

    *IF MY3>10
    * MY3=VAL(MY1)*2 && PARA QUE NO PASE DE 10
    *ENDIF
    *MSGINFO (STR(MY3))

    * SIEMPRE CAMBIARÁ DEL 15 AL 0
    RENAME ("15.JPG") To ("0.JPG")

    IF MY3=1
    Rename ("1.JPG") To ("15.JPG") // CAMBIA DEL 1 AL 15
    Rename ("0.JPG") To ("1.JPG") // CAMBIA DEL 0 AL 1
    ENDIF
    IF MY3=2
    Rename ("2.JPG") To ("15.JPG") // CAMBIA DEL 2 AL 15
    Rename ("0.JPG") To ("2.JPG") // CAMBIA DEL 0 AL 2
    ENDIF
    IF MY3=3
    Rename ("3.JPG") To ("15.JPG") // CAMBIA DEL 3 AL 15
    Rename ("0.JPG") To ("3.JPG") // CAMBIA DEL 0 AL 3
    ENDIF
    IF MY3=4
    Rename ("4.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("4.JPG")
    ENDIF
    IF MY3=5
    Rename ("5.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("5.JPG")
    ENDIF
    IF MY3=6
    Rename ("6.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("6.JPG")
    ENDIF
    IF MY3=7
    Rename ("7.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("7.JPG")
    ENDIF
    IF MY3=8
    Rename ("8.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("8.JPG")
    ENDIF
    IF MY3=9
    Rename ("9.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("9.JPG")
    ENDIF
    IF MY3=10
    Rename ("10.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("10.JPG")
    ENDIF
    IF MY3=11
    Rename ("11.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("11.JPG")
    ENDIF
    IF MY3=12
    Rename ("12.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("12.JPG")
    ENDIF
    IF MY3=13
    Rename ("13.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("13.JPG")
    ENDIF
    IF MY3=14
    Rename ("14.JPG") To ("15.JPG")
    Rename ("0.JPG") To ("14.JPG")
    ENDIF

    RETU
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: BLOCKS MEMORY

Post by SALINETAS24 »

LOUIS wrote: Fri Apr 22, 2022 12:44 am Amigos, qué tal ?

Espero estén todos bien de salud ... Saben les traigo una novedad, en nuestro jueguito de Blocks Memory (Buscando Pares de Imágenes Iguales), no sé si se dieron cuenta, hay un pequeño error ...

La última imagen, es decir la #30 siempre permanece ahí, es decir, no cambia,....../ .....
Hola Louis, solo cambia la linea de los dos RANDOM por la que te indico, hay que incrementar el valor de generación, pasando de 1,30..,a 1,31

Code: Select all

	nNum:=INT(HB_RANDOM(1,31))   
Y ya que te pones yo también quitaría todos los includes que tienes y dejaría solo el necesario, en este caso

Code: Select all

#include "HMG.CH"
* #include "minigui.ch"
* #include "hbgtinfo.ch" 
* #include "Inkey.ch"
* #include 'hbclass.ch'
* #include 'common.ch'
Vamos con una cervecita fresquita para todos los hombre de buena voluntad.
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
emzampi
Posts: 106
Joined: Sun Aug 11, 2013 9:00 am

Re: BLOCKS MEMORY

Post by emzampi »

// ------------------------------------------------------------------------
// --> Idea origal de LOUIS
// ------------------------------------------------------------------------
// --> Primera Modificación realizada por SALINETAS24
// --> email...: SargantanaSoft@GMAIL.COM
// --> Autor...: José Manuel Carbonell Bernabé
// ------------------------------------------------------------------------
// Juego de Imagenes por parejas
// ------------------------------------------------------------------------
// --> Segunda Modificación realizada por LOUIS
// ------------------------------------------------------------------------

#include "HMG.CH"
*#include "minigui.ch"
*#include "hbgtinfo.ch"
*#include "Inkey.ch"
*#include 'hbclass.ch'
*#include 'common.ch'

FUNCTION MAIN()
PRIVATE aAlbedrio:=ARRAY(30,2) // Son los 30 cuadros + Imagen + Estado
PRIVATE aRespuesta[2] // Contendrá el nº de cuadro pulsado
PRIVATE aPictu[2] // Contendrá la imagen del cuadro pulsado
PRIVATE nContador:=0 // Para saber si es 1er cuadro o 2do
PRIVATE nIntento :=0
PRIVATE nAcierto :=0




Private orizw:= 1440 , verth:= 900 // risoluzione schermo di programmazione
gw= GetDesktopWidth() // risoluzione su schermo da utilizzare
gh= GetDesktopHeight() //risoluzione su schermo da utilizzare



W:=orizw/gw // da utilizzare come divisore per col width widths size // at 0, /w
H:=verth/gh // da utilizzare come divisore per row height // at /h, 0



// Inicio el Albedrio
CAMALEON()
// PRESENTO PANTALLA
DEFINE WINDOW PRINCIPAL1 ;
AT 0,0 WIDTH 0/w HEIGHT 0/h ;
BACKCOLOR {0,125,250} NOCAPTION MAIN

ON KEY ESCAPE ACTION SALIR()
ON KEY F10 ACTION Reinicio()

@ 20/h,20/w IMAGE FOTO1 PICTURE "1A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(1)
@ 20/h,244/w IMAGE FOTO2 PICTURE "2A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(2)
@ 20/h,468/w IMAGE FOTO3 PICTURE "3A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(3)
@ 20/h,692/w IMAGE FOTO4 PICTURE "4A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(4)
@ 20/h,916/w IMAGE FOTO5 PICTURE "5A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(5)
@ 20/h,1156/w IMAGE FOTO6 PICTURE "6A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(6)

@ 190/h,20/w IMAGE FOTO7 PICTURE "7A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(7)
@ 190/h,244/w IMAGE FOTO8 PICTURE "8A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(8)
@ 190/h,468/w IMAGE FOTO9 PICTURE "9A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(9)
@ 190/h,692/w IMAGE FOTO10 PICTURE "10A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(10)
@ 190/h,916/w IMAGE FOTO11 PICTURE "11A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(11)
@ 190/h,1156/w IMAGE FOTO12 PICTURE "12A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(12)

@ 360/h,20/w IMAGE FOTO13 PICTURE "13A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(13)
@ 360/h,244/w IMAGE FOTO14 PICTURE "14A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(14)
@ 360/h,468/w IMAGE FOTO15 PICTURE "15A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(15)
@ 360/h,692/w IMAGE FOTO16 PICTURE "16A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(16)
@ 360/h,916/w IMAGE FOTO17 PICTURE "17A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(17)
@ 360/h,1156/w IMAGE FOTO18 PICTURE "18A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(18)

@ 530/h,20/w IMAGE FOTO19 PICTURE "19A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(19)
@ 530/h,244/w IMAGE FOTO20 PICTURE "20A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(20)
@ 530/h,468/w IMAGE FOTO21 PICTURE "21A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(21)
@ 530/h,692/w IMAGE FOTO22 PICTURE "22A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(22)
@ 530/h,916/w IMAGE FOTO23 PICTURE "23A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(23)
@ 530/h,1156/w IMAGE FOTO24 PICTURE "24A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(24)

@ 700/h,20/w IMAGE FOTO25 PICTURE "25A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(25)
@ 700/h,244/w IMAGE FOTO26 PICTURE "26A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(26)
@ 700/h,468/w IMAGE FOTO27 PICTURE "27A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(27)
@ 700/h,692/w IMAGE FOTO28 PICTURE "28A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(28)
@ 700/h,916/w IMAGE FOTO29 PICTURE "29A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(29)
@ 700/h,1156/w IMAGE FOTO30 PICTURE "30A.JPG" WIDTH 180/w HEIGHT 150/h ONCLICK Comprueba(30)

@ 875/h,050/w LABEL LBL1 VALUE "# DE INTENTOS" TRANSPARENT AUTOSIZE SIZE 16/w BOLD
@ 875/h,150/w LABEL INTENTO VALUE "0" TRANSPARENT SIZE 16/w FONTCOLOR WHITE BOLD
@ 875/h,300/w LABEL LBL2 VALUE "ACIERTOS" TRANSPARENT AUTOSIZE SIZE 16/w BOLD
@ 875/h,380/w LABEL ACIERTO VALUE "0" TRANSPARENT SIZE 16/w FONTCOLOR WHITE BOLD

@ 860/h,0446/w LABEL LX WIDTH 999/w HEIGHT 40/h FONT "MAGNETO" SIZE 20/w BOLD FONTCOLOR GREEN VALUE "Creado por Louis - Reprogramado por Salinetas24 and Louis" TRANSPARENT

@ 000/h,1350/w LABEL L0 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "H" TRANSPARENT
@ 090/h,1350/w LABEL L1 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "E" TRANSPARENT
@ 180/h,1350/w LABEL L2 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "C" TRANSPARENT
@ 270/h,1350/w LABEL L3 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "H" TRANSPARENT
@ 360/h,1350/w LABEL L4 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "O" TRANSPARENT
@ 450/h,1350/w LABEL L5 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "E" TRANSPARENT
@ 540/h,1350/w LABEL L6 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "N" TRANSPARENT
@ 630/h,1350/w LABEL L7 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "H" TRANSPARENT
@ 720/h,1350/w LABEL L8 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "M" TRANSPARENT
@ 810/h,1350/w LABEL L9 WIDTH 90/w HEIGHT 90/h FONT "ALGERIAN" SIZE 72/w BOLD FONTCOLOR GREEN VALUE "G" TRANSPARENT

END WINDOW
PRINCIPAL1.MAXIMIZE
PRINCIPAL1.ACTIVATE

RETURN


// ----------------------------------------------------------------------------------
// Comprobacion de las respuestas
// ----------------------------------------------------------------------------------
FUNCTION Comprueba(nOpc)
LOCAL cCadena, nRes1, nRes2

// Compruebo si no está resuelto, y que no repito respuesta
IF !aAlbedrio[nOpc][2] .AND. nOpc!=aRespuesta[1] .AND. nOpc!=aRespuesta[2]
// Respuesta correcta, incremento contador
nContador ++
// Me guardo la respuesta
aRespuesta[nContador]=nOpc
// Veo donde estoy
cCadena:="FOTO"+ALLTRIM(STR(nOpc))
// Me guardo la imagen del numero
aPictu[nContador] :=GETPROPERTY ("Principal1",cCadena,"Picture")
// Muestro la imagen aleatoria
SETPROPERTY("Principal1",cCadena,"Picture",aAlbedrio[nOpc][1])
INKEY(1)
// Estoy enseñando dos imagenes
IF nContador = 2
nRes1:=aRespuesta[1]
nRes2:=aRespuesta[2]
// Compruebo si es la misma imagen
IF aAlbedrio[nRes1][1]=aAlbedrio[nRes2][1]
// Son iguales, las marco como resueltas
aAlbedrio[nRes1][2]=.T.
aAlbedrio[nRes2][2]=.T.
// Acumulo Acierto y lo muestro en pantalla
nAcierto ++
SETPROPERTY("Principal1","acierto","value",TRANSFORM(nAcierto,"999"))
// Aqui puedes poner un aplauso u otro sonido
PLAY WAVE "PAR.wav"
ELSE
// Si estoy aqui, es que no son iguales
// cargo imagen anterior
cCadena:="FOTO"+ALLTRIM(STR(nRes1))
SETPROPERTY("Principal1",cCadena,"Picture",aPictu[1])
cCadena:="FOTO"+ALLTRIM(STR(nRes2))
SETPROPERTY("Principal1",cCadena,"Picture",aPictu[2])
// Aqui puedes poner un sonido de error
ENDIF
// Inicializo contadores parciales
nContador := 0
aRespuesta[1]:=0
aRespuesta[2]:=0
// Acumulo Intentos y lo muestro en pantalla
nIntento ++
SETPROPERTY("Principal1","intento","value",TRANSFORM(nIntento,"999") )
ENDIF
ENDIF

RETURN

// -----------------------------------------------------------------------------------
// Esta función Genera de forma aleatoria una secuencia de ordenación.
// -----------------------------------------------------------------------------------
FUNCTION CAMALEON
// Modificación para cargar los dibujos ALEATORIAMENTE
LOCAL nFor, nPos, nNUm, lOk
// Inicializo el Array
aAlbedrio:=ARRAY(30,2)
// Genero un orden Aleatorio
// Son QUINCE imagenes a repartir <de la 0.jpg a la 14.jpg>
FOR nFor=0 TO 14
// Me he dado cuenta que en la ultima se engancha,
// asi que cargo cuando estoy en la ultima la cargo
IF nFor=14
FOR x=1 TO 30
IF VALTYPE(aAlbedrio[X][1])="U"
aAlbedrio[x][1]:=ALLTRIM(STR(nFor)+".jpg")
aAlbedrio[x][2]:=.F.
ENDIF
NEXT
EXIT
ENDIF
// Mientras no encuentre un cuadro vacio, y tienen que ser dos
lOk:=.T.
DO WHILE lOk
*nNum:=INT(HB_RANDOM(1,30)) // Genero el 1Er Número de Cuadro
nNum:=INT(HB_RANDOM(1,31)) // Genero el 1Er Número de Cuadro
IF VALTYPE(aAlbedrio[nNum][1])="U"
aAlbedrio[nNum][1]:=ALLTRIM(STR(nFor)+".jpg")
aAlbedrio[nNum][2]:=.F.
lOk:=.F.
ENDIF
ENDDO
lOk:=.T.
DO WHILE lOk
nNum:=INT(HB_RANDOM(1,30)) // Genero el 2do Número de Cuadro
IF VALTYPE(aAlbedrio[nNum][1])="U"
aAlbedrio[nNum][1]:=ALLTRIM(STR(nFor)+".jpg")
aAlbedrio[nNum][2]:=.F.
lOk:=.F.
ENDIF
ENDDO
NEXT
RETURN

//--------------------------------------------------------------------------------
// Reiniciliza el Juego si se pulsa f10
// --------------------------------------------------------------------------------
FUNCTION Reinicio()
LOCAL nFor, cCadena,cFoto
// Inicializo Variables
nContador := 0
aRespuesta[1]:=0
aRespuesta[2]:=0
aPictu[1]:=""
aPictu[2]:=""
nIntento:=0
nAcierto:=0
SETPROPERTY("Principal1","intento","value",TRANSFORM(nIntento,"999") )
SETPROPERTY("Principal1","acierto","value",TRANSFORM(nAcierto,"999") )
// Pongo imagenes originales
FOR nFor=1 to 30
cCadena:="FOTO"+ALLTRIM(STR(nFor))
cFoto:=ALLTRIM(STR(nFor))+"A.JPG"
SETPROPERTY("Principal1",cCadena,"Picture",cFoto)
NEXT
// Inicio el Albedrio
CAMALEON()
RETURN


*-------------
FUNCTION SALIR

PLAY WAVE "FIN.wav"
INKEY(1) && WAIT FOR SOUND
PRINCIPAL1.RELEASE
RETU
emzampi
Posts: 106
Joined: Sun Aug 11, 2013 9:00 am

Re: BLOCKS MEMORY

Post by emzampi »

funciona con cualquier resolución de pantalla
Post Reply