Minggu, 08 November 2015

Jack Onil Bab-18 Top Ten Rank

Inilah tambahan terakhir yang ogut tambahkan ke dalam game versi kedua, penambahan top ten rank atau rangking sepuluh besar bertujuan agar nilai score yang diraih oleh pemain disimpan dalam tabel.


Penyimpanan score dan nama pemain mempunyai tambahan nilai pada game yang kita buat, karena akan menambah motivasi bagi pemain untuk mengalahkan pemain lain yang namanya terdaftar dalam top ten rank.

Untuk membuat daftar rangking ogut memakai fasilitas yang telah disediakan oleh Visual Basic agar tidak mengubah program game yang telah jadi.

18.1 FlexGrid
Untuk menampilkan tabel rangking ogut memakai FlexGrid, dan untuk menggunakan FlexGrid Anda harus membuat sebuah form baru. Ikuti langkah-langkah di bawah untuk membuat sebuah form baru.

Klik kanan pada teks Form di dalam window Project1 pada Visual Basic Anda, pilih Add lalu pilih Form.


Berikutnya setelah tampil window Add Form klik tombol Open.


Setelah klik tombol Open, form baru dengan nama Form2 telah terbentuk seperti gambar di bawah.


Langkah berikut setelah form selesai dibuat Anda harus menambahkan FlexGrid ke dalam form. Tetapi sebelum itu FlexGrid harus ditambahkan ke dalam toolbox agar bisa digunakan.

Pilih menu Project, lalu pilih Components.


Setelah tampil pilihan yang ada, pilih Microsoft FlexGrid Control 6.0, klik pada checkbox lalu klik  tombol Apply.


Anda akan melihat sebuah item tambahan di toolbox, setelah klik tombol Apply. Lalu klik tombol Close.


Langkah terakhir tambahkan FlexGrid ke dalam Form2 yang telah kita buat sebelumnya.


18.2 File TopTen.txt
Ogut menggunakan sebuah file teks untuk menyimpan data rangking pemain. Sebelum masuk ke main looping data yang disimpan dalam TopTen.txt ogut load ke array untuk mempermudah proses berikutnya.

Sub yang ogut pakai untuk load data top ten rank ke dalam array adalah sebagai berikut.

Type TopTen_Object
    Nama As String
    Score As Long
End Type

'Top Ten
Public Const Max_TopTen = 10
Public TopTen(Max_TopTen - 1) As TopTen_Object

Public Function Load_TopTen(Filename As String) _
                                As Boolean

    Dim My_Free_File As Integer
    Dim i As Integer
        
    My_Free_File = FreeFile()
    
    On Error Resume Next
    
    Open Filename For Input As #My_Free_File
    
    If Err.Number <> 0 Then
        MsgBox "Reading file error, " + _
                "Program terminated", _
                vbOKOnly, Filename
                
        Close #My_Free_File
        Load_TopTen = False
        On Error GoTo 0
        
        Exit Function
    End If
    
    'load data top ten
    'lalu tempatkan di dalam array
    i = 0
    Do While Not EOF(1)
        Input #1, TopTen(i).Nama, TopTen(i).Score
                                                           
        i = i + 1
    Loop

    Close #My_Free_File
    
    On Error GoTo 0
    
    Load_TopTen = True

End Function

18.3 Proses Nama dan Score
Nama dan jumlah score yang berhasil dikumpulkan pemain diproses setelah setelah tokoh Onil gugur atau sesaat sebelum program game berakhir.

Proses yang dilakukan cukup sederhana, dengan cara membandingkan score pemain dengan score terakhir yang ada dalam daftar rangking. Jika score pemain lebih besar dari score urutan ke-10, maka pemain berhak didaftar ke dalam top ten.

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
        
        'periksa apakah user masuk dalam Top Ten
        'dengan membandingkan data
        'ke-9(rangking terakhir)
        If TopTen.TopTen(9).Score < _
                            Jack_Onil.Score Then
        
            'pemain masuk dalam Top Ten
            
            'input nama pemain
            New_Name = _
                    InputBox$("Ketik Nama Anda", _
                    "Top Ten Rank")
            
            'nama tidak boleh kosong
            If New_Name = Empty Then
                New_Name = "No Name"
            End If
            
            'nama tidak lebih dari 10 karakter
            'jika lebih potong panjang nama
            'sehingga menjadi 10 karakter
            If Len(New_Name) > 10 Then
                New_Name = Left(New_Name, 10)
            End If
            
            
            'ganti rangking ke-10 dengan data baru
            TopTen.TopTen(9).Nama = New_Name
            TopTen.TopTen(9).Score = Jack_Onil.Score
                    
            'Sort Tabel Top Ten
            Sort_TopTen
                    
            'buat tabel Top Ten baru
            Create_New_TopTen
            
            'tampilkan tabel Top Ten
            Display_TopTen
        Else
            MsgBox "**** Game Over ****", _
                    vbOKOnly, "Jack Onil Gugur"
        End If
                    
        '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

18.4 Sort Array
Jika pemain yang baru menyelesaikan game berhak didaftar dalam urutan rangking, maka yang harus dilakukan adalah mengganti daftar ke-10 dengan nama dan score baru.

Setelah pemain berada di urutan terakhir, langkah berikutnya  daftar dengan nama dan score yang baru diurutkan(sort).

Proses pengurutan tidak sulit, dapat dilakukan dengan sebuah looping mundur. Kondisi yang harus diperiksa adalah jika score yang baru bernilai lebih besar dari nilai score yang berada di atasnya, maka kedua data di atas harus ditukar.

Public Sub Sort_TopTen()
    Dim i As Integer
    Dim temp_Nama As String
    Dim temp_Score As Long
    
    'looping mundur
    For i = (Max_TopTen - 1) To 1 Step -1
    
            'jika data pada posisi i lebih besar
            'dari data di posisi sebelumnya(i-1),
            'maka data ditukar posisi,
            'agar data yang lebih besar
            'ditempatkan lebih atas
            If TopTen(i).Score > _
                        TopTen(i - 1).Score Then
                        
                'tukar posisi data
                temp_Nama = TopTen(i).Nama
                temp_Score = TopTen(i).Score
                
                TopTen(i).Nama = TopTen(i - 1).Nama
                TopTen(i).Score = TopTen(i - 1).Score
                
                TopTen(i - 1).Nama = temp_Nama
                TopTen(i - 1).Score = temp_Score
            Else
                'data yang baru masuk posisinya
                'sudah berada di tempat yang benar
                'sehingga harus keluar
                'dari looping
                Exit For
            End If
    Next i

End Sub

18.5 Buat Daftar Baru
Setelah data pada array diurutkan tahap berikutnya daftar rangking sepuluh besar disimpan pada file teks yang sama yaitu TopTen.txt, sehingga pada saat game dijalankan kembali daftar baru yang akan diproses seperti sebelumnya.

Public Sub Create_New_TopTen()
    Dim My_Free_File As Integer
    Dim i As Integer
    
    My_Free_File = FreeFile()
    
    Open "TopTen/TopTen.txt" _
                For Output As #My_Free_File
    
    'simpan daftar top ten baru
    'ke file TopTen.txt
    For i = 0 To Max_TopTen - 1
            
        Print #My_Free_File, _
                TopTen(i).Nama + " , " + _
                Str(TopTen(i).Score)
    Next
    
    Close #My_Free_File   ' Close file.
End Sub

18.6 Tampilkan Daftar
Daftar rangking ditampilkan sebelum program game berhenti dan pemain masuk dalam daftar sepuluh besar. Cara untuk menampilkan daftar ini sangat sederhana dan mudah.

Public Sub Display_TopTen()
    Dim i As Integer

    'buat header Grid
    Form2.MSFlexGrid1.TextMatrix(0, 0) = "Rank"
    Form2.MSFlexGrid1.TextMatrix(0, 1) = "Nama"
    Form2.MSFlexGrid1.TextMatrix(0, 2) = "Score"
    
    'atur lebar kolom Grid
    Form2.MSFlexGrid1.ColWidth(0) = 500
    Form2.MSFlexGrid1.ColWidth(1) = 2500
    Form2.MSFlexGrid1.ColWidth(2) = 1500
    
    'isi Grid dengan data top ten
    For i = 0 To Max_TopTen - 1
        With Form2.MSFlexGrid1
        .TextMatrix(i + 1, 0) = i + 1
        .TextMatrix(i + 1, 1) = TopTen(i).Nama
        .TextMatrix(i + 1, 2) = TopTen(i).Score
        End With
    Next
    
    'tampilkan data top ten ke layar
    Form2.Enabled = True
    Form2.Show
    
    MsgBox "Klik OK to Exit Program", _
                vbOKOnly, "Top Ten Rank"
    
    Form2.Hide
End Sub


Salam Jack Onil


Heriady
heriady.yoh@gmail.com




Artikel terkait

Membuat Game dengan VB 6

Tidak ada komentar:

Posting Komentar