Proses deteksi tabrakan pada game ini terjadi pada saat Onil berusaha menangkap item logistik(IL). Jika Onil bisa menangkap IL maka tabrakan antara Onil dan IL terjadi.
Pada awal buku ini ogut telah mengungkapkan, perhitungan matematika untuk game ini hanya memakai satu buah matriks, demikian juga proses deteksi tabrakan hanya memerlukan satu buah matriks saja.
12.1 Matriks Deteksi Tabrakan
Posisi Onil terletak pada baris ke-69 di matriks onil sedangkan IL pada saat diaktifkan terletak pada baris ke-0. Pada saat IL bergerak turun posisi IL pada baris matriks juga berubah, hal ini berlangsung terus hingga IL berada di posisi baris ke-69, jika IL berada di kolom dan baris yang sama dengan Onil berdiri maka tabrakan terjadi.
Model deteksi tabrakan dengan menggunakan matriks adalah deteksi tabrakan yang sederhana, tapi bisa dipakai untuk banyak game.
12.2 Program Deteksi Tabrakan
Karena perhitungan deteksi tabrakan pada game ini sangat sederhana maka tidak diperlukan sub atau fungsi yang rumit untuk menyelesaikan proses ini.
Sub di bawah sedikit mengalami perubahan dari sub yang sama pada program di Bab11_ItemLogistik.
Public Sub Move_IL(i_p As Integer)
'IL yang digerakkan hanya IL yang aktif
If IL(i_p).Active_Flag = 0 Then
Exit Sub
End If
If My_Timer(IL(i_p).GO_Timer) Then
IL(i_p).IB_M = IL(i_p).IB_M + 1
'IL tidak berhasil ditangkap Onil
If IL(i_p).IB_M = Baris_M + 10 Then
IL(i_p).Active_Flag = 0
'kasih tanda bahwa Onil gugur
Onil_Gugur = True
Exit Sub
End If
'geser posisi IL ke bawah
IL(i_p).Y1 = IL(i_p).Y1 - IL(i_p).dGeserY
IL(i_p).Y2 = IL(i_p).Y2 - IL(i_p).dGeserY
IL(i_p).Y3 = IL(i_p).Y3 - IL(i_p).dGeserY
IL(i_p).Y4 = IL(i_p).Y4 - IL(i_p).dGeserY
End If
End Sub
Sub di bawah digunakan untuk mendeteksi apakah Onil berhasil menangkap IL atau tidak.
Public Sub Onil_Tangkap_IL(i_p As Integer)
'IL yang active yang dideteksi
If IL(i_p).Active_Flag = 0 Then
Exit Sub
End If
'jika indeks baris matrik IL
'sudah melewati baris matriks Onil berarti
'Onil gagal menangkap IL tersebut
If IL(i_p).IB_M = Baris_M Then
'merubah warna IL menjadi merah
IL(i_p).Red_Flag = 1
Exit Sub
End If
'=======================================
'Pada proses deteksi tabrakan di bawah ini
'ogut berikan toleransi, artinya
'posisi Onil boleh berbeda satu kolom dengan
'IL(di kiri atau di kanan), pemberian
'toleransi untuk mempemudah pemain menangkap
'IL jika kecepatan IL sudah sangat cepat
'(toleransi juga berlaku pada baris)
'=======================================
'deteksi tabrakan berdasarkan kolom matriks
'(periksa apakah indeks kolom Onil sama dengan
'indeks kolom IL)
If ((Jack_Onil.Jack_Onil.IK_M - 1) _
<= IL(i_p).IK_M) _
And _
((Jack_Onil.Jack_Onil.IK_M + 1) _
>= IL(i_p).IK_M) Then
'deteksi tabrakan berdasarkan baris matriks
'(periksa apakah indeks baris Onil sama dengan
'indeks baris IL)
If (IL(i_p).IB_M - 1) = _
Jack_Onil.Jack_Onil.IB_M _
Or _
IL(i_p).IB_M = _
Jack_Onil.Jack_Onil.IB_M Then
'IL yang sudah berubah warna
'tidak bisa ditangkap lagi
If IL(i_p).Red_Flag = 0 Then
'Onil berhasil tangkap IL
IL(i_p).Active_Flag = 0
End If
End If
End If
End Sub
Variabel Onil_Gugur akan bernilai true jika pemain gagal menangkap IL, dan sub Jika_Onil_Gugur ogut tempatkan di main looping agar setiap saat main program mendeteksi apakah Onil gagal menangkap IL.
Public Sub Jika_Onil_Gugur()
Dim New_Name As String
'nyawa Onil dikurangi 1 karena gugur
Jack_Onil.Life = Jack_Onil.Life - 1
If Jack_Onil.Life = 0 Then
MsgBox "**** Game Over ****", _
vbOKOnly, "Jack Onil Gugur"
'exit main looping
Selesai = True
Else
If Jack_Onil.Life = 1 Then
MsgBox "This is the Last", _
vbOKOnly, "Ready"
Else
MsgBox "Onil Lifes = " + _
Str(Jack_Onil.Life), _
vbOKOnly, "Ready"
End If
'reload data Onil kembali
ReLoad_Onil
'kembalikan nilai Onil_Gugur
Onil_Gugur = False
End If
Non_Aktifkan_IL
End Sub
Public Sub Non_Aktifkan_IL()
Dim i As Integer
'nonaktifkan semua IL
For i = 0 To Max_IL - 1
IL(i).Active_Flag = 0
Next
End Sub
Salam Jack Onil
Heriady
heriady.yoh@gmail.com
Artikel terkait
Membuat Game dengan VB 6
|
Tidak ada komentar:
Posting Komentar