43 L A M P I R A N
44 Penulisan Kode Program Aplikasi Game Tetris A. Kode program aplikasi game tetris untuk form1 ( MainF.frm ) adalah sebagai berikut. Dim BANK As Database Dim RS As DAO.Recordset Private Sub C_GotFocus(Index As Integer) KeyDownC.SetFocus End Sub Private Sub Check1_Click() KeyDownC.SetFocus End Sub Private Sub Check1_KeyDown(KeyCode As Integer, Shift As Integer) KeyDownC.SetFocus End Sub Private Sub Command1_Click() RS.MoveFirst RS.Edit RS("hiscoref") = 0
45 RS.Update HIS.Caption = "Hi Score : " + CStr(RS("hiscoref")) If KeyDownC.Enabled Then KeyDownC.SetFocus End Sub Private Sub Form_GotFocus() KeyDownC.SetFocus End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 39 Then Call MOVErigth If KeyCode = 37 Then Call MOVEleft End Sub Private Sub Form_Load() 'KeyDownC.SetFocus Set BANK = DBEngine.OpenDatabase(App.Path + "\hiscore.mdb") Set RS = BANK.OpenRecordset("his") RS.MoveFirst HIS.Caption = "Hi Score : " + CStr(RS("hiscoref")) BEGflag = True If SND.Value = 1 Then j = sndplaysound(app.path + "\startgame.wav", 0) nextshape BEGflag1 = True
46 MAINtimer.Enabled = True End Sub Private Sub Form_Unload(Cancel As Integer) If SND.Value = 1 Then j = sndplaysound(app.path + "\gameover.wav", SND_ASYNC Or SND_LOOP) End Sub Private Sub KeyDownC_KeyPress(KeyCode As Integer) KeyDownC.Caption = KeyAscii 'Form1.BackColor = GRRc.BackColor If KeyCode = 48 Then If SELshape = 4 Then SELshape = 1 Else SELshape = SELshape + 1 If KeyCode = 48 Then Call ROTATEshape If KeyCode = 54 Then Call MOVErigth If KeyCode = 52 Then Call MOVEleft If KeyCode = 53 Then Call MOVEdown 'If KeyCode = 51 Then Call nextshape If KeyCode = 32 Then FASTdownFLAG = True
47 Call MOVEdown If KeyCode = 112 Or KeyCode = 80 Then Call pousekey End Sub Function GetMEi() 'If BEGflag Then ' ' BEGflag = False Call GetMEi ' COLORt = S(6) 'PRi = i 'rewflag = True Randomize Timer pishi1 = Rnd * 1000 For i = 1 To 8 If pishi1 > i * 142-142 And pishi1 <= i * 142 Then Exit For Next i TEMPi = PRi DEFshape If Not BEGflag Then PRi = i
48 Call PRIshape Else BEGflag = False Call GetMEi i = TEMPi 'BEGflag = False End Function Function nextshape() KeepFLAG = True MainI = 4 SELshape = 1 'For k = 1 To 160 ' MM(k) = False 'Next k If KeepFLAG = True Then GetMEi DEFshape For j = 0 To 3 MM(MainI + S(j)) = S(6) Next j For cleaner = 1 To 160 If MM(cleaner) <> 0 Then
49 If MM(cleaner) = 1 Then C(cleaner).BackColor = BCOLOR(1).BackColor If MM(cleaner) = 2 Then C(cleaner).BackColor = BCOLOR(2).BackColor If MM(cleaner) = 3 Then C(cleaner).BackColor = BCOLOR(3).BackColor If MM(cleaner) = 4 Then C(cleaner).BackColor = BCOLOR(4).BackColor If MM(cleaner) = 5 Then C(cleaner).BackColor = BCOLOR(5).BackColor If MM(cleaner) = 6 Then C(cleaner).BackColor = BCOLOR(6).BackColor If MM(cleaner) = 7 Then C(cleaner).BackColor = BCOLOR(7).BackColor Else C(cleaner).BackColor = BLAKc.BackColor Next cleaner If SND.Value = 1 Then j = sndplaysound(app.path + "\falldown.wav", SND_ASYNC Or SND_LOOP) End Function Private Sub LEVEL_KeyPress(KeyAscii As Integer) If KeyAscii = 112 Then Call pousekey End Sub Private Sub MAINtimer_Timer() MOVEdown End Sub
50 Function ROTATEshape() KeepFLAG = True 'MainI = 4 For j = 0 To 3 MM(MainI + S(j)) = 0 Next j 'If KeepFLAG = True Then 'GetMEi DEFshape ' temp = MainI Mod 10 If temp = 0 Then temp = 10 row = ((MainI - (temp)) / 10) + 1 If MainI > S(4) + ((row - 1) * 10) Then fillflag = True For q = 0 To 3 If MM(MainI + S(q)) Then fillflag = True Next q If fillflag Then If SELshape = 1 Then SELshape = 4 Else SELshape = SELshape - 1 DEFshape
51 fillflag = False For j = 0 To 3 MM(MainI + S(j)) = S(6) Next j For cleaner = 1 To 160 If MM(cleaner) <> 0 Then If MM(cleaner) = 1 Then C(cleaner).BackColor = BCOLOR(1).BackColor If MM(cleaner) = 2 Then C(cleaner).BackColor = BCOLOR(2).BackColor If MM(cleaner) = 3 Then C(cleaner).BackColor = BCOLOR(3).BackColor If MM(cleaner) = 4 Then C(cleaner).BackColor = BCOLOR(4).BackColor If MM(cleaner) = 5 Then C(cleaner).BackColor = BCOLOR(5).BackColor If MM(cleaner) = 6 Then C(cleaner).BackColor = BCOLOR(6).BackColor If MM(cleaner) = 7 Then C(cleaner).BackColor = BCOLOR(7).BackColor Else C(cleaner).BackColor = BLAKc.BackColor Next cleaner End Function Function MOVErigth() KeepFLAG = True For j = 0 To 3 MM(MainI + S(j)) = False Next j MainI = MainI + 1
52 temp = MainI Mod 10 If temp = 0 Then temp = 10 row = ((MainI - (temp)) / 10) + 1 If MainI > S(4) + ((row - 1) * 10) Then MainI = MainI - 1 If i = 7 And (SELshape = 2 Or SELshape = 4) And temp = 1 Then MainI = MainI - 1 For q = 0 To 3 If MM(MainI + S(q)) Then fillflag = True Next q If fillflag Then MainI = MainI - 1 fillflag = False For j = 0 To 3 MM(MainI + S(j)) = S(6) Next j For cleaner = 1 To 160 If MM(cleaner) <> 0 Then If MM(cleaner) = 1 Then C(cleaner).BackColor = BCOLOR(1).BackColor If MM(cleaner) = 2 Then C(cleaner).BackColor = BCOLOR(2).BackColor If MM(cleaner) = 3 Then C(cleaner).BackColor = BCOLOR(3).BackColor If MM(cleaner) = 4 Then C(cleaner).BackColor = BCOLOR(4).BackColor If MM(cleaner) = 5 Then C(cleaner).BackColor = BCOLOR(5).BackColor If MM(cleaner) = 6 Then C(cleaner).BackColor = BCOLOR(6).BackColor If MM(cleaner) = 7 Then C(cleaner).BackColor = BCOLOR(7).BackColor Else C(cleaner).BackColor = BLAKc.BackColor
53 Next cleaner End Function Function MOVEleft() KeepFLAG = True For j = 0 To 3 MM(MainI + S(j)) = 0 Next j MainI = MainI - 1 row = ((MainI - (MainI Mod 10)) / 10) + 1 If MainI < 1 + ((row - 1) * 10) Then MainI = MainI + 1 For q = 0 To 3 If MM(MainI + S(q)) <> 0 Then fillflag = True Next q If fillflag Then MainI = MainI + 1 fillflag = False 'If KeepFLAG = True Then '******************************** 'GetMEi ' DEFshape ' For j = 0 To 3 MM(MainI + S(j)) = S(6) Next j For cleaner = 1 To 160 If MM(cleaner) <> 0 Then
54 If MM(cleaner) = 1 Then C(cleaner).BackColor = BCOLOR(1).BackColor If MM(cleaner) = 2 Then C(cleaner).BackColor = BCOLOR(2).BackColor If MM(cleaner) = 3 Then C(cleaner).BackColor = BCOLOR(3).BackColor If MM(cleaner) = 4 Then C(cleaner).BackColor = BCOLOR(4).BackColor If MM(cleaner) = 5 Then C(cleaner).BackColor = BCOLOR(5).BackColor If MM(cleaner) = 6 Then C(cleaner).BackColor = BCOLOR(6).BackColor If MM(cleaner) = 7 Then C(cleaner).BackColor = BCOLOR(7).BackColor Else C(cleaner).BackColor = BLAKc.BackColor Next cleaner End Function Function MOVEdown() Dim lineflag As Boolean SCORE.Text = Val(SCORE.Text) + 5 'If MAINtimer.Interval < 200 Then ' MAINtimer.Interval = 500 ' LEVEL.Text = Val(LEVEL.Text) + 1 ' 'MAINtimer.Interval = MAINtimer.Interval - 2 'If SND.Value = 1 Then j = sndplaysound(app.path + "\falldown.wav", SND_ASYNC) KeepFLAG = True
55 For j = 0 To 3 MM(MainI + S(j)) = 0 Next j MainI = MainI + 10 'If MainI > S(5) Then 'p = i ' For q = 0 To 3 If MM(MainI + S(q)) <> 0 Then fillflag = True Next q If S(5) < MainI Or fillflag Then MainI = MainI - 10 For p = 0 To 3 MM(MainI + S(p)) = S(6) Next p fillflag = False If MainI < 10 And Not BEGflag1 Then MAINtimer.Enabled = False If Val(SCORE.Text) > RS("hiscoref") Then RS.Edit RS("hiscoref") = Val(SCORE.Text) RS.Update HIS.Caption = "Hi Score : " + CStr(RS("hiscoref")) C(44).BackColor = Smile.BackColor
56 C(47).BackColor = Smile.BackColor C(62).BackColor = Smile.BackColor C(73).BackColor = Smile.BackColor C(84).BackColor = Smile.BackColor C(85).BackColor = Smile.BackColor C(86).BackColor = Smile.BackColor C(87).BackColor = Smile.BackColor C(78).BackColor = Smile.BackColor C(69).BackColor = Smile.BackColor If SND.Value = 1 Then j = sndplaysound(app.path + "\gameover.wav", SND_ASYNC Or SND_LOOP) MsgBox "YOU LOSE THE GAME! " KeyDownC.Enabled = False Exit Function BEGflag1 = False For w = 0 To 15 lineflag = True For e = 1 To 10 If MM(w * 10 + e) = 0 Then lineflag = False Next e If lineflag = True Then SCORE.Text = Val(SCORE.Text) + 100 For r = w To 1 Step -1 For t = 1 To 10
57 MM(r * 10 + t) = MM((r - 1) * 10 + t) MM((r - 1) * 10 + t) = 0 'If MM(r * 10 + t) Then C(r * 10 + t).backcolor = GRRc.BackColor Else C(r * 10 + t).backcolor = BLAKc.BackColor Next t Next r 'GoTo 1 If SND.Value = 1 Then j = sndplaysound(app.path + "\LINEFILL.wav", SND_ASYNC) Next w For cleaner = 1 To 160 If MM(cleaner) <> 0 Then If MM(cleaner) = 1 Then C(cleaner).BackColor = BCOLOR(1).BackColor If MM(cleaner) = 2 Then C(cleaner).BackColor = BCOLOR(2).BackColor If MM(cleaner) = 3 Then C(cleaner).BackColor = BCOLOR(3).BackColor If MM(cleaner) = 4 Then C(cleaner).BackColor = BCOLOR(4).BackColor If MM(cleaner) = 5 Then C(cleaner).BackColor = BCOLOR(5).BackColor If MM(cleaner) = 6 Then C(cleaner).BackColor = BCOLOR(6).BackColor If MM(cleaner) = 7 Then C(cleaner).BackColor = BCOLOR(7).BackColor Else C(cleaner).BackColor = BLAKc.BackColor Next cleaner FASTdownFLAG = False
58 nextshape Else If FASTdownFLAG Then Call MOVEdown 'If MainI > 140 Then MainI = MainI - 10 'If KeepFLAG = True Then 'GetMEi 'DEFshape ' For j = 0 To 3 MM(MainI + S(j)) = S(6) Next j For cleaner = 1 To 160 If MM(cleaner) <> 0 Then If MM(cleaner) = 1 Then C(cleaner).BackColor = BCOLOR(1).BackColor If MM(cleaner) = 2 Then C(cleaner).BackColor = BCOLOR(2).BackColor If MM(cleaner) = 3 Then C(cleaner).BackColor = BCOLOR(3).BackColor If MM(cleaner) = 4 Then C(cleaner).BackColor = BCOLOR(4).BackColor If MM(cleaner) = 5 Then C(cleaner).BackColor = BCOLOR(5).BackColor If MM(cleaner) = 6 Then C(cleaner).BackColor = BCOLOR(6).BackColor If MM(cleaner) = 7 Then C(cleaner).BackColor = BCOLOR(7).BackColor Else C(cleaner).BackColor = BLAKc.BackColor Next cleaner
59 'If lineflag = True Then ' ' lineflag = False Exit Function ' End Function Private Sub NEW_GAME_Click() HIS.Caption = "Hi Score : " + CStr(RS("hiscoref")) MainI = 4 For lk = 0 To 160 MM(lk) = 0 Next lk SCORE.Text = 0 LEVEL.Text = 1 MAINtimer.Enabled = True KeyDownC.Enabled = True If KeyDownC.Enabled Then KeyDownC.SetFocus If SND.Value = 1 Then j = sndplaysound(app.path + "\startgame.wav", SND_ASYNC Or SND_LOOP) End Sub Private Sub NEW_GAME_KeyPress(KeyAscii As Integer) If KeyAscii = 112 Or KeyAscii = 80 Then Call pousekey
60 End Sub Function pousekey() MAINtimer.Enabled = Not MAINtimer.Enabled KeyDownC.Enabled = Not KeyDownC.Enabled If KeyDownC.Enabled Then KeyDownC.SetFocus End Function Private Sub SCORE_KeyPress(KeyAscii As Integer) If KeyAscii = 112 Or KeyAscii = 80 Then Call pousekey End Sub Function PRIshape() For m = 1 To 4 A(m).BackColor = PINKc.BackColor A(m + 10).BackColor = PINKc.BackColor A(m + 20).BackColor = PINKc.BackColor A(m + 30).BackColor = PINKc.BackColor Next m If S(6) = 0 Then Exit Function Select Case PRi
61 Case 1 GoTo 1 Case 2 GoTo 2 Case 3 GoTo 3 Case 4 GoTo 4 Case 5 GoTo 5 Case 6 GoTo 6 Case 7 GoTo 7 End Select 1 A(2).BackColor = BCOLOR(S(6)).BackColor A(3).BackColor = BCOLOR(S(6)).BackColor A(11).BackColor = BCOLOR(S(6)).BackColor A(12).BackColor = BCOLOR(S(6)).BackColor Exit Function 2 A(1).BackColor = BCOLOR(S(6)).BackColor A(2).BackColor = BCOLOR(S(6)).BackColor A(12).BackColor = BCOLOR(S(6)).BackColor
62 A(13).BackColor = BCOLOR(S(6)).BackColor Exit Function 3 A(1).BackColor = BCOLOR(S(6)).BackColor A(11).BackColor = BCOLOR(S(6)).BackColor A(21).BackColor = BCOLOR(S(6)).BackColor A(22).BackColor = BCOLOR(S(6)).BackColor Exit Function 4 A(2).BackColor = BCOLOR(S(6)).BackColor A(12).BackColor = BCOLOR(S(6)).BackColor A(21).BackColor = BCOLOR(S(6)).BackColor A(22).BackColor = BCOLOR(S(6)).BackColor Exit Function 5 A(2).BackColor = BCOLOR(S(6)).BackColor A(11).BackColor = BCOLOR(S(6)).BackColor A(12).BackColor = BCOLOR(S(6)).BackColor A(13).BackColor = BCOLOR(S(6)).BackColor Exit Function 6
63 A(1).BackColor = BCOLOR(S(6)).BackColor A(2).BackColor = BCOLOR(S(6)).BackColor A(11).BackColor = BCOLOR(S(6)).BackColor A(12).BackColor = BCOLOR(S(6)).BackColor Exit Function 7 A(1).BackColor = BCOLOR(S(6)).BackColor A(2).BackColor = BCOLOR(S(6)).BackColor A(3).BackColor = BCOLOR(S(6)).BackColor A(4).BackColor = BCOLOR(S(6)).BackColor Exit Function End Function Private Sub SND_Click() If KeyDownC.Enabled Then KeyDownC.SetFocus End Sub
64 B. Kode program untuk Modules yg diberi nama ( PhisiM.bas ). Declare Function sndplaysound Lib "winmm.dll" Alias "sndplaysounda" (ByVal lpszsoundname As String, ByVal uflags As Long) As Long Global S(6) As Integer 'global s2(3) As Integer 'Global s3(3) As Integer 'Global s4(3) As Integer 'Global s5(3) As Integer 'Global s6(3) As Integer 'Global s7(3) As Integer Global MM(160) As Integer 'if 0 then null if 1 then blue if 2 red Global SELshape As Integer Global MainI As Integer Global KeepFLAG As Boolean Global rewflag As Boolean Global i As Integer Global row As Integer Global fillflag As Boolean Global FASTdownFLAG As Boolean Global ShColor As Integer Global PRi As Integer Global BEGflag As Boolean Global TEMPi As Integer
65 Global BEGflag1 As Boolean Global COLORt As Integer Function DEFshape() Select Case SELshape Case 1 'KIND a Select Case i Case 1 S(0) = 1 S(1) = 2 S(2) = 10 S(3) = 11 S(4) = 8 S(5) = 140 Case 2 S(1) = 1 S(2) = 11 S(3) = 12 S(4) = 8 S(5) = 140 Case 3
66 S(1) = 10 S(2) = 20 S(3) = 21 S(5) = 130 S(4) = 9 Case 4 S(0) = 1 S(1) = 11 S(2) = 20 S(3) = 21 S(4) = 9 S(5) = 130 Case 5 S(0) = 1 S(1) = 10 S(2) = 11 S(3) = 12 S(4) = 8 S(5) = 140 Case 6 S(1) = 1 S(2) = 10 S(3) = 11 S(4) = 9
67 S(5) = 140 Case 7 S(1) = 1 S(2) = 2 S(3) = 3 S(4) = 7 S(5) = 150 End Select Case 2 'KIND b Select Case i Case 1 S(1) = 10 S(2) = 11 S(3) = 21 S(4) = 9 S(5) = 130 Case 2 S(0) = 1 S(1) = 10 S(2) = 11 S(3) = 20 S(4) = 9
68 S(5) = 130 Case 3 S(1) = 1 S(2) = 2 S(3) = 10 S(4) = 8 S(5) = 140 Case 4 S(1) = 10 S(2) = 11 S(3) = 12 S(4) = 8 S(5) = 140 Case 5 S(1) = 10 S(2) = 11 S(3) = 20 S(4) = 9 S(5) = 130 Case 6 S(1) = 1
69 S(2) = 10 S(3) = 11 S(4) = 9 S(5) = 140 Case 7 S(1) = 10 S(2) = 20 S(3) = 30 S(4) = 10 S(5) = 120 End Select Case 3 'KIND c Select Case i Case 1 S(0) = 1 S(1) = 2 S(2) = 10 S(3) = 11 S(4) = 8 S(5) = 140 Case 2 S(1) = 1
70 S(2) = 11 S(3) = 12 S(4) = 8 S(5) = 140 Case 3 S(1) = 1 S(2) = 11 S(3) = 21 S(4) = 9 S(5) = 130 Case 4 S(1) = 1 S(2) = 10 S(3) = 20 S(4) = 9 S(5) = 130 Case 5 S(1) = 1 S(2) = 2 S(3) = 11 S(4) = 8 S(5) = 140
71 Case 6 S(1) = 1 S(2) = 10 S(3) = 11 S(4) = 9 S(5) = 140 Case 7 S(1) = 1 S(2) = 2 S(3) = 3 S(4) = 7 S(5) = 150 End Select Case 4 'KIND d Select Case i Case 1 S(1) = 10 S(2) = 11 S(3) = 21 S(4) = 9 S(5) = 130
72 Case 2 S(0) = 1 S(1) = 10 S(2) = 11 S(3) = 20 S(4) = 9 S(5) = 130 Case 3 S(0) = 2 S(1) = 10 S(2) = 11 S(3) = 12 S(4) = 8 S(5) = 140 Case 4 S(1) = 1 S(2) = 2 S(3) = 12 S(4) = 8 S(5) = 140 Case 5 S(0) = 1 S(1) = 10 S(2) = 11
73 S(3) = 21 S(4) = 9 S(5) = 130 Case 6 S(1) = 1 S(2) = 10 S(3) = 11 S(4) = 9 S(5) = 140 Case 7 S(1) = 10 S(2) = 20 S(3) = 30 S(4) = 10 S(5) = 120 End Select End Select Select Case i Case 1 S(6) = 1 Case 2 S(6) = 2 Case 3
74 S(6) = 3 Case 4 S(6) = 4 Case 5 S(6) = 5 Case 6 S(6) = 6 Case 7 S(6) = 7 End Select End Function