IMPLEMENTASI DAN PENGUJIAN SISTEM
4.1 Implementasi Sistem
Sistem yang dibangun pada penelitian ini menggunakan bahasa pemrograman C#, Unity dan Visual Studio 2019. Sistem memiliki 5 tampilan halaman yaitu Title Menu, Cara Bermain, Credit, Permainan (Gameplay) dan Pause Menu.
4.1.1 Tampilan Halaman Title Menu
Gambar 4.1 Halaman Title Menu
Gambar 4.1 menunjukkan tampilan halaman title menu. Tampilan ini berisi judul permainan, karakter yang dapat user kendalikan nantinya, serta empat tombol yaitu Mulai Game, Cara Bermain, Akhiri Game, dan Credit.
4.1.2 Tampilan Halaman Cara Bermain
Gambar 4.2 Halaman Cara Bermain
Halaman Cara Bermain merupakan halaman yang berisi petunjuk cara memainkan game sehingga user dapat melihat halaman ini apabila belum memahami cara kerja game. Gambar 4.2 menunjukkan tampilan halaman Cara Bermain.
37
Universitas Sumatera Utara 4.1.3 Tampilan Halaman Credit
Gambar 4.3 Halaman Credit
Halaman Credit merupakan halaman yang berisi informasi mengenai pembuat game beserta aset-aset yang digunakan. Gambar 4.3 menunjukkan tampilan halaman Credit.
4.1.4 Tampilan Permainan
Gambar 4.4 Tampilan Permainan (Gameplay)
Gambar 4.5 Hasil Pencarian Jalan Keluar dengan Algoritma A*
39
Universitas Sumatera Utara Sesuai dengan Gambar 4.4, tampilan ini menunjukkan permainan utama dimana user dapat mengendalikan karakter dengan menggunakan joystick yang terdapat di kiri bawah layar dan menyerang musuh dengan tombol aksi yang ada di kanan bawah layar.
Terdapat tombol pause yang ada di atas dan beberapa interface lain yang memuat informasi seperti level, health point, dan skor.
Untuk proses-proses yang terjadi pada gameplay, ketika user memasuki tampilan permainan maka sistem akan mengenerasi maze dengan algoritma DFS.
Kemudian, sistem juga akan mengenerasi karakter user, musuh-musuh atau item-item yang dapat di-collect user seperti score item, health item dan hint item. Ketika karakter user menyentuh hint item, sistem akan menjalankan algoritma A* untuk menemukan jalan keluar (goal) dari maze dan menampilkannya selama 6 detik seperti yang terlihat pada Gambar 4.5.
4.1.5 Tampilan Halaman Pause Menu
Gambar 4.6 Halaman Pause Menu
Halaman Pause Menu merupakan halaman yang tampil saat user menekan gambar pause di dalam game. Pada halaman ini, user dapat melanjutkan game, kembali ke halaman Title Menu atau keluar dari game. Gambar 4.6 menunjukkan tampilan halaman Pause Menu.
4.2 Pengujian
Pada pengujian sistem, penulis menguji apakah sistem yang dibangun telah bekerja sesuai fungsinya dalam mengenerasi maze dan pencarian jalur.
4.2.1 Pengujian Implementasi Algoritma DFS
Pada penelitian ini, algoritma DFS digunakan untuk mengenerasi maze. Pada game ini terdapat level yang menunjukkan perkembangan pemain dalam game. Ukuran maze yang digenerasi tergantung dengan level pemain berada saat ini. Misalnya pada level 1 ukuran maze adalah 3 x 3, lalu pada level 2 ukuran maze adalah 4 x 4 dan seterusnya.
Pada pengujian ini, digunakan maze dengan ukuran 5 x 5. Gambar 4.7 dan 4.8 menunjukkan hasil pengujian untuk mengenerasi maze dengan algoritma DFS.
41
Universitas Sumatera Utara Gambar 4.7 Hasil Pengujian Algoritma DFS dalam Mengenerasi Maze Pada Unity
Editor
Gambar 4.8 Hasil Pengujian Algoritma DFS dalam Mengenerasi Maze Pada Game
Ketika user memasuki game, sistem segera mengenerasi maze. Node awal dipilih secara acak, begitu pula node-node tetangga yang dipilih selanjutnya. Kemudian dihancurkan dinding di antara kedua node. Sistem terus menjalankan algoritma sampai seluruh node sudah dikunjungi. Selanjutnya sistem akan me-render hasil maze dan menampilkannya pada game.
Tabel 4.1 menunjukkan hasil pengujian maze generator algoritma DFS dengan ukuran 5 x 5 dengan sepuluh kali percobaan.
Tabel 4.1 Hasil Real Running Time Algoritma DFS
No Estimasi Waktu (ms)
1 1.5610
2 1.6413
3 1.5416
4 1.6073
43 15.8827 ms, sehingga waktu rata-ratanya adalah 1.58827 ms. Karena rata-rata waktu yang diperoleh tidak berbeda secara signifikan dari waktu untuk setiap percobaan, maka dapat disimpulkan bahwa waktu yang dibutuhkan dalam mengenerasi maze dengan algoritma DFS realtif konsisten.
4.2.2 Perhitungan manual Algoritma DFS
Pada proses pembuatan maze menggunakan algoritma DFS, digunakan representasi bit sebagai flag atau penanda apakah suatu node memiliki dinding atau tidak. Nilai 12 mewakilkan dinding pada maze dan nilai 02 mewakilkan jalur. Nilai bit 00012 mewakilkan dinding kiri, 00102 mewakilkan dinding kanan, 01002 mewakilkan dinding atas dan 10002 mewakilkan dinding bawah. Warna kuning mewakilkan bahwa node sudah dikunjungi sebelumnya. Berikut ini merupakan langkah-langkah untuk mengenerasi maze menggunakan algoritma DFS:
Iterasi 1
Dinisialisasi seluruh node dengan nilai 1111.
Secara acak, node (1,2) dipilih menjadi node utama, lalu dimasukkan ke dalam stack.
Dipilih secara acak node tetangga yang belum dikunjungi yaitu node (1,3), lalu dihapus dinding diantara node sehingga nilai node (1,2) menjadi 1011 dan node (1,3) menjadi 0111. Lalu node (1,3) dimasukkan ke dalam stack dan tandai sudah dikunjungi.
4 1111 1111 1111 1111 1111 3 1111 1111 1111 1111 1111 2 1111 1111 1111 1111 1111 1 1111 1111 1111 1111 1111 0 1111 1111 1111 1111 1111
z/x 0 1 2 3 4 S
4 1111 1111 1111 1111 1111 3 1111 0111 1111 1111 1111 2 1111 1111 1111 1111 1111 1 1111 1111 1111 1111 1111
0 1111 1111 1111 1111 1111 (1,2)
z/x 0 1 2 3 4 S
45
Universitas Sumatera Utara Iterasi 2
Node (1,3) diset menjadi node saat ini.
Dipilih secara acak node tetangga yang belum dikunjungi yaitu node (0,3), lalu dihapus dinding diantara node sehingga nilai node (1,3) menjadi 0110 dan node (0,3) menjadi 1101. Lalu node (0,3) dimasukkan ke dalam stack dan tandai sudah dikunjungi.
4 1111 1111 1111 1111 1111 3 1111 0111 1111 1111 1111 2 1111 1011 1111 1111 1111
1 1111 1111 1111 1111 1111 (1,3) 0 1111 1111 1111 1111 1111 (1,2)
z/x 0 1 2 3 4 S
4 1111 1111 1111 1111 1111 3 1101 0110 1111 1111 1111
2 1111 1011 1111 1111 1111 (0,3) 1 1111 1111 1111 1111 1111 (1,3) 0 1111 1111 1111 1111 1111 (1,2)
z/x 0 1 2 3 4 S
Iterasi 3
Node (0,3) diset menjadi node saat ini.
Dipilih secara acak node tetangga yang belum dikunjungi yaitu node (0,4), lalu dihapus dinding diantara node sehingga nilai node (0,3) menjadi 1001 dan node (0,4) menjadi 0111. Lalu node (0,4) dimasukkan ke dalam stack dan tandai sudah dikunjungi.
Iterasi 4
Node (0,4) diset menjadi node saat ini.
Dipilih secara acak node tetangga yang belum dikunjungi yaitu node (1,4), lalu dihapus dinding diantara node sehingga nilai node (0,4) menjadi 0101 dan node (1,4) menjadi 1110. Lalu node (1,4) dimasukkan ke dalam stack dan tandai sudah dikunjungi.
4 0111 1111 1111 1111 1111
3 1001 0110 1111 1111 1111 (0,4) 2 1111 1011 1111 1111 1111 (0,3) 1 1111 1111 1111 1111 1111 (1,3) 0 1111 1111 1111 1111 1111 (1,2)
z/x 0 1 2 3 4 S
47
Universitas Sumatera Utara .
. . Iterasi 49
Node (1,2) dikeluarkan dari stack lalu diset menjadi node saat ini. Karena node tersebut tidak memiliki node tetangga yang belum dikunjungi dan tidak ada lagi node yang ada di dalam stack, maka iterasi berakhir.
Berdasarkan perhitungan manual diperoleh bahwa Algoritma DFS membutuhkan 49 iterasi untuk mengenerasi maze dengan ukuran 5 x 5.
4 0101 1110 1111 1111 1111 (1,4) 3 1001 0110 1111 1111 1111 (0,4) 2 1111 1011 1111 1111 1111 (0,3) 1 1111 1111 1111 1111 1111 (1,3) 0 1111 1111 1111 1111 1111 (1,2)
z/x 0 1 2 3 4 S
4 0101 1100 0100 1100 0110 3 1001 0110 0011 1101 0010 2 0111 1011 1001 0110 0011 1 0011 0101 1100 1010 0011 0 1001 1010 1101 1100 1010
z/x 0 1 2 3 4 S
Gambar 4.9 Hasil Struktur Pohon
49
Universitas Sumatera Utara 4.2.3 Pengujian Implementasi Algoritma A*
Pada penelitian ini, algoritma A* digunakan untuk mencari jalan keluar dari maze.
Ukuran grid pada algoritma A* adalah 2 kali ukuran maze + 1. Hal ini agar dapat diketahui node mana yang dapat dilalui dan mana yang tidak. Misalnya pada maze berukuran 5 x 5, ukuran grid pada algoritma A* adalah 11 x 11.
Pada pengujian, ukuran grid algoritma A* adalah 11 x 11. Gambar 4.10 dan 4.11 menunjukkan hasil pengujian algoritma A* untuk mencari jalan keluar.
Gambar 4.10 Hasil Pengujian Algoritma A* Pada Unity Editor
51
Universitas Sumatera Utara Gambar 4.11 Hasil Pengujian Algoritma A* Pada Game
Ketika user menyentuh item hint, sistem akan mengambil posisi karakter user saat ini sebagai node awal. Selanjutnya sistem akan mencari jalur menuju node tujuan.
Kemudian sistem akan menampilkan jalur dalam bentuk objek bola-bola berwarna merah di tiap node yang menuju node tujuan.
Hasil pengujian algoritma A* dengan sepuluh kali percobaan dapat dilihat pada Tabel 4.2.
Tabel 4.2 Hasil Real Running Time Algoritma A*
No Estimasi Waktu (ms)
1 1.6801
2 1.6012
3 1.5921
4 1.6619
5 1.6754
6 1.5121 waktu yang diperoleh tidak berbeda secara signifikan dari waktu untuk setiap percobaan, maka dapat disimpulkan bahwa waktu yang dibutuhkan algoritma A* untuk mencari jalan keluar tergolong konsisten.
4.2.4 Perhitungan manual Algoritma A*
Algoritma A* menggunakan metode heuristik dalam pencarian jalur untuk mencapai node tujuan. Hasil perhitungan manual algoritma A* dengan menggunakan maze yang dihasilkan sebelumnya dapat dilihat sebagai berikut.
Misalkan diketahui node asal adalah (9, 8) dan node tujuan adalah (7, 1). Maka node asal diset menjadi node saat ini. Langkah pertama adalah mendeteksi semua node-node yang memungkinkan untuk dilalui oleh node-node saat ini. Hitung nilai G yaitu nilai jarak terdekat dari node asal, nilai H yaitu nilai heuristik atau perkiraan dari node tersebut menuju node tujuan dan F yaitu jumlah dari G dan H. Fungsi heuristik yang digunakan untuk mencari nilai H adalah Manhattan Distance.
Keterangan:
Warna merah : unwalkable node (node yang tidak dapat dilalui) Warna kuning : current node (node saat ini)
Warna biru : open node (node yang dapat dilalui)
53
Universitas Sumatera Utara Warna oranye : closed node (node yang sudah dilalui)
Warna hijau : destination node (node tujuan)
Seperti terlihat pada gambar diatas, dibangkitkan semua node yang berada di sekitar node saat ini kecuali node yang tidak dapat dilalui (unwalkable).
Node saat ini: (9, 8)
Node-node tetangga yang dapat dilalui:
Node (9, 9) memiliki nilai:
h(n) = |9-7| + |7-1| = 8 f(n) = g(n) + h(n) = 9 parentNode = (9, 8)
Dari hasil diatas terlihat bahwa node saat ini diset menjadi (9, 7) karena node tersebut memiliki nilai F yang paling kecil dibandingkan dengan node lainnya.
Setelah berpindah, dihitung semua node baru di sekitar node saat ini. Node-node yang sudah dikunjungi dimasukkan ke dalam ClosedList sehingga tidak dihitung ulang.
Node saat ini: (9, 7)
Node-node tetangga yang dapat dilalui:
Node (8, 7) memiliki nilai:
55
Dari hasil diatas terlihat bahwa terdapat 2 node yang memiliki nilai F terendah yaitu node (8, 7) dan (9, 6). Oleh karenanya, node saat ini bisa jadi diantara kedua node tersebut. Kita gunakan node (8, 7).
Node saat ini: (8, 7)
Node-node tetangga yang dapat dilalui:
10
Node (7, 7) memiliki nilai:
g(n) = 3
h(n) = |7-7| + |7-1| = 6 f(n) = g(n) + h(n) = 9 parentNode = (8, 7)
Dari hasil di atas terlihat bahwa terdapat 2 node yang memiliki nilai F terendah yaitu node (7, 7) dan (9, 6). Oleh karenanya, node saat ini bisa jadi diantara kedua node tersebut. Kita gunakan node (7, 7).
Node saat ini: (7, 7)
Node-node tetangga yang dapat dilalui:
Node-node tetangga sudah berada di dalam ClosedList atau merupakan dinding.
57
Universitas Sumatera Utara Selanjutnya, digunakan node (9, 6) sebagai node saat ini karena node tersebut memiliki nilai F terkecil dalam OpenList.
Node saat ini: (9, 6)
Node-node tetangga yang dapat dilalui:
Node (9, 5) memiliki nilai:
g(n) = 3
h(n) = |9-7| + |6-1| = 6 f(n) = g(n) + h(n) = 9 parentNode = (9, 6)
Dari hasil diatas terlihat bahwa node saat ini diset ke (9, 5) karena node tersebut memiliki nilai F paling kecil dibandingkan dengan node lainnya.
10
Node saat ini: (9, 5)
Node-node tetangga yang dapat dilalui:
Node (9, 4) memiliki nilai:
g(n) = 4
h(n) = |9-7| + |5-1| = 5 f(n) = g(n) + h(n) = 9 parentNode = (9, 5)
Dari hasil diatas terlihat bahwa node saat ini diset ke (9, 4) karena node tersebut memiliki nilai F paling kecil dibandingkan dengan node lainnya.
10
59
Universitas Sumatera Utara Node saat ini: (9, 4)
Node-node tetangga yang dapat dilalui:
Node (9, 3) memiliki nilai:
g(n) = 5
h(n) = |9-7| + |4-1| = 4 f(n) = g(n) + h(n) = 9 parentNode = (9, 4)
Dari hasil diatas terlihat bahwa node saat ini diset ke (9, 3) karena node tersebut memiliki nilai F paling kecil dibandingkan dengan node lainnya.
10
Node saat ini: (9, 3)
Node-node tetangga yang dapat dilalui:
Node (9, 2) memiliki nilai:
g(n) = 6
h(n) = |9-7| + |3-1| = 3 f(n) = g(n) + h(n) = 9 parentNode = (9, 3)
Dari hasil diatas terlihat bahwa node saat ini diset ke (9, 2) karena node tersebut memiliki nilai F paling kecil dibandingkan dengan node lainnya.
10
61
Universitas Sumatera Utara Node saat ini: (9, 2)
Node-node tetangga yang dapat dilalui:
Node (9, 1) memiliki nilai:
g(n) = 7
h(n) = |9-7| + |1-1| = 2 f(n) = g(n) + h(n) = 9 parentNode = (9, 2)
Dari hasil diatas dapat diketahui bahwa node (9, 1) memiliki nilai F yang terendah jika dibandingkan dengan node lainnya, sehingga node saat ini diset menjadi node (9, 1).
Node saat ini: (9, 1)
Node-node tetangga yang dapat dilalui:
Node (8, 1) memiliki nilai:
g(n) = 8
h(n) = |8-7| + |1-1| = 1 f(n) = g(n) + h(n) = 9 parentNode = (9, 1)
Dari hasil diatas terlihat bahwa node saat ini diset ke (8, 1) karena node tersebut memiliki nilai F paling kecil dibandingkan dengan node lainnya.
10
63
Universitas Sumatera Utara Node saat ini: (8, 1)
Node-node tetangga yang dapat dilalui:
Node (7, 1) memiliki nilai:
g(n) = 9
h(n) = |7-7| + |1-1| = 0 f(n) = g(n) + h(n) = 9 parentNode = (8, 1)
Dari hasil diatas terlihat bahwa node saat ini diset ke (7, 1) karena node tersebut memiliki nilai F paling kecil dibandingkan dengan node lainnya.
10
Node saat ini: (7, 1)
Karena node saat ini sama dengan node tujuan, maka proses pencarian pun berakhir. Proses selanjutnya adalah backtracking yang bertujuan untuk memetakan jalur yang sebelumnya dicari dengan cara memanggil satu per satu parent node dimulai dari node tujuan hingga node awal. Proses backtracking berakhir ketika parent node adalah node awal.
65
Universitas Sumatera Utara Berikut adalah jalur yang dihasilkan dari proses backtracking.
10