Sabtu, 07 November 2015

Jack Onil Bab-13 Menyempurnakan Program

Sampai dengan saat ini Anda telah bisa membuat game sederhana dengan Visual Basic, tetapi game yang telah dibuat hingga bab 12 masih mempunyai banyak kekurangan.

(postingan ke-100)

Untuk membuat game ini menjadi lebih sempurna beberapa hal harus ditambahkan ke dalam game tersebut.


13.1 Mempercepat Timer
Salah satu yang harus ditambahkan ke dalam game yang Anda buat adalah mempercepat timer. Hal ini harus dilakukan untuk game yang bertipe seperti ini agar dapat memacu pemain sehingga tidak membuat pemain bosan.

Untuk mempercepat timer ogut memerlukan tiga variabel utama.

'timer utama
Public MaxT_Level As Long
Public MinT_Level As Long
Public Timer_Level As Object_Timer

Public Sub Load_Timer_Level()

    MaxT_Level = 20 'level tertinggi jangan ganjil
    MinT_Level = 1  'level terendah(tidak boleh nol)
   
    '===================================
    Timer_Level.TDelay = 15000 '15 detik
    Timer_Level.TGetFirst = True
    '===================================

End Sub

Timer_Level berguna agar  setiap 15 detik kecepatan game bertambah satu tingkat(level).
Level atau tingkat ogut bagi menjadi 20, setiap 15 detik variabel MinT_Level ditambah dengan nilai 1, proses penambahan ini berlangsung terus sampai MinT_Level bernilai 20.

Setiap penambahan MinT_Level akan memicu timer lain untuk lebih cepat, timer lain yang ogut maksud adalah timer untuk menjatuhkan item logistik, timer agar item logistik jatuh lebih cepat, dan terakhir timer agar Onil bergerak ke kiri dan ke kanan lebih cepat.

Untuk menghitung agar masing-masing timer meningkat caranya tidak sulit, Anda tinggal mengurangi  nilai maksimal timer  dengan nilai minimal lalu dibagi  dengan banyaknya level. Karena ada proses pembagian ogut menyarankan agar level adalah bilangan bulat genap dan tidak boleh bernilai 0(nol).

Berikut ini ogut lampirkan cara untuk membuat timer semakin cepat.

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

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
    End If
End Sub

Lalu pada sub Render_Objek ogut sisipkan sebuah kondisi If seperti ini.

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
   
    'Item Logistik
    If My_Timer(Timer_Isi_IL) Then
            Aktifkan_IL
    End If
       
    For i = 0 To Max_IL - 1
        Move_IL i
        Onil_Tangkap_IL i
        Display_IL i
    Next
   
    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

13.2 Score dan Life
Untuk membuat pemain mudah melihat status pada saat pemain sedang memainkan game alangkah baiknya jika score dan jumlah life(nyawa) yang dimiliki pemain ditampilkan di screen game.

Untuk membuat score dan life ogut telah mengajarkan trik dan tehnik di bab-bab sebelumnya sehingga ogut tidak akan membahas lagi, ogut hanya akan melampirkan sub atau fungsi yang terkait dengan proses di atas agar Anda lebih mudah mempelajarinya.

Public Function Load_All_texture() As Boolean

    ...
    ...
    ...

    'tekstur score dan Life
    If Not Create_Texture(Text_Score_I, _
            "\Texture\Score_Life\Score_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Score_M, _
            "\Texture\Score_Life\Score_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
   
    If Not Create_Texture(Text_Life_I, _
            "\Texture\Score_Life\Life_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Life_M, _
            "\Texture\Score_Life\Life_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
   
    'tekstur angka 0 s/d 9
    If Not Create_Texture(Text_Angka_I(0), _
            "\Texture\Score_Life\0_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(1), _
            "\Texture\Score_Life\1_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(2), _
            "\Texture\Score_Life\2_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(3), _
            "\Texture\Score_Life\3_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(4), _
            "\Texture\Score_Life\4_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(5), _
            "\Texture\Score_Life\5_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(6), _
            "\Texture\Score_Life\6_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(7), _
            "\Texture\Score_Life\7_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(8), _
            "\Texture\Score_Life\8_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_I(9), _
            "\Texture\Score_Life\9_i.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
   
    If Not Create_Texture(Text_Angka_M(0), _
            "\Texture\Score_Life\0_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(1), _
            "\Texture\Score_Life\1_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(2), _
            "\Texture\Score_Life\2_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(3), _
            "\Texture\Score_Life\3_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(4), _
            "\Texture\Score_Life\4_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(5), _
            "\Texture\Score_Life\5_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(6), _
            "\Texture\Score_Life\6_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(7), _
            "\Texture\Score_Life\7_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(8), _
            "\Texture\Score_Life\8_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
    If Not Create_Texture(Text_Angka_M(9), _
            "\Texture\Score_Life\9_m.bmp") Then
        Load_All_texture = False
        Exit Function
    End If
                 
    'jika semua berjalan baik return true
    Load_All_texture = True
End Function

Public Sub Display_Angka(PosX_P As Integer, _
                        PosY_P As Integer, _
                        Angka_P As Long)
    Dim i As Integer
   
    Dim Str_Angka As String
    Dim Temp_Angka As String
    Dim Len_Str As Integer
   
    Str_Angka = Trim(Str(Angka_P))
    Len_Str = Len(Str_Angka)
   
    For i = 1 To Len_Str
           
        'ambil 1 karakter paling kiri
        'dari String_Angka
        Temp_Angka = Left(Str_Angka, 1)
       
        'tampilkan Temp_Angka ke layar
        Angka_Masking PosX_P + (i - 1) * 50, _
                        PosY_P, _
                        Val(Temp_Angka)
       
        'Buang 1 karakter paling kiri dari string
        Str_Angka = Right(Str_Angka, _
                        Len(Str_Angka) - 1)
                       
    Next
End Sub

Public Sub Angka_Masking(PosX_P As Integer, _
                            PosY_P As Integer, _
                            Angka_P As Integer)
    glEnable GL_BLEND
   
    glBlendFunc GL_DST_COLOR, GL_ZERO
    glBindTexture GL_TEXTURE_2D, _
                        Text_Angka_M(Angka_P)
    glBegin bmPolygon
        glTexCoord2f 0#, 0
        glVertex2i PosX_P, PosY_P
       
        glTexCoord2f 1#, 0
        glVertex2i PosX_P + 50, PosY_P
       
        glTexCoord2f 1#, 1#
        glVertex2i PosX_P + 50, PosY_P + 100
       
        glTexCoord2f 0#, 1#
        glVertex2i PosX_P, PosY_P + 100
    glEnd
   
    glBlendFunc GL_ONE, GL_ONE
    glBindTexture GL_TEXTURE_2D, _
                        Text_Angka_I(Angka_P)
    glBegin bmPolygon
        glTexCoord2f 0#, 0
        glVertex2i PosX_P, PosY_P
       
        glTexCoord2f 1#, 0
        glVertex2i PosX_P + 50, PosY_P
       
        glTexCoord2f 1#, 1#
        glVertex2i PosX_P + 50, PosY_P + 100
       
        glTexCoord2f 0#, 1#
        glVertex2i PosX_P, PosY_P + 100
    glEnd
   
    glDisable GL_BLEND
End Sub

Public Sub Display_Score()
    glEnable GL_BLEND
   
    glBlendFunc GL_DST_COLOR, GL_ZERO
    glBindTexture GL_TEXTURE_2D, Text_Score_M
    glBegin bmPolygon
        glTexCoord2f 0#, 0: glVertex2i -750, 850
        glTexCoord2f 1#, 0: glVertex2i -550, 850
        glTexCoord2f 1#, 1#: glVertex2i -550, 950
        glTexCoord2f 0#, 1#: glVertex2i -750, 950
    glEnd
   
    glBlendFunc GL_ONE, GL_ONE
    glBindTexture GL_TEXTURE_2D, Text_Score_I
    glBegin bmPolygon
        glTexCoord2f 0#, 0: glVertex2i -750, 850
        glTexCoord2f 1#, 0: glVertex2i -550, 850
        glTexCoord2f 1#, 1#: glVertex2i -550, 950
        glTexCoord2f 0#, 1#: glVertex2i -750, 950
    glEnd
   
    glDisable GL_BLEND
End Sub

Public Sub Display_Life()
    glEnable GL_BLEND
   
    glBlendFunc GL_DST_COLOR, GL_ZERO
    glBindTexture GL_TEXTURE_2D, Text_Life_M
    glBegin bmPolygon
        glTexCoord2f 0#, 0: glVertex2i 350, 850
        glTexCoord2f 1#, 0: glVertex2i 550, 850
        glTexCoord2f 1#, 1#: glVertex2i 550, 950
        glTexCoord2f 0#, 1#: glVertex2i 350, 950
    glEnd
   
    glBlendFunc GL_ONE, GL_ONE
    glBindTexture GL_TEXTURE_2D, Text_Life_I
    glBegin bmPolygon
        glTexCoord2f 0#, 0: glVertex2i 350, 850
        glTexCoord2f 1#, 0: glVertex2i 550, 850
        glTexCoord2f 1#, 1#: glVertex2i 550, 950
        glTexCoord2f 0#, 1#: glVertex2i 350, 950
    glEnd
   
    glDisable GL_BLEND
End Sub

13.3 Efek Suara
Hal ini jangan sampai terlupakan, karena suatu game akan bertambah nilainya jika diberi efek suara.

Pemrograman untuk efek suara tidak akan ogut bahas disini, karena ogut sudah menerangkan di bab terdahulu dan ogut yakin Anda tidak akan menemui kesulitan untuk membuat efek suara di Visual Basic.

Salam Jack Onil


Heriady
heriady.yoh@gmail.com




Artikel terkait

Membuat Game dengan VB 6