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