Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

SET TALK OFF

SET BELL OFF


LOCAL oForm
oForm = CREATEOBJECT("menuutama")
oForm.SHOW()
READ EVENTS

CLOSE ALL
CLEAR ALL
RETURN

DEFINE CLASS ConvertToBMP AS CUSTOM


DWORDOFFSET = 2147483648
WORDOFFSET = 32768
FileGambar = ""
FileBMP = ""
Ukuran = 0

PROCEDURE Convert
LOCAL x, Y, tinggi, lebar
x = CREATEOBJECT('form')
x.CAPTION="Konversi Grafis"
x.ALWAYSONTOP=.T.
x.WIDTH=644
x.HEIGHT=500
x.BACKCOLOR = RGB(255,255,255)
x.ADDOBJECT('Gambar','Image')

Y = x.Gambar
Y.PICTURE = THIS.FileGambar
IF (Y.WIDTH>640) .OR. (Y.HEIGHT>480)
IF (Y.WIDTH>Y.HEIGHT)
lebar=640
tinggi=(640*(Y.HEIGHT/Y.WIDTH))+1

ELSE
tinggi=480
lebar=(480*(Y.WIDTH/Y.HEIGHT))+1
ENDIF

Y.STRETCH = 1
Y.WIDTH=lebar
Y.HEIGHT=tinggi
ELSE
Y.STRETCH = 0
ENDIF
Y.MOVE(1,1)
Y.VISIBLE = .T.
x.ADDOBJECT("Lab1","Label")
x.lab1.BACKSTYLE=0
x.lab1.AUTOSIZE=.T.
x.lab1.CAPTION="Silakan tunggu, konversi grafis sedang dalam proses ..."
x.lab1.FONTSIZE=10
x.lab1.FONTBOLD=.T.
x.lab1.TOP=482
x.lab1.LEFT=5
x.lab1.VISIBLE=.T.
tinggi=FLOOR(Y.HEIGHT/THIS.Ukuran)
lebar=FLOOR(Y.WIDTH/THIS.Ukuran)
x.SHOW()

hitung=0
FOR a=1 TO THIS.Ukuran
FOR b=1 TO THIS.Ukuran
IF !((a=THIS.Ukuran) AND (b=THIS.Ukuran))
hitung = hitung + 1
IF hitung<10
chitung="0"+STR(hitung,1)
ELSE
chitung=STR(hitung,2)
ENDIF

WAIT WINDOW "Membuat Potongan Gambar yang ke-"+TRANSFORM(hitung) NOWAIT

THIS.BuildBMP(x,THIS.FileBMP+chitung+".BMP",Y.LEFT+((b-1)*lebar),Y.LEFT+
(b*lebar),Y.TOP+((a-1)*tinggi),Y.TOP+(a*tinggi))

ENDIF

ENDFOR
ENDFOR
WAIT WINDOW "Konversi Grafis selesai" NOWAIT
x.RELEASE
ENDPROC

PROCEDURE BuildBMP
LPARAMETERS toForm, tcFile, tnX1, tnX2, tnY1, tnY2
LOCAL nX1, nX2, nY1, nY2, nWidth, nHeight, nPixels, i, j, cBMP, cColArray,cPad
nX1 = THIS.TVL(tnX1, 0)
nX2 = THIS.TVL(tnX2, toForm.WIDTH-1)
nY1 = THIS.TVL(tnY1, 0)
nY2 = THIS.TVL(tnY2, toForm.HEIGHT-1)
nWidth = nX2 - nX1 + 1

cPad = REPLICATE(CHR(0),MOD(nWidth,4))

nHeight = nY2 - nY1 + 1


nPixels = nWidth * nHeight
IF nPixels <>
RETURN .F.
ENDIF

cBMP = 'BM' + THIS.NumToDWord(54 + nWidth * nHeight * 3) + THIS.NumToWord(0) +


THIS.NumToWord(0) + THIS.NumToDWord(54)
cBMP = cBMP + THIS.GetBMPInfoHeader(nWidth, nHeight) cColArray = ''
FOR j = nY2 TO nY1 STEP -1
FOR i = nX1 TO nX2
cColArray = cColArray + THIS.GetBinaryColor(toForm.POINT(i,j))
ENDFOR
cColArray = cColArray + cPad
ENDFOR
cBMP = cBMP + cColArray
STRTOFILE(cBMP, tcFile)
ENDPROC

PROCEDURE GetBMPInfoHeader LPARAMETERS tnWidth, tnHeight LOCAL cHeader,


cZero cZero = THIS.NumToDWord(0) cHeader = THIS.NumToDWord(40) +
THIS.NumToDWord(tnWidth) + THIS.NumToDWord(tnHeight) cHeader = cHeader +
THIS.NumToWord(1) + THIS.NumToWord(24) + cZero + cZero cHeader = cHeader +
THIS.NumToDWord(3780) + THIS.NumToDWord(3780) + cZero + cZero RETURN cHeader
ENDPROC PROCEDURE GetBinaryColor LPARAMETERS tnColor RETURN
SUBSTR(BINTOC(MAX(tnColor,0) - THIS.DWORDOFFSET),2) ENDPROC PROCEDURE
NumToDWord LPARAMETERS tnVal LOCAL cBin cBin = BINTOC(tnVal -
THIS.DWORDOFFSET) RETURN SUBSTR(cBin,4,1) + SUBSTR(cBin,3,1) +
SUBSTR(cBin,2,1) +SUBSTR(cBin,1,1) ENDPROC PROCEDURE NumToWord
LPARAMETERS tnVal LOCAL cBin cBin = BINTOC(tnVal - THIS.WORDOFFSET, 2)
RETURN SUBSTR(cBin,2,1) + SUBSTR(cBin,1,1) ENDPROC PROCEDURE TVL
LPARAMETERS tuParamValue, tuInitValue RETURN IIF(VARTYPE(tuParamValue) =
VARTYPE(tuInitValue), tuParamValue,tuInitValue) ENDPROC ENDDEFINE DEFINE
CLASS gamepuzzle AS FORM TOP = 3 LEFT = 9 HEIGHT = 500 WIDTH = 683 CAPTION =
"Permainan Puzzle, http://www.fox-id.com" MAXBUTTON = .F. poskosong = (0) Ukuran = (0)
NAME = "gamepuzzle" mode_acak = .F. ADD OBJECT command1 AS COMMANDBUTTON
WITH ; AUTOSIZE = .T., ; TOP = 465, ; LEFT = 7, ; HEIGHT = 27, ; WIDTH = 116, ;
CAPTION = "\ NAME = "Command1" PROCEDURE acak LOCAL nilai,cString
THISFORM.LOCKSCREEN= .T. THISFORM.mode_acak=.T. FOR a=1 TO
(THISFORM.Ukuran*100) nilai=MOD(FLOOR(RAND()*100),4) DO CASE CASE nilai=0 &&
Atas cString=THISFORM.cari(THISFORM.poskosong-THISFORM.Ukuran) CASE nilai=1 &&
Kanan cString=THISFORM.cari(THISFORM.poskosong+1) CASE nilai=2 && Bawah
cString=THISFORM.cari(THISFORM.poskosong+THISFORM.Ukuran) CASE nilai=3 && Kiri
cString=THISFORM.cari(THISFORM.poskosong-1) ENDCASE IF !EMPTY(cString)
THISFORM.&cString..CLICK ENDIF ENDFOR THISFORM.LOCKSCREEN= .F.
THISFORM.mode_acak=.F. RETURN ENDPROC PROCEDURE cari LPARAMETERS npos
LOCAL abc, cString, balik, ketemu ketemu=.F. FOR abc=1 TO ((THISFORM.Ukuran^2)-1)
cString="Puzzle"+IIF(abc>9,STR(abc,2),"0"+STR(abc,1)) IF
THISFORM.&cString..Posisi=npos ketemu=.T. balik=cString EXIT ENDIF ENDFOR IF !
ketemu balik="" ENDIF RETURN (balik) ENDPROC PROCEDURE menang LOCAL win,
cString win=.T. FOR abc=1 TO ((THISFORM.Ukuran^2)-1)
cString="Puzzle"+IIF(abc>9,STR(abc,2),"0"+STR(abc,1)) IF THISFORM.&cString..Posisi!
=abc win=.F. EXIT ENDIF ENDFOR RETURN (win) ENDPROC PROCEDURE INIT LOCAL
hitung, cString CLEAR RESOURCES DO CASE CASE settings.Ukuran=1 THISFORM.Ukuran
= 4 CASE settings.Ukuran=2 THISFORM.Ukuran = 6 CASE settings.Ukuran=3
THISFORM.Ukuran = 8 ENDCASE hitung=0 THISFORM.poskosong=THISFORM.Ukuran^2
FOR kolom=1 TO THISFORM.Ukuran FOR baris=1 TO THISFORM.Ukuran IF !
((kolom=THISFORM.Ukuran) .AND. (baris=THISFORM.Ukuran)) hitung = hitung + 1 cString
= "Puzzle"+IIF(hitung>9,STR(hitung,2),"0"+STR(hitung,1))
THISFORM.ADDOBJECT(cString,"Potongan")
THISFORM.&cString..PICTURE=SYS(2023)+"\Fox_ID"+cString+".BMP"
THISFORM.&cString..LEFT=10+(baris-1)*THISFORM.&cString..WIDTH
THISFORM.&cString..TOP=10+(kolom-1)*THISFORM.&cString..HEIGHT
THISFORM.&cString..Posisi=hitung THISFORM.&cString..VISIBLE = .T. ENDIF ENDFOR
ENDFOR THISFORM.WIDTH=20+(THISFORM.&cString..WIDTH*THISFORM.Ukuran)
THISFORM.HEIGHT=70+(THISFORM.&cString..HEIGHT*THISFORM.Ukuran)
THISFORM.command1.TOP=THISFORM.HEIGHT - 45 THISFORM.BORDERSTYLE= 2
THISFORM.AUTOCENTER= .T. THISFORM.acak ENDPROC PROCEDURE
command1.CLICK LOCAL oForm oForm = CREATEOBJECT('form') WITH
oForm .CAPTION = "Gambar Aslinya" .ALWAYSONTOP = .T. .MAXBUTTON
= .F. .WIDTH = 644 .HEIGHT = 484 .BACKCOLOR =
RGB(255,255,255) .ADDOBJECT('Gambar','Image') Y = .Gambar ENDWITH Y.PICTURE =
settings.path_pic IF (Y.WIDTH>640) .OR. (Y.HEIGHT>480) IF (Y.WIDTH>Y.HEIGHT)
lebar=640 tinggi=(640*(Y.HEIGHT/Y.WIDTH))+1 ELSE tinggi=480
lebar=(480*(Y.WIDTH/Y.HEIGHT))+1 ENDIF Y.STRETCH = 1 Y.WIDTH = lebar
Y.HEIGHT = tinggi ELSE Y.STRETCH = 0 ENDIF Y.MOVE(1,1) Y.VISIBLE = .T.
oForm.AUTOCENTER = .T. oForm.SHOW(1) ENDPROC ENDDEFINE DEFINE CLASS
menuutama AS FORM DATASESSION = 2 HEIGHT = 296 WIDTH = 418 AUTOCENTER
= .T. BORDERSTYLE = 2 CAPTION = "Permainan Puzzle" NAME = "menuutama" ADD
OBJECT edit1 AS EDITBOX WITH ; HEIGHT = 132, ; LEFT = 23, ; READONLY = .T., ;
TOP = 10, ; WIDTH = 371, ; NAME = "Edit1" ADD OBJECT command1 AS
COMMANDBUTTON WITH ; AUTOSIZE = .T., ; TOP = 152, ; LEFT = 23, ; HEIGHT = 27, ;
WIDTH = 97, ; CAPTION = "Ambil Gambar", ; NAME = "Command1" ADD OBJECT
namafile AS LABEL WITH ; BACKSTYLE = 0, ; CAPTION = "", ; HEIGHT = 17, ; LEFT =
125, ; TOP = 158, ; WIDTH = 278, ; NAME = "NamaFile" ADD OBJECT optiongroup2 AS
OPTIONGROUP WITH ; AUTOSIZE = .T., ; BUTTONCOUNT = 3, ; BACKSTYLE = 0, ;
VALUE = 1, ; HEIGHT = 65, ; LEFT = 23, ; TOP = 202, ; WIDTH = 133, ; NAME =
"Optiongroup2", ; Option1.BACKSTYLE = 0, ; Option1.CAPTION = "Pemula ( 4 x 4)", ;
Option1.VALUE = 1, ; Option1.HEIGHT = 17, ; Option1.LEFT = 5, ; Option1.STYLE = 0, ;
Option1.TOP = 5, ; Option1.WIDTH = 123, ; Option1.AUTOSIZE = .F., ; Option1.NAME =
"Option1", ; Option2.BACKSTYLE = 0, ; Option2.CAPTION = "Profesional ( 6 x 6 )", ;
Option2.HEIGHT = 17, ; Option2.LEFT = 5, ; Option2.STYLE = 0, ; Option2.TOP = 24, ;
Option2.WIDTH = 123, ; Option2.AUTOSIZE = .F., ; Option2.NAME = "Option2", ;
Option3.BACKSTYLE = 0, ; Option3.CAPTION = "Mahir ( 8 x 8 )", ; Option3.HEIGHT = 17, ;
Option3.LEFT = 5, ; Option3.STYLE = 0, ; Option3.TOP = 43, ; Option3.WIDTH = 123, ;
Option3.AUTOSIZE = .F., ; Option3.NAME = "Option3" ADD OBJECT label3 AS LABEL
WITH ; AUTOSIZE = .T., ; BACKSTYLE = 0, ; CAPTION = "Tingkatan :", ; HEIGHT = 17, ;
LEFT = 23, ; TOP = 184, ; WIDTH = 62, ; NAME = "Label3" ADD OBJECT command2 AS
COMMANDBUTTON WITH ; TOP = 206, ; LEFT = 244, ; HEIGHT = 60, ; WIDTH = 84, ;
FONTBOLD = .T., ; FONTSIZE = 14, ; CAPTION = "\ NAME = "Command2" ADD OBJECT
label2 AS LABEL WITH ; AUTOSIZE = .T., ; FONTBOLD = .T., ; BACKSTYLE = 0, ;
CAPTION = "http://www.fox-id.com , Komunitas Programmer FoxPro Indonesia", ; HEIGHT =
17, ; LEFT = 5, ; TOP = 275, ; WIDTH = 373, ; FORECOLOR = RGB(255,0,0), ; NAME =
"Label2" PROCEDURE INIT SET TALK OFF SET BELL OFF IF FILE("Settings.DBF") USE
settings.DBF ALIAS settings IN 0 THISFORM.namafile.CAPTION=settings.path_pic
THISFORM.optiongroup2.VALUE=settings.Ukuran ELSE CREATE TABLE settings FREE
( path_pic M(4), Ukuran N(1) ) APPEND BLANK THISFORM.namafile.CAPTION="" ENDIF
THISFORM.edit1.VALUE=; "Permainan ini saya dedikasikan untuk para pecinta Visual FoxPro
di Indonesia pada umumnya, dan pengunjung Fox-ID pada "+; "khususnya. Semoga game ini
bisa menjadi penghibur dikala suntuk bikin program ... hehehehe"+CHR(013)+CHR(013)+;
"Salam,"+CHR(013)+CHR(013)+; "Handi Rusli" RETURN ENDPROC PROCEDURE
DESTROY CLEAR EVENTS ENDPROC PROCEDURE command1.CLICK
THISFORM.namafile.CAPTION=GETPICT() RETURN ENDPROC PROCEDURE
command2.CLICK IF EMPTY(THISFORM.namafile.CAPTION) =MESSAGEBOX("Gambar
belum dipilih",48,"Oops !!!") ELSE LOCAL oConvert, oFormPuzzle IF !
(ALLTRIM(settings.path_pic)==THISFORM.namafile.CAPTION) .OR. (settings.Ukuran!
=THISFORM.optiongroup2.VALUE) REPLACE path_pic WITH
THISFORM.namafile.CAPTION, ; Ukuran WITH THISFORM.optiongroup2.VALUE IN
settings FLUSH oConvert=CREATEOBJECT("ConvertToBMP")
oConvert.FileGambar=THISFORM.namafile.CAPTION oConvert.FileBMP=SYS(2023)+"\
Fox_IDPuzzle" DELETE FILE (SYS(2023)+"\Fox_IDPuzzle*.BMP") DO CASE CASE
THISFORM.optiongroup2.VALUE=1 oConvert.Ukuran=4 CASE
THISFORM.optiongroup2.VALUE=2 oConvert.Ukuran=6 CASE
THISFORM.optiongroup2.VALUE=3 oConvert.Ukuran=8 ENDCASE oConvert.Convert
ENDIF oFormPuzzle=CREATEOBJECT("GamePuzzle") oFormPuzzle.SHOW(1) ENDIF
RETURN ENDPROC ENDDEFINE DEFINE CLASS potongan AS IMAGE BORDERSTYLE
= 1 HEIGHT = 90 WIDTH = 100 Posisi = (0) NAME = "potongan" PROCEDURE CLICK
LOCAL nPindah DO CASE CASE settings.Ukuran=1 nPindah = 4 CASE settings.Ukuran=2
nPindah = 6 CASE settings.Ukuran=3 nPindah = 8 ENDCASE DO CASE CASE
(THIS.Posisi+nPindah)=THIS.PARENT.poskosong && turun ke bawah
THIS.TOP=THIS.TOP+THIS.HEIGHT THIS.PARENT.poskosong=THIS.Posisi
THIS.Posisi=THIS.Posisi+nPindah CASE (THIS.Posisi-nPindah)=THIS.PARENT.poskosong
&& naik ke atas THIS.TOP=THIS.TOP-THIS.HEIGHT
THIS.PARENT.poskosong=THIS.Posisi THIS.Posisi=THIS.Posisi-nPindah CASE
(((THIS.Posisi-1)=THIS.PARENT.poskosong) .AND. (MOD(THIS.Posisi,nPindah)!=1)) &&
bergeser ke kiri THIS.LEFT=THIS.LEFT-THIS.WIDTH
THIS.PARENT.poskosong=THIS.Posisi THIS.Posisi=THIS.Posisi-1 CASE
(((THIS.Posisi+1)=THIS.PARENT.poskosong) .AND. (MOD(THIS.Posisi,nPindah)!=0)) &&
bergeser ke kanan THIS.LEFT=THIS.LEFT+THIS.WIDTH
THIS.PARENT.poskosong=THIS.Posisi THIS.Posisi = THIS.Posisi + 1 ENDCASE IF !
(THIS.PARENT.mode_acak) IF THIS.PARENT.menang() =MESSAGEBOX("Anda
Menang",64,"Horeee !!!") ENDIF ENDIF ENDPROC ENDDEFINE

Mine coins - make money: http://bit.ly/money_crypto

BORDERSTYLE = 1
HEIGHT = 90
WIDTH = 100
Posisi = (0)
NAME = "potongan"

Mine coins - make money: http://bit.ly/money_crypto

You might also like