Minggu, 08 November 2015

Jack Onil Bab-15 Pesawat

Hal pertama yang ingin ogut tambahkan adalah pesawat  yang terbang di atas Onil dan menjatuhkan item logistik(IL).


Pada program sebelumnya ogut hanya membuat IL seolah-olah muncul dari langit secara mendadak. Untuk versi kedua game ini ogut menambahkan pesawat untuk menjatuhkan IL, agar penampilan game menjadi lebih nyata dan lebih menarik.

Dengan penambahan pesawat ini berarti cara mengaktifkan IL berbeda dengan proses sebelumnya. Posisi pesawat harus sama dengan posisi IL pada saat IL diaktifkan/dijatuhkan.


15.1 Tekstur Pesawat
Dengan penambahan pesawat berarti ada penambahan tekstur pada program game ini, dan untuk membuat game tetap sederhana dan mudah dimodifikasi pesawat yang menjatuhkan IL hanya bergerak dari arah kanan ke arah kiri.

Public Function Load_All_texture() As Boolean

    ...
    ...
    ...
   
    'tekstur pesawat IL(image)
    If Not Create_Texture(Text_planeIL_I, _
        "\Texture\Item_Logistik\pesawatIL_i.bmp") Then
       
        Load_All_texture = False
        Exit Function
    End If
   
    'tekstur pesawat IL(mask)
    If Not Create_Texture(Text_planeIL_M, _
        "\Texture\Item_Logistik\pesawatIL_m.bmp") Then
       
        Load_All_texture = False
        Exit Function
    End If
                 
    'jika semua berjalan baik return true
    Load_All_texture = True
End Function

15.2 Membuat Pesawat
Dengan penambahan objek pesawat  cara untuk mengaktifkan IL mengalami perubahan, sebelumnya posisi IL diacak pada saat akan diaktifkan, setelah penambahan pesawat  hal ini tidak dilakukan lagi, karena posisi pesawat yang menentukan di mana  IL akan dijatuhkan.

Untuk mengaktifkan pesawat yang membawa IL ogut memakai timer yang sama dengan versi sebelumnya yaitu, Timer_Isi_IL.

Pada sub Load_GO_Timer ogut menambahkan timer untuk kecepatan laju pesawat IL.

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 laju pesawat IL
    MaxT_PlaneIL = 50
    MinT_PlaneIL = 10
   
    Timer_PlaneIL = MaxT_PlaneIL
    BedaT_PlaneIL = (MaxT_PlaneIL - MinT_PlaneIL) _
                        / MaxT_Level
   
End Sub

Dan setiap kali level meningkat maka timer pesawat untuk menjatuhkan IL dan timer kecepatan laju pesawat dipercepat dengan sub di bawah.

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
       
        'update timer laju pesawat IL
        Timer_PlaneIL = Timer_PlaneIL - BedaT_PlaneIL
    End If
End Sub

Pada sub Render_Objek  Anda harus mengubah isi kondisi If mengaktifkan IL menjadi mengaktifkan pesawat IL.

Private Sub Render_Objek()
    Dim i As Integer
    glClear clrColorBufferBit Or _
            clrDepthBufferBit
    glLoadIdentity
   
    'Timer Level
    If My_Timer(Timer_Level) Then
        Level_Meningkat
    End If
   
    Display_BG
   
    'Pesawat IL
    If My_Timer(Timer_Isi_IL) Then
            Aktifkan_PlaneIL
    End If
       
    For i = 0 To Max_IL - 1
        Move_IL i
        Onil_Tangkap_IL i
        Display_IL i
    Next
   
    Move_PlaneIL
    Display_PlaneIL
   
    Display_Onil
   
    Display_Score
    Display_Angka -500, 850, Jack_Onil.Jack_Onil.Score
   
    Display_Life
    Display_Angka 600, 850, Jack_Onil.Jack_Onil.Life
End Sub

15.3 Aktifkan Pesawat
Dengan penggunaan timer pesawat yang membawa IL bisa diaktifkan sesuai dengan keinginan Anda.

Public Sub Aktifkan_PlaneIL()
        'posisi awal pesawat
        '(berada di luar screen game)
        PlaneIL.X1 = 850
        PlaneIL.Y1 = 800
       
        PlaneIL.X2 = 1050
        PlaneIL.Y2 = PlaneIL.Y1
       
        PlaneIL.X3 = PlaneIL.X2
        PlaneIL.Y3 = PlaneIL.Y1 + 100
       
        PlaneIL.X4 = PlaneIL.X1
        PlaneIL.Y4 = PlaneIL.Y3
       
        'timer kecepatan laju pesawat
        PlaneIL.GO_Timer.TDelay = Timer_PlaneIL
        PlaneIL.GO_Timer.TGetFirst = True
       
        'baris paling atas
        PlaneIL.IB_M = 0
       
        'kolom pertama diisi di luar matriks
        PlaneIL.IK_M = Kolom_M + 4
       
        'random posisi kolom untuk menjatuhkan IL
        '(pada posisi kolom ini
        'pesawat akan menjatuhkan IL)
        Randomize
        Random_IK_M = Int((Kolom_M * Rnd) + 0)
       
        'nilai pergeseran pesawat terhadap sumbu X
        '(dibuat sama dengan nilai pergeseran Onil)
        PlaneIL.dGeserX = 50
       
        PlaneIL.Active_Flag = 1
End Sub

Untuk membuat pesawat bergerak dari kanan ke kiri ogut menggunakan sub di bawah, harus diingat pergerakan pesawat tetap berdasarkan matriks 70x29 dan jika posisi pesawat telah berada di luar screen game, pesawat harus dinonaktifkan.

Public Sub Move_PlaneIL()

    If PlaneIL.Active_Flag = 0 Then
        Exit Sub
    End If
   
    If My_Timer(PlaneIL.GO_Timer) Then
        'geser posisi pesawat ke arah kiri
        PlaneIL.X1 = PlaneIL.X1 - PlaneIL.dGeserX
        PlaneIL.X2 = PlaneIL.X2 - PlaneIL.dGeserX
        PlaneIL.X3 = PlaneIL.X3 - PlaneIL.dGeserX
        PlaneIL.X4 = PlaneIL.X4 - PlaneIL.dGeserX
       
        'indeks kolom matriks berubah karena
        'pesawat bergerak ke kiri
        PlaneIL.IK_M = PlaneIL.IK_M - 1
       
        If PlaneIL.IK_M = Random_IK_M Then
            'jatuhkan IL, karena posisi pesawat
            'tepat di kolom hasil random tempat IL
            'harus dijatuhkan
            Aktifkan_IL
        End If
       
    End If
   
    If PlaneIL.X2 < -Xmax Then
        'jika posisi pesawat keluar dari screen game
        'maka pesawat dinonaktifkan
        PlaneIL.Active_Flag = 0
    End If
               
End Sub

15.4 Aktifkan Item Logistik
Cara untuk mengaktifkan IL sedikit mengalami perubahan tetapi di sisi pemrograman cara itu tidak sulit, Anda tinggal mengganti cara mengisi indeks kolom matriks dengan nilai kolom tempat pesawat akan menjatuhkan IL.

Public Sub Aktifkan_IL()
    Dim i As Integer
    Dim temp_KM As Integer
   
    For i = 0 To Max_IL - 1
        If IL(i).Active_Flag = 0 Then
       
            'posisikan IL di tengah sumbu Y
            IL(i).X1 = -Int(LebarP_IL / 2)
            IL(i).Y1 = 750
           
            IL(i).X2 = Int(LebarP_IL / 2)
            IL(i).Y2 = 750
           
            IL(i).X3 = IL(i).X2
            IL(i).Y3 = 750 + TinggiP_IL
           
            IL(i).X4 = IL(i).X1
            IL(i).Y4 = 750 + TinggiP_IL
   
            'jarak untuk menggeser IL sesuai
            'dengan sumbu X atau Y
            IL(i).dGeserX = 50
            IL(i).dGeserY = 20
           
            'indeks baris matriks diisi dengan
            'baris paling atas
            IL(i).IB_M = 0
           
            'indeks kolom matriks diisi
            'berdasarkan posisi pesawat pada saat
            'menjatuhkan IL
            IL(i).IK_M = Random_IK_M
           
       
            ''''''''''''''''''''''''''''''''''''''''''
            'Update posisi IL sesuai dengan nilai IK_M
            ''''''''''''''''''''''''''''''''''''''''''
           
            'nilai tengah kolom matriks
            temp_KM = Int((Kolom_M - 1) / 2)
   
            If IL(i).IK_M <> temp_KM Then
                If temp_KM > IL(i).IK_M Then
                    'di sebelah kiri sumbu Y
                    temp_KM = temp_KM - IL(i).IK_M
                   
                    'geser posisi IL ke kiri
                    IL(i).X1 = IL(i).X1 - _
                            (temp_KM * IL(i).dGeserX)
                           
                    IL(i).X2 = IL(i).X2 - _
                            (temp_KM * IL(i).dGeserX)
                           
                    IL(i).X3 = IL(i).X3 - _
                            (temp_KM * IL(i).dGeserX)
                           
                    IL(i).X4 = IL(i).X4 - _
                            (temp_KM * IL(i).dGeserX)
                Else
           
                    'di sebelah kanan sumbu Y
                    temp_KM = IL(i).IK_M - temp_KM
       
                    'geser posisi IL ke kanan
                    IL(i).X1 = IL(i).X1 + _
                            (temp_KM * IL(i).dGeserX)
                           
                    IL(i).X2 = IL(i).X2 + _
                            (temp_KM * IL(i).dGeserX)
                           
                    IL(i).X3 = IL(i).X3 + _
                            (temp_KM * IL(i).dGeserX)
                           
                    IL(i).X4 = IL(i).X4 + _
                            (temp_KM * IL(i).dGeserX)
                End If
            End If
   
            'isi Index_Texture secara acak
            Randomize
            IL(i).Index_Texture = Int((Max_IL_V * Rnd) + 0)
           
            'Timer IL untuk jatuh diatur disini
            'makin kecil nilai TDelay maka makin
            'cepat IL turun ke bawah
            IL(i).GO_Timer.TDelay = Timer_IL_Jatuh
            IL(i).GO_Timer.TGetFirst = True
           
            IL(i).Score = 50
            IL(i).Active_Flag = 1
            IL(i).Red_Flag = 0
           
            'sound IL jatuh
            Play_Sound1
           
            'proses aktifkan IL selesai,
            'maka keluar dari looping
            Exit For
        End If
    Next
End Sub

15.5 Menampilkan Pesawat
Tehnik untuk menampilkan pesawat tetap menggunakan tehnik masking seperti objek-objek yang lain.

Public Sub Display_PlaneIL()

    'Pesawat IL yang aktif yang bisa
    'ditampilkan
    If PlaneIL.Active_Flag = 0 Then
        Exit Sub
    End If

    glEnable GL_BLEND
   
    glBlendFunc GL_DST_COLOR, GL_ZERO
    glBindTexture GL_TEXTURE_2D, Text_planeIL_M
    glBegin bmPolygon
        glTexCoord2f 0#, 0
        glVertex2i PlaneIL.X1, PlaneIL.Y1
       
        glTexCoord2f 1#, 0
        glVertex2i PlaneIL.X2, PlaneIL.Y2
       
        glTexCoord2f 1#, 1#
        glVertex2i PlaneIL.X3, PlaneIL.Y3
       
        glTexCoord2f 0#, 1#
        glVertex2i PlaneIL.X4, PlaneIL.Y4
    glEnd
   
    glBlendFunc GL_ONE, GL_ONE
    glBindTexture GL_TEXTURE_2D, Text_planeIL_I
    glBegin bmPolygon
        glTexCoord2f 0#, 0
        glVertex2i PlaneIL.X1, PlaneIL.Y1
       
        glTexCoord2f 1#, 0
        glVertex2i PlaneIL.X2, PlaneIL.Y2
       
        glTexCoord2f 1#, 1#
        glVertex2i PlaneIL.X3, PlaneIL.Y3
       
        glTexCoord2f 0#, 1#
        glVertex2i PlaneIL.X4, PlaneIL.Y4
    glEnd
   
    glDisable GL_BLEND
   
End Sub


Salam Jack Onil


Heriady
heriady.yoh@gmail.com




Artikel terkait

Membuat Game dengan VB 6