Dengan membuat pergerakan vertikal pada tokoh Onil dapat membuat game ini menjadi lebih bervariasi dan lebih mudah untuk dikembangkan.
16.1 Elemen Matriks
Pada versi sebelumnya Onil bergerak berdasarkan matriks berordo 70x29, demikian juga pada versi kedua, ogut tetap menggunakan matriks yang sama, tetapi isi dari matriks ogut ubah.
Matriks ogut ubah isinya agar Onil bisa bergerak vertikal, pada matriks terdahulu hanya pada baris terakhir elemen matriks bernilai 1, sedangkan elemen yang lain bernilai 0(nol).
Untuk versi kedua ogut mengubah elemen matriks pada kolom pertama dan kolom terakhir, beberapa elemen dari matriks di kolom-kolom tersebut ogut ubah dari bernilai 0(nol) menjadi 1. Agar lebih jelas Anda dapat melihat isi matriks pada file Matriks_Onil.txt di folder Bab16_NaikTangga.
16.2 Tekstur Naik Tangga
Dengan bertambahnya kemampuan Onil untuk dapat bergerak vertikal, maka perlu dilakukan perubahan terhadap tekstur Onil.
Ogut memakai array dua dimensi untuk menyimpan tekstur Onil.
'Texture
Public Text_Onil_I(1, 8) As GLuint
Public Text_Onil_M(1, 8) As GLuint
Indeks pertama digunakan untuk menentukan tekstur yang akan dipakai Onil untuk berlari atau naik tangga.
Public Function Load_All_texture() As Boolean
...
...
...
'Tekstur Jack Onil lari(Image)
If Not Create_Texture(Text_Onil_I(0, 0), _
"\Texture\Jack_Onil\Onil_0i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(0, 1), _
"\Texture\Jack_Onil\Onil_1i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(0, 2), _
"\Texture\Jack_Onil\Onil_2i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(0, 3), _
"\Texture\Jack_Onil\Onil_3i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(0, 4), _
"\Texture\Jack_Onil\Onil_4i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(0, 5), _
"\Texture\Jack_Onil\Onil_5i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(0, 6), _
"\Texture\Jack_Onil\Onil_6i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(0, 7), _
"\Texture\Jack_Onil\Onil_7i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(0, 8), _
"\Texture\Jack_Onil\Onil_8i.bmp") Then
Load_All_texture = False
Exit Function
End If
'Tekstur Jack Onil lari (Mask)
If Not Create_Texture(Text_Onil_M(0, 0), _
"\Texture\Jack_Onil\Onil_0m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(0, 1), _
"\Texture\Jack_Onil\Onil_1m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(0, 2), _
"\Texture\Jack_Onil\Onil_2m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(0, 3), _
"\Texture\Jack_Onil\Onil_3m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(0, 4), _
"\Texture\Jack_Onil\Onil_4m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(0, 5), _
"\Texture\Jack_Onil\Onil_5m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(0, 6), _
"\Texture\Jack_Onil\Onil_6m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(0, 7), _
"\Texture\Jack_Onil\Onil_7m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(0, 8), _
"\Texture\Jack_Onil\Onil_8m.bmp") Then
Load_All_texture = False
Exit Function
End If
'Tekstur Jack Onil Naik tangga(Image)
If Not Create_Texture(Text_Onil_I(1, 0), _
"\Texture\Jack_Onil\OnilNT_0i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1, 1), _
"\Texture\Jack_Onil\OnilNT_1i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1, 2), _
"\Texture\Jack_Onil\OnilNT_2i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1, 3), _
"\Texture\Jack_Onil\OnilNT_3i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1, 4), _
"\Texture\Jack_Onil\OnilNT_4i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1, 5), _
"\Texture\Jack_Onil\OnilNT_5i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1, 6), _
"\Texture\Jack_Onil\OnilNT_6i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1, 7), _
"\Texture\Jack_Onil\OnilNT_7i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1, 8), _
"\Texture\Jack_Onil\OnilNT_8i.bmp") Then
Load_All_texture = False
Exit Function
End If
'Tekstur Jack Onil Naik tangga (Mask)
If Not Create_Texture(Text_Onil_M(1, 0), _
"\Texture\Jack_Onil\OnilNT_0m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1, 1), _
"\Texture\Jack_Onil\OnilNT_1m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1, 2), _
"\Texture\Jack_Onil\OnilNT_2m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1, 3), _
"\Texture\Jack_Onil\OnilNT_3m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1, 4), _
"\Texture\Jack_Onil\OnilNT_4m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1, 5), _
"\Texture\Jack_Onil\OnilNT_5m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1, 6), _
"\Texture\Jack_Onil\OnilNT_6m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1, 7), _
"\Texture\Jack_Onil\OnilNT_7m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1, 8), _
"\Texture\Jack_Onil\OnilNT_8m.bmp") Then
Load_All_texture = False
Exit Function
End If
...
...
...
'jika semua berjalan baik return true
Load_All_texture = True
End Function
16.3 Tombol dan Timer
Untuk memudahkan pemain game menjalankan Onil ogut menambah fungsi tombol sebanyak dua buah, yaitu tombol atas(up) dan tombol bawah(down).
Timer juga dibutuhkan untuk mengatur kecepatan Onil naik turun, karena nilai dGeserX dan dGeserY pada Onil berbeda, sehingga lebih baik timer Onil untuk bergerak kiri dan kanan dipisahkan dengan timer untuk bergerak atas bawah.
Public Sub Load_GO_Timer()
'timer aktifkan IL
MaxT_Isi_IL = 8000 'waktu terlama 8000
MinT_Isi_IL = 1000 'waktu tersingkat
BedaT_Isi_IL = (MaxT_Isi_IL - MinT_Isi_IL) _
/ MaxT_Level
Timer_Isi_IL.TDelay = MaxT_Isi_IL
Timer_Isi_IL.TGetFirst = True
'timer IL jatuh
MaxT_IL_Jatuh = 200
MinT_IL_Jatuh = 10
Timer_IL_Jatuh = MaxT_IL_Jatuh
BedaT_IL_Jatuh = (MaxT_IL_Jatuh - MinT_IL_Jatuh) _
/ MaxT_Level
'Timer Onil LR
MaxT_OnilLR = 50
MinT_OnilLR = 10
Timer_OnilLR = MaxT_OnilLR
BedaT_OnilLR = (MaxT_OnilLR - MinT_OnilLR) _
/ MaxT_Level
'Timer Onil UD
MaxT_OnilUD = 20
MinT_OnilUD = 4
Timer_OnilUD = MaxT_OnilUD
BedaT_OnilUD = (MaxT_OnilUD - MinT_OnilUD) _
/ MaxT_Level
'Timer laju pesawat IL
MaxT_PlaneIL = 50
MinT_PlaneIL = 10
Timer_PlaneIL = MaxT_PlaneIL
BedaT_PlaneIL = (MaxT_PlaneIL - MinT_PlaneIL) _
/ MaxT_Level
End Sub
Public Sub Level_Meningkat()
If MinT_Level < MaxT_Level Then
MinT_Level = MinT_Level + 1
'update timer IL muncul ke layar(isi IL)
Timer_Isi_IL.TDelay = Timer_Isi_IL.TDelay - _
BedaT_Isi_IL
'update timer kecepatan jatuh IL
'(Timer_IL_jatuh dipakai pada sub
'Aktifkan_IL)
Timer_IL_Jatuh = Timer_IL_Jatuh - _
BedaT_IL_Jatuh
'update timer Onil bergerak
Timer_OnilLR = Timer_OnilLR - BedaT_OnilLR
Onil_TimerLR.TDelay = Timer_OnilLR
Timer_OnilUD = Timer_OnilUD - BedaT_OnilUD
Onil_TimerUD.TDelay = Timer_OnilUD
'update timer laju pesawat IL
Timer_PlaneIL = Timer_PlaneIL - BedaT_PlaneIL
End If
End Sub
Dengan menggunakan timer yang berbeda untuk kiri kanan serta atas bawah maka sub Keyboard_Ditekan juga turut berubah menjadi seperti di bawah.
Private Sub Keyboard_Ditekan()
'keluar dari program bila Escape ditekan
If (GetKeyState(vbKeyEscape) And &H1000) Then
Selesai = True
End If
'jika tombol Shift ditekan maka kecepatan
'Onil akan berkurang
Delay_Key_Onil = 0
If GetKeyState(vbKeyShift) And &H1000 Then
Delay_Key_Onil = 10
End If
'kiri
If GetKeyState(vbKeyLeft) And &H1000 Then
If Counter_Key_Onil = Delay_Key_Onil Then
Geser_Kiri_Onil
End If
Counter_Key_Onil = Counter_Key_Onil + 1
If Counter_Key_Onil > Delay_Key_Onil Then
Counter_Key_Onil = 0
End If
End If
'kanan
If GetKeyState(vbKeyRight) And &H1000 Then
If Counter_Key_Onil = Delay_Key_Onil Then
Geser_Kanan_Onil
End If
Counter_Key_Onil = Counter_Key_Onil + 1
If Counter_Key_Onil > Delay_Key_Onil Then
Counter_Key_Onil = 0
End If
End If
'atas
If GetKeyState(vbKeyUp) And &H1000 Then
If Counter_Key_Onil = Delay_Key_Onil Then
Geser_Atas_Onil
End If
Counter_Key_Onil = Counter_Key_Onil + 1
If Counter_Key_Onil > Delay_Key_Onil Then
Counter_Key_Onil = 0
End If
End If
'bawah
If GetKeyState(vbKeyDown) And &H1000 Then
If Counter_Key_Onil = Delay_Key_Onil Then
Geser_Bawah_Onil
End If
Counter_Key_Onil = Counter_Key_Onil + 1
If Counter_Key_Onil > Delay_Key_Onil Then
Counter_Key_Onil = 0
End If
End If
End Sub
16.4 Onil Bergerak
Untuk membuat Onil bergerak diperlukan dua sub tambahan agar Onil bergerak ke atas dan ke bawah, sedangkan sub yang dipakai untuk menggerakkan Onil ke kiri dan ke kanan terdapat penambahan sebuah variabel yang dipakai untuk indeks tekstur.
Public Sub Load_Onil()
'Timer Onil Bergerak
'perkecil nilai TDelay agar
'gerakan Onil lebih cepat
Onil_TimerLR.TDelay = Timer_OnilLR
Onil_TimerLR.TFirst = True
Onil_TimerUD.TDelay = Timer_OnilUD
Onil_TimerUD.TFirst = True
Jack_Onil.Score = 0
Jack_Onil.Life = 3
End Sub
Public Sub Geser_Kanan_Onil()
'Onil bisa bergerak jika sesuai dengan Timer
'dan tidak berada di luar matriks
If My_Timer(Onil_TimerLR) And _
TempIK_M < (Kolom_M - 1) Then
'geser ke kanan berarti kolom bertambah 1
TempIK_M = TempIK_M + 1
'jika elemen matriks = 1 maka Onil
'bisa bergerak ke tempat tujuan
If Matriks_Onil(TempIB_M, _
TempIK_M) = 1 Then
Jack_Onil.X1 = Jack_Onil.X1 + _
Jack_Onil.dGeserX
Jack_Onil.X2 = Jack_Onil.X2 + _
Jack_Onil.dGeserX
Jack_Onil.X3 = Jack_Onil.X3 + _
Jack_Onil.dGeserX
Jack_Onil.X4 = Jack_Onil.X4 + _
Jack_Onil.dGeserX
'isi dengan kolom matriks yang baru
Jack_Onil.IK_M = TempIK_M
'supaya tekstur Onil berganti-ganti
Jack_Onil.Index_Texture = _
Jack_Onil.Index_Texture + 1
If Jack_Onil.Index_Texture > 8 Then
Jack_Onil.Index_Texture = 0
End If
'pilih tekstur berlari
Lari_NaikTangga = 0
Else
TempIK_M = Jack_Onil.IK_M
End If
End If
End Sub
Public Sub Geser_Kiri_Onil()
If My_Timer(Onil_TimerLR) And _
TempIK_M > 0 Then
'geser ke kiri berarti kolom berkurang 1
TempIK_M = TempIK_M - 1
If Matriks_Onil(TempIB_M, _
TempIK_M) = 1 Then
Jack_Onil.X1 = Jack_Onil.X1 - _
Jack_Onil.dGeserX
Jack_Onil.X2 = Jack_Onil.X2 - _
Jack_Onil.dGeserX
Jack_Onil.X3 = Jack_Onil.X3 - _
Jack_Onil.dGeserX
Jack_Onil.X4 = Jack_Onil.X4 - _
Jack_Onil.dGeserX
Jack_Onil.IK_M = TempIK_M
'supaya tekstur Onil berganti-ganti
Jack_Onil.Index_Texture = _
Jack_Onil.Index_Texture - 1
If Jack_Onil.Index_Texture < 0 Then
Jack_Onil.Index_Texture = 8
End If
'pilih tekstur berlari
Lari_NaikTangga = 0
Else
TempIK_M = Jack_Onil.IK_M
End If
End If
End Sub
Public Sub Geser_Atas_Onil()
If My_Timer(Onil_TimerUD) And _
TempIB_M > 0 Then
'Onil bergerak ke atas berarti
'baris berkurang 1
TempIB_M = TempIB_M - 1
If Matriks_Onil(TempIB_M, _
TempIK_M) = 1 Then
'Update koordinat Y
Jack_Onil.Y1 = Jack_Onil.Y1 + _
Jack_Onil.dGeserY
Jack_Onil.Y2 = Jack_Onil.Y2 + _
Jack_Onil.dGeserY
Jack_Onil.Y3 = Jack_Onil.Y3 + _
Jack_Onil.dGeserY
Jack_Onil.Y4 = Jack_Onil.Y4 + _
Jack_Onil.dGeserY
Jack_Onil.IB_M = TempIB_M
'supaya tekstur Onil berganti-ganti
Jack_Onil.Index_Texture = _
Jack_Onil.Index_Texture - 1
If Jack_Onil.Index_Texture < 0 Then
Jack_Onil.Index_Texture = 8
End If
'pilih tekstur naik tangga
Lari_NaikTangga = 1
Else
TempIB_M = Jack_Onil.IB_M
End If
End If
End Sub
Public Sub Geser_Bawah_Onil()
If My_Timer(Onil_TimerUD) And _
TempIB_M < (Baris_M - 1) Then
'bergeser ke bawah jadi baris tambah 1
TempIB_M = TempIB_M + 1
If Matriks_Onil(TempIB_M, _
TempIK_M) = 1 Then
'update koordinat Y
Jack_Onil.Y1 = Jack_Onil.Y1 - _
Jack_Onil.dGeserY
Jack_Onil.Y2 = Jack_Onil.Y2 - _
Jack_Onil.dGeserY
Jack_Onil.Y3 = Jack_Onil.Y3 - _
Jack_Onil.dGeserY
Jack_Onil.Y4 = Jack_Onil.Y4 - _
Jack_Onil.dGeserY
Jack_Onil.IB_M = TempIB_M
'supaya tekstur Onil berganti-ganti
Jack_Onil.Index_Texture = _
Jack_Onil.Index_Texture + 1
If Jack_Onil.Index_Texture > 8 Then
Jack_Onil.Index_Texture = 0
End If
'pilih tekstur naik tangga
Lari_NaikTangga = 1
Else
TempIB_M = Jack_Onil.IB_M
End If
End If
End Sub
16.5 Menampilkan Onil
Cara untuk menampilkan Onil ke layar monitor sedikit berbeda dari versi sebelumnya, karena tekstur yang dipakai berubah secara struktur.
Public Sub Display_Onil()
If Jack_Onil.Life = 0 Then
Exit Sub
End If
glEnable GL_BLEND
glBlendFunc GL_DST_COLOR, GL_ZERO
glBindTexture GL_TEXTURE_2D, _
Text_Onil_M(Lari_NaikTangga, _
Jack_Onil.Index_Texture)
glBegin bmPolygon
glTexCoord2f 0#, 0
glVertex2i Jack_Onil.X1, Jack_Onil.Y1
glTexCoord2f 1#, 0
glVertex2i Jack_Onil.X2, Jack_Onil.Y2
glTexCoord2f 1#, 1#
glVertex2i Jack_Onil.X3, Jack_Onil.Y3
glTexCoord2f 0#, 1#
glVertex2i Jack_Onil.X4, Jack_Onil.Y4
glEnd
glBlendFunc GL_ONE, GL_ONE
glBindTexture GL_TEXTURE_2D, _
Text_Onil_I(Lari_NaikTangga, _
Jack_Onil.Index_Texture)
glBegin bmPolygon
glTexCoord2f 0#, 0
glVertex2i Jack_Onil.X1, Jack_Onil.Y1
glTexCoord2f 1#, 0
glVertex2i Jack_Onil.X2, Jack_Onil.Y2
glTexCoord2f 1#, 1#
glVertex2i Jack_Onil.X3, Jack_Onil.Y3
glTexCoord2f 0#, 1#
glVertex2i Jack_Onil.X4, Jack_Onil.Y4
glEnd
glDisable GL_BLEND
End Sub
Salam Jack Onil
Heriady
heriady.yoh@gmail.com
Artikel terkait
Membuat Game dengan VB 6
|
Tidak ada komentar:
Posting Komentar