Sabtu, 07 November 2015

Jack Onil Bab-12 Deteksi Tabrakan

Dalam suatu game pasti terdapat perhitungan untuk mendeteksi tabrakan antara objek satu dengan objek yang lain. Bentuk perhitungan setiap tabrakan bermacam-macam tergantung persoalan yang dihadapi.


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