// ------------------------------------------------------------------------
// --> 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