Penerapan Algoritma Column by Column dan Depth-First Search dalam Permainan Babylon Tower

(1)

PENERAPAN ALGORITMA COLUMN BY COLUMN DAN DEPTH-FIRST SEARCH DALAM PERMAINAN

BABYLON TOWER

SKRIPSI

HARRY 111402046

PROGRAM STUDI S1 TEKNOLOGI INFORMASI

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2015


(2)

PENERAPAN ALGORITMA COLUMN BY COLUMN DAN DEPTH-FIRST SEARCH DALAM PERMAINAN

BABYLON TOWER

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah Sarjana Teknologi Informasi

HARRY 111402046

PROGRAM STUDI S1 TEKNOLOGI INFORMASI

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2015


(3)

PERSETUJUAN

Judul : PENERAPAN ALGORITMA COLUMN BY COLUMN

DAN DEPTH-FIRST SEARCH DALAM PERMAINAN BABYLON TOWER

Kategori : SKRIPSI

Nama : HARRY

Nomor Induk Mahasiswa : 111402046

Program Studi : S1 TEKNOLOGI INFORMASI

Departemen : TEKNOLOGI INFORMASI

Fakultas : ILMU KOMPUTER DAN TEKNOLOGI INFORMASI

UNIVERSITAS SUMATERA UTARA Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Romi Fadillah Rahmat, B.Comp.Sc M.Sc Prof. Dr. Opim Salim Sitompul, M.Sc NIP. 19860303 201012 1 004 NIP. 19610817 198701 1 001

Diketahui/disetujui oleh

Program Studi S1 Teknologi Informasi Ketua,

Muhammad Anggia Muchtar, ST., MM.IT NIP. 19800110 200801 1 010


(4)

iii

PERNYATAAN

PENERAPAN ALGORITMA COLUMN BY COLUMN DAN DEPTH-FIRST SEARCH DALAM PERMAINAN

BABYLON TOWER

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing telah disebutkan sumbernya.

Medan, 17 Desember 2015

Harry 111402046


(5)

UCAPAN TERIMA KASIH

Puji dan syukur penulis sampaikah kehadirat Tuhan Yang Maha Esa yang telah memberikan rahmat serta restu-Nya sehingga penulis dapat menyelesaikan skripsi ini sebagai syarat untuk memperoleh gelar Sarjana Teknologi Informasi.

Pertama, penulis ingin mengucapkan terima kasih kepada Bapak Prof. Dr. Opim Salim Sitompul, M.Sc selaku pembimbing pertama dan Bapak Romi Fadillah Rahmat, B.Comp.Sc. M.Sc selaku pembimbing kedua yang telah membimbing penulis dalam penelitian serta penulisan skripsi ini. Tanpa inspirasi serta motivasi yang diberikan dari kedua pembimbing, tentunya penulis tidak akan dapat menyelesaikan skripsi ini. Penulis juga mengucapkan terima kasih kepada Bapak Dedy Arisandi, ST. M.Kom sebagai dosen pembanding pertama dan Bapak Dr. Sawaluddin, M.IT sebagai dosen pembanding kedua yang telah memberikan masukan serta kritik yang bermanfaat dalam penulisan skripsi ini. Ucapan terima kasih juga ditjukan kepada semua dosen serta semua pegawai pada program studi S1 Teknologi Informasi, yang telah membantu serta membimbing penulis selama proses perkuliahan.

Penulis tentunya tidak lupa berterima kasih kepada kedua orang tua penulis, Alm. Bapak Hermanto Tahir, serta Ibu Narina Salimin yang telah membesarkan penulis dengan sabar dan penuh cinta. Terima kasih juga penulis ucapkan kepada adik penulis, Roderick, yang selalu memberikan dukungan kepada penulis. Penulis juga berterima kasih kepada seluruh anggota keluarga penulis yang namanya tidak dapat disebutkan satu persatu.

Terima kasih juga penulis ucapkan kepada seluruh teman-teman angkatan 2011 yang telah bersama-sama penulis melewati perkuliahan pada program studi S1 Teknologi Informasi, serta teman-teman mahasiswa Teknologi Informasi lainnya.


(6)

v

ABSTRAK

Babylon Tower merupakan permainan puzzle tiga dimensi yang terdiri dari enam buah cakram yang disusun menumpuk ke atas. Setiap cakram terdiri dari enam kolom bola kecil di sepanjang sisinya dengan enam jenis warna yang berbeda. Babylon Tower dapat dimainkan dengan cara diputar dan digeser. Tujuan dari permainan Babylon Tower adalah mengurutkan setiap bola dengan warna yang sama pada kolom yang sama serta mengurutkan setiap kolom berdasarkan tingkat kecerahan warna bola. Terdapat dua metode yang dapat digunakan untuk menemukan solusi permainan Babylon Tower, yaitu disc by disc dan column by column. Metode yang diajukan pada penelitian ini adalah algoritma column by column dan depth-first search. Pada penelitian ini ditunjukkan bahwa metode yang diajukan mampu menemukan langkah demi langkah untuk mencapai solusi dari permainan Babylon Tower.


(7)

IMPLEMENTATION OF COLUMN BY COLUMN AND DEPTH-FIRST SEARCH ALGORITHM IN THE GAME

OF BABYLON TOWER

ABSTRACT

Babylon Tower is a three-dimensional puzzle which consists of six discs that are arranged piled up. Each discs consists of six columns of small balls along the side in six kinds of different colors. Babylon Tower can be played by rotating and sliding it. The goal of the game of Babylon Tower is to sort each ball of the same color on the same column and sort the balls in each column based on the brightness of the color of the ball. There are two methods that can be used to find a solution of the game of Babylon Tower, namely disc by disc and column by column. The methods proposed in this research are column by column and depth-first search. In this research, it is shown that the proposed methods are capable of finding step by step to reach a solution of the game of Babylon Tower.

Keywords: Babylon Tower, three-dimensional puzzle, column by column, depth-first search.


(8)

vii

DAFTAR ISI

Hal.

Persetujuan ii

Pernyataan iii

Ucapan Terima Kasih iv

Abstrak v

Abstract vi

Daftar Isi vii

Daftar Tabel x

Daftar Gambar xi

BAB 1 Pendahuluan 1

1.1. Latar Belakang 1

1.2. Rumusan Masalah 2

1.3. Batasan Masalah 3

1.4. Tujuan Penelitian 3

1.5. Manfaat Penelitian 3

1.6. Metodologi Penelitian 4

1.7. Sistematika Penulisan 5

BAB 2 Landasan Teori 6

2.1. Babylon Tower 6

2.2. Game Architecture 8

2.3. Struktur Data dan Algoritma dalam Game 9

2.3.1. Struktur Data dan Algoritma 10

2.3.2. Struktur Data dalam Game 10

2.4. Path Finding 11

2.4.1.Game Tree 12


(9)

2.5. Blind Search 14

2.5.1. Breadth-First Search 15

2.5.2. Depth-First Search 16

2.6. Kecerdasan Buatan dalam Game 18

2.7. Penelitian Terdahulu 19

BAB 3 Analisis dan Perancangan 21

3.1. Arsitektur Umum 21

3.2. Modelling 23

3.2.1. Model Cakram 23

3.2.2. Model Bola 25

3.2.3. Model Babylon Tower 26

3.3. Struktur Data 27

3.3.1. Ball 27

3.3.2. Disc 28

3.3.3. Inner Gap 29

3.3.4. Babylon Tower 29

3.4. Game Mechanic 31

3.4.1. Touch Handling 31

3.4.2. Moves Handling 35

3.5. AI 38

3.5.1. Sorting dengan depth-first search 39

3.5.2. Swapping 42

3.5.3. Parity 44

BAB 4 Implementasi dan Pengujian 47

4.1. Implementasi 47

4.1.1. Spesifikasi perangkat keras 47

4.1.2. Spesifikasi perangkat lunak 48

4.1.3. Eksekusi aplikasi 48


(10)

ix

4.2.1. Hasil dari Tahap Sorting 53

4.2.2. Hasil dari Tahap Swapping 53

4.2.3. Hasil dari Tahap Parity 54

4.2.4. Hasil Pengujian 55

BAB 5 Kesimpulan dan Saran 56

5.1. Kesimpulan 56

5.2. Saran 56


(11)

DAFTAR TABEL

Hal.

Tabel 3.1. Daftar variabel pada class Ball 27

Tabel 3.2. Nama-nama warna bola dalam array 28

Tabel 3.3. Daftar variabel pada class Disc 29

Tabel 3.4. Daftar variabel pada class Babylon Tower 30 Tabel 3.5. Daftar method pada class Babylon Tower 30 Tabel 3.6. Nilai yang disimpan serta proses undo dan redo pada gerakan rotate 36 Tabel 3.7. Nilai yang disimpan serta proses undo dan redo pada gerakan push 37 Tabel 3.8. Nilai yang disimpan serta proses undo dan redo pada gerakan slide 38 Tabel 4.1. Hasil pengujian terhadap banyak langkah yang dibutuhkan untuk


(12)

xi

DAFTAR GAMBAR

Hal. Gambar 2.1. Game tree pada Tic-Tac-Toe (Millington & Funge, 2009) 12 Gambar 2.2. Search tree pada permainan Babylon Tower 13 Gambar 2.3. Breadth-first search pada permainan Babylon Tower 15 Gambar 2.4. Depth-first search pada permainan Babylon Tower 17

Gambar 3.1. Arsitektur Umum 22

Gambar 3.2. Model cakram (disc) pada posisi paling atas 24 Gambar 3.3. Model cakram (disc) pada posisi paling bawah 24 Gambar 3.4. Model cakram (disc) yang posisinya diapit oleh dua cakram yang

lain 25

Gambar 3.5. Tiga puluh enam buah bola yang digunakan dalam BabylonTower 25

Gambar 3.6. BabylonTower dalam Model 3D 26

Gambar 3.7. Tampilan scene sebelum dan sesudah bola merah pada posisi paling

bawah ditekan masuk ke dalam cakram 34

Gambar 3.8. Tampilan scene sebelum dan sesudah bola merah pada baris keempat dari atas digeser menuju celah yang ada di posisi paling atas 34 Gambar 3.9. Tampilan scene ketika jari user sedang memutar salah satu cakram

dan tampilan scene setelah jari user meninggalkan layar 35

Gambar 4.1. Tampilan MainMenu 49

Gambar 4.2. Tampilan GameScene 50


(13)

ABSTRAK

Babylon Tower merupakan permainan puzzle tiga dimensi yang terdiri dari enam buah cakram yang disusun menumpuk ke atas. Setiap cakram terdiri dari enam kolom bola kecil di sepanjang sisinya dengan enam jenis warna yang berbeda. Babylon Tower dapat dimainkan dengan cara diputar dan digeser. Tujuan dari permainan Babylon Tower adalah mengurutkan setiap bola dengan warna yang sama pada kolom yang sama serta mengurutkan setiap kolom berdasarkan tingkat kecerahan warna bola. Terdapat dua metode yang dapat digunakan untuk menemukan solusi permainan Babylon Tower, yaitu disc by disc dan column by column. Metode yang diajukan pada penelitian ini adalah algoritma column by column dan depth-first search. Pada penelitian ini ditunjukkan bahwa metode yang diajukan mampu menemukan langkah demi langkah untuk mencapai solusi dari permainan Babylon Tower.


(14)

vi

IMPLEMENTATION OF COLUMN BY COLUMN AND DEPTH-FIRST SEARCH ALGORITHM IN THE GAME

OF BABYLON TOWER

ABSTRACT

Babylon Tower is a three-dimensional puzzle which consists of six discs that are arranged piled up. Each discs consists of six columns of small balls along the side in six kinds of different colors. Babylon Tower can be played by rotating and sliding it. The goal of the game of Babylon Tower is to sort each ball of the same color on the same column and sort the balls in each column based on the brightness of the color of the ball. There are two methods that can be used to find a solution of the game of Babylon Tower, namely disc by disc and column by column. The methods proposed in this research are column by column and depth-first search. In this research, it is shown that the proposed methods are capable of finding step by step to reach a solution of the game of Babylon Tower.

Keywords: Babylon Tower, three-dimensional puzzle, column by column, depth-first search.


(15)

BAB 1 PENDAHULUAN

1.1. Latar Belakang

Babylon Tower merupakan salah satu permainan puzzle tiga dimensi yang diciptakan oleh Endre Pap dan dipatenkan pada tahun 1982. Babylon Tower dapat dimainkan dengan cara diputar dan digeser, sehingga Babylon Tower memiliki jumlah kemungkinan posisi bola yang sangat besar serta jumlah cara penyelesaian yang sangat besar pula (Scherpuis, 2015).

Terdapat dua jenis metode yang dapat digunakan untuk menyelesaikan Babylon Tower, yaitu disc by disc dan column by column (Scherpuis, 2015). Column by column merupakan metode yang lebih umum digunakan dalam menyelesaikan Babylon Tower karena lebih mudah dipelajari oleh pemain pemula. Column by column dilakukan dengan mengelompokkan terlebih dahulu bola-bola dengan warna yang sejenis dalam setiap kolom yang sama, kemudian mengurutkannya berdasarkan tingkat kecerahan warna setiap bola. Namun pada kenyataanya, algoritma column by column tidak selalu memberikan solusi pada Babylon Tower yang berada dalam keadaan acak. Kadang-kadang algoritma column by column dapat menemui jalan buntu sehingga pemain perlu mempertimbangkan langkah lain yang lebih baik diambil untuk menghindari jalan buntu tersebut. Oleh karena itu, penulis tertarik untuk mengembangkan algoritma column by column yang dapat diterapkan dalam permainan Babylon Tower supaya dapat selalu menemukan solusi.

Banyak penelitian yang telah dilakukan untuk menyelesaikan berbagai jenis game puzzle dengan menggunakan berbagai jenis algoritma. Korf & Felner (2007) menerapkan beberapa algoritma pencarian seperti frontier search, disk-based search, parallel processing, pattern database heuristic dan breadth-first heuristic search untuk mengatasi masalah dalam permainan four-peg Towers of Hanoi. Selanjutnya, Jing et al. (2009) melakukan penelitian terhadap metode yang dapat diterapkan dalam permainan Japanese puzzle atau dikenal juga sebagai nonogram. Metode tersebut


(16)

2

terdiri dari dua tahap, yaitu menentukan cell-cell yang akan diwarnai melalui beberapa aturan logika kemudian algoritma depth-first search akan dijalankan untuk menyelesaikan cell-cell yang tersisa. Penelitian terhadap Japanese puzzle juga pernah dilakukan oleh Stefani et al. (2012) dengan menggunakan metode rule-based dan algoritma best-first search. Panov & Koceski (2014) menggunakan pendekatan heuristik yang diterapkan dalam permainan Kakuro. Algoritma yang digunakan dalam penelitian tersebut adalah Self-Adapting Harmony Search (SAHS). Algoritma SAHS dapat ditingkatkan apabila dilakukan tahap perhitungan terlebih dahulu untuk menentukan kombinasi penjumlahan bilangan yang dapat menghasilkan bilangan yang diinginkan. Abdel-Raouf et al. (2014) menggunakan algoritma chaotic harmony search untuk mengembangkan algoritma flower pollination yang diterapkan dalam permainan Sudoku. Dari hasil penelitian ini, algoritma tersebut mampu menemukan jalan yang lebih baik untuk menyelesaikan soal Sudoku.

Babylon Tower dapat diselesaikan dengan mengkombinasikan algoritma column by column dengan algoritma pencarian lainnya. Oleh karena itu, pada penelitian ini akan dirancang aplikasi permainan Babylon Tower yang diimplementasikan dengan algoritma column by column dan depth-first search untuk menyelesaikan permainan Babylon Tower.

1.2. Rumusan Masalah

Dalam permainan Babylon Tower, terdapat 36 posisi serta sebuah celah yang dapat ditempati oleh setiap bola. Setiap bola yang digunakan dalam permainan Babylon Tower juga memiliki jenis warna yang berbeda-beda dengan tingkat kecerahan setiap jenis warna yang berbeda-beda pula, sehingga tidak terdapat bola dengan warna dan tingkat kecerahan yang sama dalam permainan tersebut. Hal ini menyebabkan terdapatnya banyak kemungkinan posisi berbeda yang dapat ditempati oleh setiap bola. Dalam permainan Babylon Tower, terdapat langkah-langkah yang perlu dipertimbangkan untuk diambil karena langkah yang diambil mungkin saja menemui jalan buntu atau menghasilkan keadaan yang lebih acak lagi sehingga perlu dipertimbangkan langkah lain yang lebih baik diambil untuk menghindari jalan buntu tersebut. Selain itu, perlu juga diperhatikan tingkat kecerahan setiap warna bola yang harus diurutkan secara vertikal. Oleh karena itu, dalam tugas akhir ini akan dilakukan


(17)

penelitian terhadap algoritma yang dapat diterapkan untuk mengatasi masalah yang dihadapi dalam permainan Babylon Tower.

1.3. Batasan Masalah

Beberapa batasan masalah pada tugas akhir ini adalah sebagai berikut:

1. Permainan ini hanya dapat dimainkan oleh satu orang pemain (single player). 2. Babylon Tower yang digunakan berukuran 6 x 6.

3. Babylon Tower akan diacak oleh program sebelum dimainkan.

4. Babylon Tower dapat dijalankan oleh user atau dijalankan oleh AI untuk menemukan solusi.

1.4. Tujuan Penelitian

Tujuan penelitian ini adalah untuk menerapkan algoritma column by column dan depth-first search untuk mengurutkan setiap bola dengan warna yang sama pada kolom yang sama serta mengurutkan setiap kolom berdasarkan tingkat kecerahan warna bola pada setiap kolom Babylon Tower.

1.5. Manfaat Penelitian

Manfaat dari penelitian ini adalah:

1. Sebagai sarana untuk mempelajari cara menyelesaikan permainan Babylon Tower. 2. Untuk menambah ilmu pengetahuan penulis tentang algoritma column by column

dan depth-first search yang diterapkan dalam permainan Babylon Tower.

3. Sebagai referensi untuk penelitian selanjutnya yang berhubungan dengan penyelesaian permainan puzzle lainnya.


(18)

4

1.6. Metodologi Penelitian

Tahapan-tahapan yang akan dilakukan pada pelaksanaan penelitian adalah sebagai berikut:

1. Studi Literatur

Studi Literatur dilakukan dalam rangka pengumpulan bahan referensi mengenai permainan Babylon Tower, game architecture, struktur data dan algoritma dalam game, path finding, blind search, dan kecerdasan buatan dalam game.

2. Analisis Permasalahan

Pada tahap ini dilakukan analisis terhadap bahan referensi yang telah dikumpulkan pada tahap sebelumnya untuk mendapatkan pemahaman mengenai algoritma yang diterapkan dalam permainan Babylon Tower, yakni algoritma column by column dan depth-first search.

3. Implementasi

Pada tahap ini dilakukan perancangan terhadap game mechanic yang digunakan dalam permaian Babylon Tower serta dilakukan implementasi algoritma column by column dan depth-first search dalam mengatasi masalah dalam permainan Babylon Tower.

4. Evaluasi dan Analisis Hasil

Pada tahap ini dilakukan evaluasi serta analisis terhadap hasil yang didapatkan melalui implementasi algoritma column by column dan depth-first search dalam mengatasi masalah dalam permainan Babylon Tower.

5. Dokumentasi dan Pelaporan

Pada tahap ini dilakukan dokumentasi dan penyusunan laporan hasil evaluasi dan analisis serta implementasi algoritma column by column dan depth-first search dalam mengatasi masalah dalam permainan Babylon Tower.


(19)

1.7. Sistematika Penulisan

Sistematika penulisan pada skripsi ini terdiri dari lima bab yaitu sebagai berikut:

Bab 1: Pendahuluan

Bab ini berisi latar belakang, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, metodologi penelitian, serta sistematika penelitian.

Bab 2: Landasan Teori

Bab ini berisi kumpulan teori-teori yang berkaitan dengan penelitian tugas akhir ini. Teori-teori yang berhubungan dengan permainan Babylon Tower, game architecture, struktur data dan algoritma dalam game, path finding, blind search, serta kecerdasan buatan dalam game akan dibahas pada bab ini.

Bab 3: Analisis dan Perancangan

Bab ini membahas analisis dan penerapan algoritma column by column dan depth-first search untuk mengatasi masalah-masalah dalam permainan Babylon Tower. Pada bab ini akan dijabarkan arsitektur umum yang digunakan.

Bab 4: Implementasi dan Pengujian

Bab ini berisi pembahasan tentang implementasi dari analisis dan perancangan yang telah dijabarkan pada bab 3. Selain itu, hasil yang didapatkan dari pengujian yang dilakukan terhadap implementasi yang dilakukan juga dijabarkan pada bab ini.

Bab 5: Kesimpulan dan Saran

Bab ini berisi ringkasan serta kesimpulan dari rancangan yang telah dibahas pada bab 3, serta hasil penelitian yang dijabarkan pada bab 4. Bagian akhir dari bab ini akan berisi saran-saran yang diajukan untuk pengembanagan penelitian selanjutnya.


(20)

BAB 2

LANDASAN TEORI

Bab ini membahas tentang teori penunjang serta penelitian sebelumnya yang berhubungan dengan permainan Babylon Tower serta algoritma-algoritma yang dapat diterapkan untuk mengatasi permasalahan dalam permainan puzzle.

2.1. Babylon Tower

Babylon Tower merupakan sliding piece puzzle yang terdiri dari enam buah cakram yang disusun menumpuk ke atas menyerupai menara, dimana setiap cakramnya dapat diputar terhadap poros tengahnya. Di sepanjang sisi setiap cakram terdapat enam kolom bola kecil dengan enam jenis warna yang berbeda. Tingkat kecerahan warna bola pada setiap kolom semakin berkurang dari bawah ke atas, dimana bola-bola yang paling cerah terletak pada cakram terbawah dan bola-bola yang paling pucat terletak pada cakram teratas. Pada cakram terbawah terdapat sebuah pegas yang memungkinkan salah satu dari dua bola yang terletak saling berseberangan untuk ditekan masuk ke dalam cakram menghasilkan sebuah celah yang dapat ditempati oleh sebuah bola yang lain. Celah yang terdapat pada suatu kolom memungkinkan bola-bola yang terdapat pada kolom tersebut dapat digeser naik atau turun ke cakram yang lain, sehingga celah tersebut juga berpindah ke cakram yang lain. Dengan memutar cakram, bola-bola serta celah yang terdapat pada cakram tersebut berpindah ke kolom yang lain. Salah satu metode yang dapat digunakan untuk menyelesaikan Babylon Tower adalah column by column (Scherpuis, 2015).

Berikut ini adalah langkah-langkah untuk menyelesaikan Babylon Tower menggunakan algoritma column by column:

a. Posisikan setiap bola sehingga pada setiap kolom hanya terdapat bola-bola dengan warna yang sejenis.

i. Tentukan warna bola untuk setiap kolom.


(21)

iii. Cari sebuah bola dari kolom lain yang memiliki warna yang dibutuhkan oleh kolom yang memuat celah.

iv. Geser bola-bola pada kolom yang memuat celah hingga posisi cakram yang memuat celah tepat berada di atas atau di bawah cakram yang memuat bola yang dibutuhkan.

v. Putar cakram yang memuat celah hingga celah tersebut tepat berada di atas atau di bawah posisi bola yang dibutuhkan.

vi. Geser bola yang dibutuhkan ke atas atau ke bawah menutupi celah tersebut. vii. Putar cakram yang memuat bola yang dibutuhkan kembali ke posisi semula,

sehingga bola yang dibutuhkan berada pada kolom sesuai dengan warna yang ditentukan.

viii. Ulangi langkah (ii) sampai (vii) hingga setiap kolom hanya memiliki bola-bola dengan warna yang sejenis.

b. Urutkan posisi bola dari bawah ke atas sesuai dengan tingkat kecerahan warna bola pada setiap kolom, kecuali untuk dua cakram teratas.

i. Tentukan salah satu kolom yang akan diurutkan terlebih dahulu.

ii. Tekan salah satu bola ke dalam cakram untuk membuat sebuah celah pada kolom yang tidak sedang diurutkan.

iii. Tentukan salah satu bola yang belum terurut dan hendak diurutkan.

iv. Geser bola-bola pada kolom yang memuat celah hingga posisi cakram yang memuat celah tepat berada di atas atau di bawah cakram yang memuat bola yang ingin diurutkan.

v. Putar cakram yang memuat celah hingga celah tersebut tepat berada di atas atau di bawah posisi bola yang ingin diurutkan.

vi. Geser bola yang ingin diurutkan ke atas atau ke bawah menutupi celah tersebut.

vii. Putar cakram yang memuat bola yang ingin diurutkan kembali ke posisi semula, sehingga bola tersebut berada dalam urutan yang sesuai.

viii. Ulangi langkah (iii) sampai (vii) untuk mengurutkan empat bola pada empat cakram terbawah. Sedangkan dua bola pada dua cakram teratas boleh dalam keadaan teurut atau tidak.

ix. Keluarkan kembali bola yang ditekan ke dalam cakram.


(22)

8

c. Tukar posisi dua bola yang belum terurut pada dua cakram teratas. i. Hitung jumlah kolom yang belum terurut pada dua bola teratasnya.

ii. Apabila jumlahnya ganjil, putar cakram yang paling atas sejauh 60 derajat. Kemudian ulangi langkah-langkah pada tahap (a) untuk mengembalikan posisi bola pada kolom yang benar.

iii. Apabila jumlahnya sudah genap, tentukan dua kolom yang posisi bolanya ingin ditukar, dan buat sebuah celah pada kolom yang lain.

iv. Lakukan langkah-langkah sesuai dengan diagram berikut untuk menukar posisi dua bola yang belum terurut pada dua cakram teratas.

Diagram tersebut menggambarkan posisi bola pada dua cakram teratas dari tiga kolom yang terlibat, yaitu dua kolom yang posisi bolanya ingin ditukar serta satu kolom lain yang memuat celah. A, a dan B, b masing-masing menyatakan warna bola dimana huruf yang sama menyatakan jenis warna yang sama dengan tingkat kecerahan yang berbeda. Huruf kapital menyatakan warna yang paling pucat. Sedangkan huruf Z menyatakan warna bola dari kolom lain yang memuat celah dan spasi menyatakan sebuah celah. Perlu diperhatikan pula bahwa ketiga kolom tersebut tidak harus terletak berdampingan. Langkah tersebut tetap dapat dilakukan apabila terdapat kolom lain di antara kolom-kolom yang terlibat.

v. Ulangi langkah (iii) sampai (iv) hingga semua posisi bola terurut.

2.2. Game Architecture

Game merupakan simulasi komputer yang bersifat real-time, dinamis dan interaktif, sehingga waktu memainkan peranan yang sangat penting dalam sebuah game (Gregory, 2009). Secara spesifik, game berada dalam kategori yang disebut real-time software application. Real-time software maksudnya adalah aplikasi komputer dimana proses-proses yang terjadi di dalamnya sangat bergantung terhadap waktu. Setiap data yang diproses dalam real-time software akan memiliki kendala terhadap perubahan


(23)

waktu dalam game. Sebagai kesimpulan, game merupakan aplikasi interaktif yang bergantung terhadap waktu, terdiri dari simulator dunia virtual yang mengolah data real-time, menampilkan hasilnya secara visual, serta mengontrol mekanisme sehingga pemain dapat berinteraksi dengan dunia game (Sanchez & Dalmau, 2004).

Setiap real-time software terdiri dari tiga jenis proses yang berjalan dalam waktu yang bersamaan. Yang pertama adalah keadaan (state) dari dunia game yang harus dikomputasi secara konstan. Yang kedua adalah interaksi yang dilakukan oleh pemain terhadap dunia game. Yang ketiga adalah state yang dihasilkan harus dapat disampaikan sebagai output kepada pemain, output dapat berupa tampilan, audio, maupun bentuk output lainnya yang memungkinkan (Sanchez & Dalmau, 2004).

Dalam graphical user interface (GUI) yang sering ditemukan pada sistem operasi Windows atau Macintosh, sebagian besar isi tampilannya bersifat statis. Hanya bagian kecil dari window yang tampilannya secara aktif berubah-ubah pada waktu tertentu. Karena hal tersebut, GUI ditampilkan pada layar dengan teknik yang disebut rectangle invalidation, dimana hanya sebagian kecil dari layar yang isinya berubah yang perlu diubah tampilannya. Game 2D pada awalnya menggunakan teknik yang serupa untuk meminimalisir jumlah pixel yang perlu ditampilkan.

Namun, tampilan grafis pada game 3D real-time diimplementasi dengan cara yang sama sekali berbeda. Seluruh isi yang ditampilkan pada layar akan berubah secara terus menerus ketika pemain bergerak dalam lingkungan 3D, sehingga konsep rectangle invalidation tidak dapat lagi diterapkan. Sebagai gantinya, sebuah ilusi dari gerakan dapat dihasilkan dengan cara yang hampir sama dengan cara menghasilkan ilusi gerakan pada sebuah film, yaitu dengan menampilkan kepada penonton rangkaian gambar diam yang bergantian secara cepat dan berurutan. Untuk menghasilkan tampilan gambar diam yang bergantian secara cepat, dibutuhkan sebuah loop. Dalam real-time software, hal tersebut disebut juga sebagai render loop (Gregory, 2009).

2.3. Struktur Data dan Algoritma dalam Game

Struktur data merupakan unsur penyusun dalam rekayasa perangkat lunak. Setiap aplikasi harus mengatur dan memanipulasi data dengan cara yang benar untuk


(24)

10

melaksanakan tugasnya. Dalam video game modern, data tersebut digunakan untuk menciptakan pengalaman interaktif yang kompleks dimana pemain dapat mengalami berbagai jenis pengalaman yang berbeda (Sherrod, 2007).

2.3.1. Struktur Data dan Algoritma

Sebuah struktur data menyatakan bagaimana data disusun dalam memori dan dapat dioperasikan menggunakan berbagai jenis algoritma. Salah satu struktur data paling dasar yang digunakan secara umum dalam pemrograman adalah array. Sebuah array termasuk struktur data karena menyatakan bagaimana data disusun dalam memori dan dapat dioperasikan dengan berbagai jenis algoritma, seperti insertion, deletion, searching, sorting terhadap array.

Struktur data juga dapat dipandang sebagai sebuah struktur yang merepresentasikan berbagai jenis objek nyata. Struktur data juga dapat berupa sekumpulan objek yang berisi objek-objek lainnya. Sedangkan algoritma merupakan barisan kode program yang memanipulasi data dalam struktur data (Sherrod, 2007).

2.3.2. Struktur Data dalam Game

Struktur data membentuk fondasi dari berbagai jenis teknik yang diterapkan dalam video game modern dan merupakan elemen penting untuk menciptakan berbagai jenis pengalaman bermain yang diharapkan oleh pemain. Struktur data sendiri merupakan susunan dari data di dalam memori, tetapi ketika dikombinasikan dengan algortima-algoritma tertentu, data tersebut dapat diproses serta digunakan secara efisien dan efektif. Struktur data dan algoritma dalam pengembangan game sering digunakan untuk mempercepat proses yang terjadi terhadap data yang dibutuhkan dalam game (Sherrod, 2007).

Sangat jarang sebuah game hanya membutuhkan variabel tunggal untuk menyimpan suatu data. Dalam game, selalu dibutuhkan struktur data untuk menyimpan sekumpulan elemen yang sifatnya mirip. Terdapat berbagai jenis struktur data yang berbeda yang dapat digunakan untuk mencapai hal tersebut. Struktur data yang paling sederhana adalah static array yang memungkinkan developer untuk


(25)

menyimpan sekumpulan elemen yang tidak akan berubah selama siklus hidup game. Selanjutnya terdapat linked list yang merupakan pengembangan dari static array, dimana terdapat beberapa kelebihan yang memungkinkan ukuran list untuk bertambah maupun berkurang secara dinamis. Selain itu, terdapat pula tree yang merupakan struktur data yang terdiri dari sekumpulan node, dimana setiap node menyimpan informasi yang relevan serta memiliki pointer yang menghubungkan node yang satu dengan node lainnya dalam sebuah tree (Sanchez & Dalmau, 2004).

Running time dari sebuah algoritma atau operasi struktur data secara khusus bergantung pada sejumlah faktor. Apabila sebuah algoritma diterapkan dalam sebuah game, dapat dipelajari running time-nya dengan mengeksekusi game tersebut dengan input yang bervariasi dan mencatat lama waktu yang dibutuhkan dalam setiap eksekusi. Pengukuran seperti itu dapat dilakukan secara akurat dengan menggunakan fungsi perhitungan waktu eksekusi yang telah tersedia dalam sistem pada bahasa pemrograman atau sistem operasi dimana algoritma tersebut ditulis (Goodrich & Tamassia, 2015).

2.4. Path Finding

Untuk menyelesaikan suatu masalah ketika tidak terdapat algortima yang jelas untuk melakukan perhitungan terhadap solusi yang valid, maka dapat digunakan metode path finding. Terdapat dua jenis pendekatan path finding yang saling berhubungan yaitu game tree dan search tree. Kedua jenis pendekatan tersebut bergantung kepada struktur umum yang disebut state tree, dimana root node merepresentasikan keadaan (state) awal serta percabangannya merepresentasikan langkah-langkah yang memungkinkan yang mengubah state sebelumnya menjadi state yang baru (Heineman, et al, 2009).

Tree dapat digunakan untuk menjaga hirarki data, serta beberapa jenis tree juga memiliki kemampuan untuk melakukan proses pencarian secara cepat, menyisipkan data secara cepat, menghapus data secara cepat, dan mengubah ukuran tree secara cepat. Tree juga mampu menyimpan data yang telah terurut secara mudah (Sherrod, 2007).


(26)

12

2.4.1. Game Tree

Game tree digunakan dalam permaian yang terdiri dari dua orang pemain yang menentukan langkahnya secara bergantian serta berusaha untuk mengalahkan pemain lainnya. Terdapat banyak kemungkinan state yang dapat terjadi dimana salah satu pemain dapat memenangkan permainan. Selain itu terdapat juga beberapa kemungkinan state dimana permainan berakhir imbang atau tidak terdapat pemenang. Algoritma path finding akan memaksimalkan peluang seorang pemain untuk memenangkan permainan atau memaksa permainan untuk berakhir imbang (Heineman, et al, 2009).

Turn-based game adalah salah satu jenis game yang dapat direpresentasikan sebagai game tree, khusunya board game. Gambar 2.1 menunjukkan bagian dari game tree untuk game Tic-Tac-Toe. Setiap node merepresentasikan posisi papan dan setiap cabang merepresentasikan salah satu langkah yang mungkin diambil.

Gambar 2.1. Game tree pada Tic-Tac-Toe (Millington & Funge, 2009)

Setiap pemain melangkah melalui salah satu node dari setiap level pada game tree mulai dari node yang paling atas (root). Karena Tic-Tac-Toe termasuk turn-based game, maka posisi papan hanya akan berubah apabila salah satu pemain melangkah. Jumlah cabang dari setiap papan (node) sama dengan jumlah langkah yang mungkin diambil oleh pemain. Dalam game Tic-Tac-Toe, jumlah cabangnya adalah sembilan untuk pemain yang melangkah pada putaran pertama, kemudian delapan untuk pemain selanjutnya, dan seterusnya. Dalam kebanyakan game lainnya, jumlah cabang dari setiap node dapat mencapai ratusan bahkan ribuan. Hal ini dikarenakan terdapat


(27)

banyak sekali langkah berbeda yang mungkin diambil oleh setiap pemain. Beberapa posisi papan dapat mencapai kondisi dimana tidak terdapat lagi langkah yang memungkinkan. Kondisi ini disebut terminal position dan menyatakan akhir dari sebuah permainan (Millington & Funge, 2009).

2.4.2. Search Tree

Search tree digunakan dalam permainan dimana permain tunggal diberikan tugas untuk menyelesaikan permainan, dimulai dari keadaan awal yang diberikan, dengan serangkaian langkah yang dapat diambil. Dalam kebanyakan kasus, terdapat tepat satu goal state yang hendak dicapai.

Gambar 2.2. Search tree pada permainan Babylon Tower

Contoh game yang dapat direpresentasikan berupa search tree adalah Babylon Tower. Untuk memulai permainan Babylon Tower, salah satu bola harus ditekan masuk untuk menciptakan sebuah celah. Celah yang terdapat pada Babylon Tower dapat dipindahkan dengan cara menggeser bola-bola pada kolom yang memiliki celah atau memutar cakram yang memiliki celah.


(28)

14

Tujuan dari permainan Babylon Tower adalah untuk menentukan langkah dari keadaan awal Babylon Tower yang telah diacak untuk mencapai goal state. Search tree dari bagian permainan Babylon Tower dapat digambarkan seperti pada gambar 2.2. Dalam search tree, tidak terdapat pemain lawan yang mengambil langkah, tetapi search tree memiliki kemiripan dengan game tree. Search tree juga memiliki keadaan awal (initial state) serta serangkaian langkah yang mengubah state selama permainan berlangsung hingga ditemukan goal state (Heineman, et al, 2009).

2.5. Blind Search

Search merupakan hal yang umum dan sering ditemukan dalam kecerdasan buatan, yang merupakan model teoritis yang diterapkan dalam problem solving, aplikasi, dan bahasa pemrograman (Luger & Stubblefield, 2009).

Blind search disebut juga Uninformed search merupakan strategi pencarian solusi dimana dalam proses pencariannya, tidak terdapat informasi tambahan tentang keadaan yang akan terjadi selanjutnya dari suatu langkah yang diambil. Blind search hanya mampu men-generate langkah-langkah selanjutnya dan menentukan apakah solusi sudah tercapai atau belum dari suatu langkah yang diambil. Blind search tidak mampu menentukan langkah mana yang lebih menguntungkan atau lebih menjanjikan untuk mencapai solusi (Russell & Norvig, 2010). Beberapa algoritma pencarian yang termasuk dalam blind search antara lain breadth-first search, depth-first search, iterative deepening search dan sebagainya.

2.5.1 Breadth-First Search

Breadth-first search merupakan strategi pencarian sederhana yang dilakukan dengan men-generate terlebih dahulu node-node baru (successor) yang merupakan cabang dari node pertama (root). Kemudian masing-masing node baru tersebut akan men-generate lagi successor-nya, dan seterusnya. Node yang akan di-generate successor -nya terlebih dahulu adalah node yang belum memiliki successor dan berada pada tingkat kedalaman yang paling dangkal.


(29)

Breadth-first search akan selalu menemukan solusi apabila pencarian dilakukan pada pohon pencarian yang memuat solusi pada salah satu node pada tingkat kedalaman d yang terbatas serta memiliki branching factor b yang terbatas. Ketika node yang memuat solusi di-generate untuk pertama kalinya, maka dapat dipastikan bahwa node tersebut merupakan solusi yang paling singkat. Hal ini dikarenakan semua node pada tingkat kedalaman yang lebih dangkal telah di-generate terlebih dahulu dan tidak menemui solusi yang diinginkan. Solusi yang ditemukan merupakan solusi yang optimal apabila biaya (cost) yang dibutuhkan tidak berkurang untuk melalui node pada kedalaman yang lebih dalam (Russell & Norvig, 2010). Contoh breadth-first search yang diterapkan pada permainan Babylon Tower dapat dilihat pada gambar 2.3.

Gambar 2.3. Breadth-first search pada permainan Babylon Tower

Namun, breadth-first search memiliki kelemahan dari segi penggunaan memori. Apabila proses pencarian dilakukan terhadap pohon pencarian yang setiap node-nya memiliki jumlah successor sebanyak b, pada root-nya akan di-generate node baru sebanyak b pada kedalaman pertama. Setiap node yang baru akan men-generate lagi node-nya masing-masing sebanyak b, sehingga pada kedalaman kedua terdapat node sebanyak . Setiap node baru pada kedalaman kedua akan men-generate lagi node sebanyak b, menghasilkan node sebanyak pada kedalaman


(30)

16

ketiga, dan seterusnya. Apabila solusi pencarian terdapat pada kedalaman d, maka dalam kondisi terburuk (worst case), dimana solusi terdapat pada node terakhir pada kedalaman d, jumlah node yang di-generate adalah

Jumlah memori yang dibutuhkan untuk menjalankan algoritma breadth-first search menjadi masalah yang lebih besar dibandingkan waktu yang diperlukan (Russel & Norvig, 2010). Jumlah memori yang dibutuhkan juga merupakan kelemahan yang paling besar dalam algoritma breadth-first search. Breadth-first search yang diterapkan dalam kebanyakan kasus akan menghabiskan memori yang tersedia dalam waktu yang singkat (Korf, 1985). Namun breadth-first search juga membutuhkan waktu yang cukup lama untuk melakukan pencarian karena lama waktu yang diperlukan untuk mencari semua node pada setiap tingkat kedalaman akan mengalami peningkatan secara eksponensial karena jumlah node yang juga meningkat secara eksponensial (Russell & Norvig, 2010).

2.5.2. Depth-First Search

Depth-first search mampu menghindari masalah keterbatasan memori yang terjadi pada algoritma breadth-first search (Korf, 1085). Depth-first search akan selalu melalui salah satu cabang dari pohon pencarian dan mengikutinya hingga menemui solusi. Apabila cabang yang dilalui tidak menemui solusi, maka pencarian akan mundur satu langkah dan dilanjutkan dengan cabang lainnya (Luger, 2009).

Depth-first search akan selalu men-generate node-node baru dari node yang paling dalam pada pohon pencarian walaupun masih terdapat node lain pada kedalaman yang lebih dangkal yang belum memiliki successor. Pencarian akan langsung dilakukan hingga tingkat yang paling dalam dimana node pada kedalaman tersebut tidak memiliki successor-nya lagi. Apabila solusi belum ditemukan, pencarian akan dilanjutkan pada node terdalam yang masih memiliki successor lain yang belum pernah dicari. Contoh depth-first search yang diterapkan pada permainan Babylon Tower dapat dilihat pada gambar 2.4.


(31)

Gambar 2.4. Depth-first search pada permainan Babylon Tower

Lama waktu yang dibutuhkan dalam depth-first search dibatasi oleh ukuran kedalaman pohon pencarian. Depth-first search mungkin saja men-generate semua node dalam pohon pencarian sebanyak , dimana m merupakan kedalaman


(32)

18

maksimum dari pohon pencarian. Nilai m bisa jauh lebih besar daripada nilai d (kedalaman minimum yang memuat solusi) atau tak terhingga apabila pohon pencarian tidak memiliki kedalaman yang terbatas (setiap node selalu memiliki successor).

Depth-first search memiliki kelebihan dibandingkan breadth-first search dalam hal penggunaan memori. Pohon pencarian pada depth-first search hanya perlu menyimpan jalur dari root menuju node pada kedalaman yang sedang dijelajahi serta node-node lain yang belum diekspansi pada kedalaman yang sama. Setiap node yang sudah pernah dijelajahi dapat langsung dihapus dari memori. Pada pohon pencarian dengan branching factor b dan kedalaman maksimum m, depth-first search memerlukan memori untuk menampung node sebanyak (Russell & Norvig, 2010).

2.6. Kecerdasan Buatan dalam Game

Salah satu tantangan terbesar dari kecerdasan buatan adalah untuk menciptakan general intelligence, sebuah agent yang mampu unggul dalam banyak bidang. Ruang lingkup kecerdasan buatan terutama bertujuan untuk menciptakan agent yang mampu membuat keputusan yang baik. Dalam konteks game, hal tersebut saling relevan, dimana pemain harus membuat banyak keputusan yang tepat untuk mencapai hasil yang diinginkan, seperti untuk mengalahkan lawan atau mendapatkan skor tertinggi (Levine, et al. 2013).

Pac-Man [Midway Games West, Inc., 1979] merupakan salah satu game pertama yang menerapkan kecerdasan buatan (Artificial Intelligence) di dalam game -nya. Game Pac-Man tersebut masih menggunakan AI yang sangat sederhana untuk menentukan arak gerak dari keempat monster-nya (ghost). Setiap monster tersebut dapat bergerak mendekati (mengejar) pemain atau menjauhi pemain. AI dalam game tidak mengalami banyak perubahan hingga pertengahan dekade 1990-an. Perkembangan AI dalam game pada masa tersebut hanya mengalami sedikit kemajuan dibandingkan dengan AI yang diterapkan dalam game Pac-Man. Sejak pertengahan dekade 1990-an, AI mulai menjadi salah satu unsur yang diperhatikan dan dikembangkan oleh perusahaan pengembang game.


(33)

Goldeneye 007 [Rare Ltd., 1997] berhasil menunjukkan kepada gamer bahwa AI dapat meningkatkan pengalaman bermain yang ditawarkan dalam sebuah game. Goldeneye 007 menambahkan sebuah sistem simulasi yang disebut sense simulation system, yang memungkinkan karakter untuk merespon terhadap karakter-karakter lain di sekitarnya. Creatures [Cyberlife Technology Ltd., 1997] menerapkan AI yang sangat kompleks di dalam game-nya, yaitu menggunakan neural network untuk setiap karakternya.

Saat ini telah terdapat beraneka ragam jenis AI yang diterapkan dalam game. Jenis AI yang diterapkan dalam suatu game berbeda-beda tergantung pada genre game itu sendiri. Misalnya dalam game balapan, AI yang diterapkan mampu memperhitungkan jalur tersingkat yang mungkin dilalui dalam arena balap. Bahkan saat ini masih terdapat banyak genre game yang masih menggunakan AI yang sederhana seperti yang digunakan dalam Pac-Man karena memang itulah AI yang paling sesuai untuk game tersebut.

AI dalam kebanyakan game saat ini dialamatkan pada tiga kebutuhan dasar sebagai berikut:

i. kemampuan untuk menggerakan karakter.

ii. kemampuan untuk membuat keputusan, seperti langkah mana yang akan diambil.

iii. kemampuan untuk berpikir secara taktis dan strategis. (Millington & Funge, 2009).

2.7. Penelitian Terdahulu

Banyak penelitian yang telah dilakukan untuk menyelesaikan berbagai jenis game puzzle dengan menggunakan berbagai jenis algoritma. Korf & Felner (2007) mengembangkan beberapa algoritma pencarian yang bersifat heuristik untuk mengatasi masalah dalam permainan four-peg Towers of Hanoi. Beberapa algoritma tersebut antara lain frontier search, disk-based search, parallel processing, pattern database heuristic dan breadth-first heuristic search. Dengan mengkombinasikan algoritma-algoritma tersebut, Korf dan Felner berhasil menemukan solusi yang optimal untuk four-peg Towers of Hanoi dengan jumlah cakram hingga 30 buah.


(34)

20

Jing et al. (2009) melakukan penelitian terhadap metode yang dapat diterapkan dalam permainan Japanese puzzle atau dikenal juga sebagai nonogram. Untuk menyelesaikan Japanese puzzle secara manual, tahap pertama dapat dilakukan secara logika dengan menentukan cell yang akan diwarnai. Kemudian, sisanya dapat diselesaikan melalui tebakan atau dengan menguji satu-persatu cell mana saja yang perlu diwarnai. Metode yang dapat diterapkan dalam Japanese puzzle tersebut terdiri dari dua tahap. Pada tahap pertama, beberapa aturan logika akan dijalankan untuk menentukan cell-cell yang akan diwarnai. Pada tahap kedua, algoritma depth-first search akan dijalankan untuk menyelesaikan cell-cell yang tersisa. Penelitian terhadap Japanese puzzle juga pernah dilakukan oleh Stefani et al. (2012) dengan menggunakan metode rule-based dan algoritma best-first search. Dari hasil penelitian tersebut, semakin besar ukuran puzzle yang digunakan, maka semakin lama pula waktu yang dibutuhkan untuk menyelesaikan puzzle tersebut.

Panov & Koceski (2014) menggunakan pendekatan heuristik yang diterapkan dalam permainan Kakuro. Algoritma yang digunakan dalam penelitian ini adalah Self-Adapting Harmony Search (SAHS). Hasil penelitian ini menunjukkan bahwa SAHS mampu menemukan bilangan-bilangan yang dapat ditempatkan pada posisi yang benar pada puzzle Kakuro dengan penggunaan waktu yang efisien. Algoritma SAHS dapat ditingkatkan apabila dilakukan tahap perhitungan terlebih dahulu untuk menentukan kombinasi penjumlahan bilangan yang dapat menghasilkan bilangan yang diinginkan.

Abdel-Raouf et al. (2014) menggunakan algoritma chaotic harmony search untuk mengembangkan algoritma flower pollination yang diterapkan dalam permainan Sudoku. Dalam penelitian ini, algoritma tersebut diuji dengan sekumpulan soal Sudoku dengan tingkat yang sulit. Dari hasil pengujian tersebut, algoritma yang digunakan mampu menemukan jalan yang lebih baik untuk menemukan solusi.


(35)

BAB 3

ANALISIS DAN PERANCANGAN

Bab ini membahas tentang penerapan algoritma column by column dan depth-first search untuk mengatasi permasalahsan dalam permainan Babylon Tower. Pada bab ini dijabarkan juga arsitektur umum yang digunakan.

3.1. Arsitektur Umum

Untuk merancang aplikasi permainan Babylon Tower, diperlukan arsitektur yang berfungsi untuk mengatur keseluruhan proses yang berlangsung selama aplikasi permainan Babylon Tower berjalan. Pertama-tama, semua model 3D yang dibutuhkan ditampilkan terlebih dahulu. Model 3D yang dibutuhkan terdiri dari enam buah model cakram (disc) serta 36 buah model bola. Selanjutnya akan disediakan struktur data yang berfungsi untuk merepresentasikan setiap object yang terdapat dalam Babylon Tower. Selama permainan berlangsung, struktur data tersebut akan digunakan dan user dapat berinteraksi dengan cara menyentuh layar smartphone sebagai input. Input yang diberikan oleh user selanjutnya akan diolah untuk menentukan gerakan apa yang dihasilkan dari input tersebut. Setiap gerakan yang dilakukan oleh user akan disimpan dalam sebuah list supaya gerakan tersebut dipanggil kembali apabila user hendak melakukan proses undo atau redo. Apabila user memilih untuk menjalankan AI, maka algoritma column by column akan dieksekusi. Algoritma tersebut terdiri dari tiga tahapan utama. Tahap pertama adalah mengelompokkan bola-bola dengan warna yang sejenis pada kolom yang sama (tahap sorting). Tahap sorting dikombinasikan dengan algoritma depth-first search. Tahap kedua adalah menukar posisi bola pada setiap kolom hingga warna bola terurut berdasarkan tingkat kecerahannya (tahap swapping). Pada tahap swapping, warna bola pada dua baris teratas tidak harus terurut berdasarkan tingkat kecerahannya. Warna bola pada dua baris teratas yang belum terurut akan dilanjutkan pada tahap ketiga (tahap parity). Setiap langkah yang dilakukan selama AI dijalankan juga akan disimpan dalam list.


(36)

22

Metode yang diajukan pada penelitian ini dapat dilihat pada gambar 3.1 yang menunjukkan arsitektur umum dari rangkaian langkah yang dilakukan untuk merancang serta menerapkan algoritma column by column dan depth-first search dalam permainan Babylon Tower.


(37)

3.2. Modelling

Model 3D yang dibangun adalah bagian-bagian yang terdapat pada permainan Babylon Tower, yang terdiri dari enam buah cakram (disc) dan 36 buah bola. Model 3D tersebut dibangun menggunakan software Blender dan selanjutnya di-import ke dalam softwareUnity.

3.2.1. Model Cakram

Sebuah Babylon Tower terdiri dari enam buah cakram (disc), dimana empat buah cakram yang posisinya diapit oleh dua cakram yang lain memiliki bentuk yang sama. Oleh karena itu, terdapat tiga jenis model cakram yang perlu dibangun dari software Blender yaitu model cakram yang terletak pada posisi paling atas, model cakram yang terletak pada posisi paling bawah, serta model cakram yang posisinya diapit oleh dua cakram yang lain.

Model cakram yang terletak pada posisi paling atas dibangun dari sebuah model tabung dengan ukuran diameter 1,9 satuan dan tinggi 0,8 satuan. Bagian atas dari model tabung tersebut dibentuk sedikit melengkung. Selanjutnya ditambahkan enam buah celah pada sekeliling model tabung tersebut dengan jarak antar celah yang berdekatan selalu sama yaitu 60° terhadap sumbu-Y dari pusat tabung. Ukuran celah yang dibuat disesuaikan dengan ukuran model bola yang akan dibuat supaya setiap celah tersebut dapat ditempati oleh sebuah bola. Celah dibuat terbuka pada bagian bawahnya supaya bola yang berada pada celah tersebut dapat bergeser menuju cakram di bawahnya, sedangkan bagian atas celah dibuat tertutup dengan bentuk setengah lingkaran. Model cakram untuk posisi paling atas dapat dilihat pada gambar 3.2.

Model cakram yang terletak pada posisi paling bawah mula-mula dibangun dengan cara yang sama ketika membangun model cakram untuk posisi paling atas, sehingga model cakram pada posisi paling bawah dapat dibangun dengan melanjutkan model cakram pada posisi paling atas yang telah dibangun sebelumnya. Dari model cakram yang telah dibangun sebelumnya (gambar 3.2), model diputar 180° terhadap sumbu-Z dari pusat tabung sehingga bagian celah yang terbuka menghadap ke atas. Selanjutnya dibuat lubang yang menghubungkan dua celah yang terletak saling


(38)

24

berseberangan. Salah satu di antara dua bola yang terletak pada celah yang terhubung dengan lubang dapat ditekan masuk menuju ke dalam tengah-tengah lubang. Model cakram untuk posisi paling bawah dapat dilihat pada gambar 3.3.

Gambar 3.2. Model cakram (disc) pada posisi paling atas

Gambar 3.3. Model cakram (disc) pada posisi paling bawah

Model cakram yang posisinya diapit oleh dua cakram lainnya dibangun dari sebuah model tabung dengan ukuran diameter 1,9 satuan dan tinggi 0,5 satuan. Selanjutnya ditambahkan enam buah celah pada sekeliling model tabung tersebut dengan jarak antar celah yang berdekatan selalu sama. Celah yang dibuat pada tabung tersebut terbuka pada bagian atas dan bawahnya supaya memungkinkan bola yang berada pada celah tersebut untuk digeser ke atas maupun digeser ke bawah. Model cakram untuk posisi yang diapit oleh dua cakram yang lain dapat dilihat pada gambar 3.4.


(39)

Gambar 3.4. Model cakram (disc) yang posisinya diapit oleh dua cakram yang lain

3.2.2. Model Bola

Dalam sebuah Babylon Tower, terdapat 36 buah bola yang terdiri dari enam jenis warna berbeda (hitam, kuning, merah, hijau, cokelat, biru). Setiap jenis warna terdiri dari enam buah bola dengan tingkat kecerahan yang berbeda-beda, dimulai dari warna bola yang paling cerah hingga yang paling pucat.

Model bola juga dibuat menggunakan software Blender dengan ukuran diameter 0,5 satuan. Dalam software Unity, setiap model bola diatur warnanya sesuai dengan kebutuhan. Ketiga pulah enam buah bola yang digunakan dapat dilihat pada gambar 3.5.


(40)

26

3.2.3. Model Babylon Tower

Dalam software Unity, model-model yang telah dibangun disusun sedemikian rupa sehingga menempati posisinya masing-masing seperti yang dapat dilihat pada gambar 3.6. Model cakram pada posisi paling bawah diletakkan pada koordinat pusat (ketiga sumbu koordinat XYZ bernilai 0). Model cakram yang terletak tepat diatas cakram terbawah diletakkan pada koordinat dengan sumbu-Y yang bernilai 0,5 lebih besar dari cakram di bawahnya, sedangkan koordinat sumbu-X dan sumbu-Z tetap bernilai 0. Untuk model cakram selanjutnya juga diletakkan dengan aturan yang sama hingga model cakram teratas diletakkan pada koordinat dengan sumbu-Y yang bernilai 2,5.

Gambar 3.6. Babylon Tower dalam Model 3D

Setiap model bola yang berada pada sebuah cakram terletak pada koordinat sumbu-Y yang sama dengan koordinat sumbu-Y dari cakram yang ditempatinya. Bola yang terletak pada kolom pertama diletakkan pada koordinat sumbu-X yang bernilai 0 dan koordinat sumbu-Z yang bernilai 0,86. Bola yang terletak pada kolom kedua terletak pada koordinat yang sama dengan koordinat dari bola yang terletak pada kolom pertama baris yang sama, tetapi dengan rotasi sejauh 60° pada sumbu-Y terhadap pusat cakram yang ditempatinya. Untuk bola-bola pada kolom selanjutnya juga diletakkan pada koordinat yang sama dengan koordinat dari bola pada kolom pertama baris yang sama dengan rotasi sejauh kelipatan 60° pada sumbu-Y terhadap pusat cakram yang ditempatinya.


(41)

3.3. Struktur Data

Aplikasi permainan Babylon Tower yang dibangun mampu merepresentasikan setiap elemen object yang terdapat dalam Babylon Tower disertai dengan fungsi-fungsi dasarnya. Selain itu, aplikasi yang dibangun juga mampu mendeteksi input berupa sentuhan pada layar smartphone dari user serta menentukan gerakan yang dihasilkan dari input tersebut.

Untuk merepresentasikan setiap object yang terdapat dalam permainan Babylon Tower secara jelas, maka perlu dibuat class untuk setiap jenis object yang ada. Secara umum, jenis object yang digunakan dapat dikelompokkan menjadi dua kelompok besar yaitu disc dan ball. Selain itu, perlu juga dibuat sebuah class untuk menampung informasi tentang posisi bola yang terdapat di dalam Babylon Tower, yaitu inner gap. Pada akhirnya, diperlukan sebuah class yang berfungsi untuk menampung sekaligus mengatur setiap object yang terdapat dalam sebuah Babylon Tower.

3.3.1. Ball

Ball merupakan elemen terkecil dalam sebuah Babylon Tower sekaligus elemen yang dapat menempati posisi yang sangat beragam. Pada class Ball, terdapat beberapa variabel yang dapat dilihat pada tabel 3.1.

Tabel 3.1. Daftar variabel pada classBall

Nama

variabel Tipe data Kegunaan

gameObject GameObject Menyimpan model 3D dan posisi bola

color int Menyimpan sebuah bilangan yang menyatakan warna bola

brightness int

Menyimpan sebuah bilangan yang menyatakan tingkat kecerahan dari

warna bola

Nilai brightness berkisar dari 0 sampai 5, dimana 0 menyatakan warna yang paling pucat dan 5 menyatakan warna yang paling cerah.


(42)

28

Selain itu, pada classBall juga terdapat sebuah variabel static dengan tipe data array dari string yang menyimpan nama-nama warna bola. Daftar index array beserta warna bolanya dapat dilihat pada tabel 3.2.

Tabel 3.2. Nama-nama warna bola dalam array

Index Color Name

0 Red

1 Brown

2 Black

3 Yellow

4 Blue

5 Green

Method-method yang terdapat dalam class Ball berfungsi untuk mengakses data yang tersimpan dalam setiap variabel yang terdapat dalam class Ball oleh class yang lain.

3.3.2. Disc

Disc menempati posisi baris yang tidak berubah dalam sebuah Babylon Tower, yang artinya setiap disc tidak dapat berpindah posisi dari baris atas ke baris bawah maupun sebaliknya. Setiap disc menyimpan daftar enam buah object ball yang sedang berada pada disc tersebut. Pada class Disc, terdapat beberapa variabel yang dapat dilihat pada tabel 3.3. Nilai disc berkisar dari 0 sampai 5, dimana 0 menyatakan disc berada pada posisi paling atas dan 5 menyatakan disc berada pada posisi paling bawah.

Posisi setiap ball dalam sebuah disc dapat berubah ketika disc tersebut diputar, sehingga perlu disediakan method dalam class Disc yang berfungsi untuk memindahkan posisi setiap ball yang terdapat dalam disc apabila disc tersebut diputar. Selain method tersebut, terdapat pula method-method yang berfungsi untuk mengakses data yang tersimpan dalam setiap variabel dalam class Disc oleh class yang lain.


(43)

Tabel 3.3. Daftar variabel pada class Disc

Nama

variabel Tipe data Kegunaan

gameObject GameObject Menyimpan model 3D dan posisi disc

balls Ball[] Menyimpan semua object ball yang terdapat pada disc

row int

Menyimpan sebuah bilangan yang menyatakan posisi baris yang ditempati

oleh disc. Baris terbawah diwakili dengan nilai 0 hingga baris teratas

diwakili dengan nilai 5

3.3.3. Inner Gap

Inner Gap berfungsi untuk menyimpan informasi tentang ball yang sedang berada di dalam Babylon Tower. Dalam classInner Gap, terdapat variabel yang berfungsi untuk menyimpan object ball yang sedang berada di dalam Babylon Tower. Selain itu, terdapat pula variabel yang berfungsi untuk menyimpan bilangan yang menyatakan posisi kolom dari bola yang berada di dalam Babylon Tower.

Pada class Inner Gap juga terdapat method yang berfungsi untuk memindahkan posisi bola ketika disc yang berada pada posisi paling bawah diputar. Selain itu, terdapat pula method-method yang berfungsi untuk mengakses serta menyalin data yang tersimpan dalam setiap variabel dalam class Inner Gap oleh class yang lain.

3.3.4. Babylon Tower

Babylon Tower berfungsi untuk menyimpan dan mengatur setiap elemen yang terdapat di dalam Babylon Tower tersebut. Oleh karena itu, pada class Babylon Tower diperlukan variabel yang berfungsi untuk menyimpan setiap disc yang terdapat dalam Babylon Tower serta variabel untuk menyimpan bola yang sedang berada di dalam Babylon Tower. Pada keadaan awal, variabel-variabel yang terdapat dalam class Babylon Tower dapat dilihat pada tabel 3.4.


(44)

30

Tabel 3.4. Daftar variabel pada class Babylon Tower

Nama variabel

Tipe data Kegunaan

discs Disc[] Menyimpan semua object disc yang terdapat pada Babylon Tower

innerGaps InnerGap[] Menyimpan semua object ball yang ditekan ke dalam Babylon Tower Pada class Babylon Tower terdapat method yang berfungsi untuk memutar disc, menekan masuk bola ke dalam disc yang berada pada posisi paling bawah, mengeluarkan kembali bola yang telah ditekan ke dalam Babylon Tower, menggeser bola-bola pada kolom yang sama, serta mengacak posisi bola ketika Babylon Tower pertama kali di-generate. Method-method yang terdapat dalam class Babylon Tower dapat dilihat pada tabel 3.5.

Tabel 3.5. Daftar method pada class Babylon Tower

Nama

method Kegunaan

Rotate Memutar salah satu disc yang dipilih serta setiap bola yang berada

di dalamnya

Push Menekan masuk bola yang dapat ditekan masuk ke dalam disc

Pop Mengeluarkan kembali bola yang telah ditekan masuk sebelumnya

Slide Menggeser posisi bola-bola pada kolom yang sama yang memiliki

celah untuk digeser

Randomize Mengacak posisi bola pada Babylon Tower

Selain method-method tersebut, pada class Babylon Tower juga terdapat method-method yang berfungsi untuk mengakses serta menyalin data yang tersimpan dalam setiap variabel dalam class Babylon Tower oleh class yang lain.


(45)

3.4. Game Mechanic

Setiap aplikasi permainan memiliki aturan-aturan serta metode-metode yang dirancang untuk berinteraksi dengan keadaan-keadaan yang terjadi di dalam aplikasi tersebut. Sekumpulan aturan dan metode tersebut untuk selanjutnya disebut sebagai game mechanic. Permainan Babylon Tower dibuat menggunakan software Unity dengan output berupa aplikasi untuk platform Android. Oleh karena itu, input untuk aplikasi ini berupa sentuhan jari serta arah gerakan jari yang menyentuh layar Android. Untuk itulah, perlu dirancang game mechanic untuk dapat membaca beberapa jenis sentuhan jari pada layar smartphone Android serta object yang disentuh. Selain itu, game mechanic yang dibangun juga dapat menentukan jenis gerakan yang dilakukan terhadap Babylon Tower berdasarkan input berupa sentuhan yang diterima dari user.

3.4.1. Touch Handling

Touch handling merupakan bagian dari game mechanic yang berfungsi untuk mengatur setiap input berupa sentuhan yang diterima dari user. Posisi layar yang disentuh, arah gerakan jari yang menyentuh layar serta jauh perpindahan jari yang menyentuh layar turut menentukan jenis gerakan yang dilakukan terhadap Babylon Tower.

Pseudocode yang digunakan dalam mengatur input berupa sentuhan adalah sebagai berikut:

if (touch down) {

if (touch something) { is_rotating = true

selected_disc = disc row touched selected_ball = ball touched } else {

is_camera_rotating = true }

touch_reference = touch position }

if (touch) {

touch_offset = touch position – touch_reference

if (is_rotating) {

total_rotation += rotate selected_disc based on touch_offset rotate each balls in selected_disc


(46)

32

}

if (is_camera_rotating) {

rotate camera based on touch_offset }

touch_reference = touch position }

if (touch up) { if (is_rotating) { is_rotating = false

rotation_value = Calculate_Rotation(total_rotation) if (rotation_value == 0) {

if (selected_ball != null) {

if (selected_disc == 5 && no gap) { if (can be pushed) {

add push move to list }

} else {

if (can be slided) { add slide move to list }

} } } else {

add rotate move to list }

total_rotation = 0 selected_ball = null }

if (is_camera_rotating) { is_camera_rotating = false }

}

Ketika jari menyentuh layar, akan dideteksi apakah terdapat object yang disentuh oleh jari. Apabila ada, akan disimpan nilai true pada variabel is_rotating yang menyatakan bahwa bagian Babylon Tower yang disentuh akan diputar sesuai dengan gerakan jari pada langkah selanjutnya. Kemudian pada variabel selected_disc dan selected_ball masing-masing akan disimpan nilai yang menyatakan posisi baris cakram yang disentuh serta bola yang disentuh. Apabila tidak ada object yang disentuh, akan disimpan nilai true pada variabel is_camera_rotating yang menyatakan sudut pandang Babylon Tower akan diputar sesuai dengan gerakan jari pada langkah selanjutnya. Sudut padang tersebut dibatasi supaya hanya dapat diputar terhadap sumbu-Y. Setelah menentukan ada tidaknya object yang disentuh oleh jari, posisi jari yang menyentuh layar akan disimpan dalam variabel touch_reference.


(47)

Selanjutnya akan dideteksi pula arah gerakan serta jauh perpindahan jari yang sedang menyentuh layar. Jauh perpindahan jari yang menyentuh layar akan disimpan dalam variabel touch_offset yang dihitung berdasarkan posisi jari yang menyentuh layar terhadap posisi yang sebelumnya tersimpan dalam variabel touch_reference. Apabila variabel is_rotating bernilai true, nilai yang tersimpan dalam variabel total_rotation akan diperbaharui berdasarkan jauh perpindahan sentuhan jari yang tersimpan dalam variabel touch_offset. Variabel total_rotation menyimpan nilai yang menyatakan jumlah sudut rotasi yang telah dilakukan yang dihitung sejak jari tangan mulai menyentuh layar hingga meninggalkan layar. Selanjutnya setiap bola yang terdapat pada baris yang disentuh (selected_disc) juga ikut diputar sesuai dengan nilai pada variabel touch_offset. Apabila variabel is_camera_rotating bernilai true, sudut pandang Babylon Tower akan diputar sesuai dengan nilai pada variabel touch_offset.

Ketika jari meninggalkan layar, akan diproses gerakan yang dihasilkan selama jari user menyentuh layar. Apabila variabel is_rotating bernilai true, maka nilai variabel tersebut akan diubah kembali menjadi false. Selanjutnya akan didefinisikan variabel rotation_value yang akan menyimpan jumlah kolom yang dilalui berdasarkan jumlah sudut rotasi yang tersimpan dalam variabel total_rotation. Apabila variabel rotation_value bernilai 0 (posisi kolom tidak berpindah), bola yang disentuh berada pada baris terbawah (baris 5), tidak terdapat celah pada Babylon Tower, serta bola yang disentuh dapat ditekan masuk, maka bola akan ditekan masuk ke dalam. Setelah bola ditekan masuk, maka akan menghasilkan celah yang mengakibatkan bola-bola yang berada di atasnya tergeser ke bawah. Gerakan tersebut akan disimpan ke dalam list. Sebagai contoh dapat dilihat pada gambar 3.7 yang menunjukkan bola merah pada posisi paling bawah sebelum dan sesudah ditekan masuk ke dalam cakram. Setelah ditekan bola-bola yang berada di atasnya akan tergeser ke bawah sehingga celah berada pada cakram paling atas.


(48)

34

Gambar 3.7. Tampilan scene sebelum dan sesudah bola merah pada posisi paling bawah ditekan masuk ke dalam cakram

Apabila bola yang disentuh bukan berada pada baris terbawah serta terdapat celah pada posisi kolom bola yang disentuh, maka bola akan digeser menuju posisi celah yang terdapat pada kolom yang sama. Gerakan tersebut juga akan disimpan ke dalam list. Sebagai contoh dapat dilihat pada gambar 3.8 yang menunjukkan bola merah pada baris keempat dari atas sebelum dan sesudah digeser menuju celah yang ada di atasnya.

Gambar 3.8. Tampilan scene sebelum dan sesudah bola merah pada baris keempat dari atas digeser menuju celah yang ada di posisi paling atas


(49)

Apabila variabel rotation_value bukan bernilai 0, maka hanya akan disimpan gerakan yang dilakukan ke dalam list karena gerakan memutar cakram telah dilakukan selama user menggeser jarinya yang sedang menyentuh layar.

Ketika jari user yang menyentuh object meninggalkan layar, object-object yang diputar akan diposisikan ke posisi kolom yang terdekat berdasarkan jumlah sudut rotasi yang tersimpan dalam variabel total_rotation. Sebagai contoh dapat dilihat pada gambar 3.9 yang menunjukkan tampilan Babylon Tower ketika user sedang menyentuh cakram atau bola pada baris keempat dari atas dan menggerakkan jarinya ke kanan atau kiri. Saat jari user meninggalkan layar, maka cakram beserta bola-bolanya akan diposisikan ke kolom terdekat berdasarkan jumlah sudut rotasi yang dilakukan oleh jari user.

Gambar 3.9. Tampilan scene ketika jari user sedang memutar salah satu cakram dan tampilan scene setelah jari user meninggalkan layar.

3.4.2. Moves Handling

Setiap gerakan yang telah dilakukan oleh user akan diperiksa apakah Babylon Tower telah terselesaikan atau belum. Setiap gerakan tersebut juga akan disimpan dalam sebuah list, sehingga permainan dapat di-undo maupun di-redo.


(50)

36

Gerakan-gerakan dasar yang dapat dilakukan terhadap Babylon Tower antara lain:

- Rotate : memutar salah satu cakram sejauh nilai tertentu - Push : menekan masuk bola ke dalam cakram

- Slide : menggeser bola pada salah satu kolom menuju celah yang ada - Pop : mengeluarkan kembali bola yang berada di dalam cakram

Setiap gerakan-gerakan dasar tersebut dilakukan, nilai yang tersimpan dalam object-object yang terpengaruh beserta tampilan visualnya di scene akan di-update. Setiap gerakan yang dilakukan oleh user juga akan disimpan ke dalam sebuah list, yaitu moves list. Terdapat tiga jenis gerakan yang dapat disimpan dalam moves list, yaitu rotate, push dan slide. Gerakan pop tidak perlu disimpan dalam list karena gerakan tersebut akan otomatis dilakukan ketika gerakan yang lain menghasilkan celah dimana terdapat bola yang berada di balik celah tersebut.

Setiap nilai yang tersimpan dalam sebuah gerakan harus mencakup seluruh data yang diperlukan untuk mengeksekusi gerakan tersebut yang tersimpan dalam moves list. Selain itu perlu diperhatikan juga nilai apa yang dibutuhkan ketika gerakan yang telah tersimpan akan dipanggil kembali untuk melakukan proses undo maupun redo. Gerakan yang dilakukan ketika melakukan proses redo sama dengan gerakan yang dilakukan oleh user, tetapi untuk melakukan proses undo terdapat sedikit perbedaan.

Untuk gerakan rotate, cakram akan diputar sejauh nilai tertentu searah jarum jam. Ketika melakukan proses undo, cakram akan diputar sejauh nilai tertentu berlawanan arah jarum jam. Nilai yang perlu disimpan serta proses undo dan redo pada gerakan rotate dapat dilihat pada tabel 3.6.

Tabel 3.6. Nilai yang disimpan serta proses undo dan redo pada gerakan rotate

Nilai

Nilai 1 (n1) : posisi baris cakram yang diputar Nilai 2 (n2) : jauh putaran cakram

Undo Memutar cakram yang terdapat pada baris n1 sejauh n2

berlawanan arah jarum jam

Redo Memutar cakram yang terdapat pada baris n1 sejauh n2 searah


(51)

Untuk gerakan push, ketika gerakan ini dilakukan, bola akan ditekan masuk ke dalam cakram, kemudian semua bola yang berada di atasnya pada posisi kolom yang sama akan digeser ke bawah menutupi celah yang dihasilkan oleh bola yang ditekan. Untuk proses undo, mula-mula gerakan yang harus dilakukan adalah membalikkan gerakan yang terakhir kali dilakukan yaitu menggeser semua bola pada satu kolom menuju celah yang terdapat pada baris paling bawah. Kebalikan dari gerakan tersebut adalah menggeser kembali semua bola pada kolom tersebut menuju celah yang terdapat pada baris paling atas. Kemudian bola yang berada di balik celah yang terdapat pada baris paling bawah akan keluar kembali. Nilai yang perlu disimpan serta proses undo dan redo pada gerakan push dapat dilihat pada tabel 3.7.

Tabel 3.7. Nilai yang disimpan serta proses undo dan redo pada gerakan push

Nilai

Nilai 1 (n1) : posisi kolom dari bola yang ditekan

Nilai 2 (n2) : posisi baris dari celah yang akan dihasilkan setelah bola ditekan

Undo

Meggeser bola pada kolom n1 dari baris paling bawah menuju baris n2

Mengeluarkan bola yang berada di balik celah yang baru dihasilkan

Redo

Menekan masuk bola pada kolom n1 pada baris paling bawah Menggeser bola dari baris n2 menuju celah yang baru

dihasilkan.

Untuk gerakan slide, ketika gerakan ini dilakukan, bola akan digeser dari posisi baris tertentu menuju posisi celah yang paling dekat sehingga posisi celah akan berpindah menuju posisi awal bola yang digeser. Setelah bola digeser, perlu diperiksa apakah terdapat bola yang berada di balik celah yang baru dihasilkan. Bila ada, maka bola yang berada di dalam cakram akan muncul keluar menutupi celah tersebut. Untuk proses undo, apabila gerakan terakhir adalah memunculkan bola yang berada di dalam cakram, maka kebalikan dari gerakan tersebut adalah menekan masuk bola tersebut supaya kembali ke dalam cakram. Selanjutnya dapat dilakukan gerakan menggeser bola untuk mengembalikan bola-bola ke posisi semula. Nilai yang perlu disimpan serta proses undo dan redo pada gerakan slide dapat dilihat pada tabel 3.8.


(52)

38

Tabel 3.8. Nilai yang disimpan serta proses undo dan redo pada gerakan slide

Nilai

Nilai 1 (n1) : posisi kolom dari bola yang digeser Nilai 2 (n2) : posisi baris dari bola yang digeser

Nilai 3 (n3) : posisi baris dari celah sebelum bola digeser Nilai 4 (n4) : memiliki tipe data boolean yang menyatakan apakah bola yang berada dalam celah akan muncul setelah gerakan ini dilakukan

Undo

Apabila n4 menyimpan nilai true, maka bola yang terletak pada kolom n1 dan terletak pada baris n2 akan ditekan masuk ke dalam cakram

Menggeser bola pada kolom n1 dari baris n3 menuju baris n2

Redo

Menggeser bola pada kolom n1 dari baris n2 menuju baris n3 Bola yang berada di dalam cakram akan muncul apabila n4 menyimpan nilai true

3.5. AI

Algoritma yang digunakan dalam permainan Babylon Tower adalah algoritma column by column dan depth-first search. Algoritma column by column terdiri dari tiga tahapan utama. Tahap pertama adalah tahap sorting yang bekerja dengan cara mengelompokkan bola-bola dengan warna yang sejenis pada kolom yang sama. Tahap sorting dikombinasikan dengan algoritma depth-first search yang berfungsi untuk mencegah bertemunya jalan buntu selama proses pengelompokkan dijalankan. Tahap kedua adalah tahap swapping yang bekerja dengan cara menukar posisi bola-bola pada setiap kolom hingga bola-bola pada setiap kolom terurut berdasarkan tingkat kecerahan warna bola. Selama tahap swapping dijalankan, warna bola pada dua baris teratas tidak harus terurut berdasarkan tingkat kecerahannya. Tahap ketiga adalah tahap parity yang bertujuan untuk menukar posisi bola pada dua baris teratas yang belum terurut berdasarkan tingkat kecerahan warnanya.

Sebelum algoritma mulai dijalankan, akan ditentukan terlebih dahulu warna bola yang menempati masing-masing kolom. Mula-mula ditetapkan terlebih dahulu warna bola mulai dari kolom pertama hingga kolom terakhir secara berurutan, yaitu merah, cokelat, hitam, kuning, biru dan hijau. Kemudian akan diperiksa apakah bola yang berada pada cakram paling bawah kolom pertama memiliki warna yang sama dengan warna yang ditetapkan untuk kolom pertama. Apabila tidak sama, maka warna


(53)

kolom pertama akan ditukar dengan warna kolom lain yang sama dengan warna bola tersebut. Sebagai contoh, warna bola pada cakram paling bawah kolom pertama adalah biru. Biru merupakan warna yang telah ditetapkan untuk kolom kelima, sehingga warna pada kolom pertama dan kelima akan ditukar. Dengan demikian, warna bola yang ditetapkan mulai dari kolom pertama hingga kolom terakhir secara berurutan menjadi biru, cokelat, hitam, kuning, merah dan hijau. Selanjutnya bola yang berada pada baris terbawah kolom pertama akan ditekan masuk sehingga menghasilkan gap pada kolom bola tersebut. Selanjutnya algoritma column by column dapat mulai dijalankan.

3.5.1. Sorting dan depth-first search

Tahap sorting akan mengelompokkan bola-bola dengan warna yang sejenis pada kolom yang sama tanpa perlu memperhatikan urutan tingkat kecerahan warna setiap bola dalam satu kolom. Dalam tahap ini, akan digunakan fungsi rekursif untuk melakukan pencarian secara berulang terhadap bola dari kolom lain yang memiliki warna yang sejenis dengan warna yang telah ditetapkan untuk kolom yang sedang memiliki gap. Setelah ditemukan bola yang diinginkan, maka beberapa langkah prosedural akan dieksekusi untuk memindahkan posisi bola yang dicari menuju kolom yang memiliki warna sejenis, sehingga posisi gap akan berpindah menuju kolom yang lain. Proses ini akan dilakukan secara berulang hingga setiap kolom ditempati bola-bola dengan warna yang sejenis.

Selama tahap sorting, perlu diperiksa apakah langkah yang diambil akan menghasilkan jalan buntu. Jalan buntu yang dimaksud adalah mengeluarkan bola yang berada di dalam disc sebelum semua bola berada pada kolom yang benar. Dengan mengeluarkan bola tersebut, maka tidak terdapat lagi celah, sehingga bola tidak dapat dipindahkan ke posisi lain sebelum bola ditekan masuk kembali ke dalam disc. Untuk menghindari hal tersebut, maka dibutuhkan algoritma depth-first search yang berfungsi untuk mengambil langkah mundur ketika permainan menemui jalan buntu, kemudian mencari langkah lain yang dapat diambil.

Adapun pseudocode yang digunakan dalam tahap ini adalah sebagai berikut: bool StartSorting (gap_column) {


(54)

40

if (sorting complete) { return true

} else if (no gap) { return false

} else {

for (each column other than gap_column) { for (each ball in column) {

if (ball_color == gap_column_color) { if (ball_row > 2) {

active_disc = ball_row - 1 } else {

active_disc = ball_row + 1 }

if (active_disc != gap_row) { move ball to gap

flag = StartSorting(column) }

} } } }

if (!flag) { undo move }

return flag }

Berikut adalah penjelasan untuk pseudocode dari tahap sorting. Tahap sorting dimulai dengan parameter 0, yang menyatakan celah berada pada kolom pertama. Untuk selanjutnya, kolom pertama akan dinyatakan dengan nilai 0 hingga kolom keenam dinyatakan dengan nilai 5. Begitu pula untuk cakram pada baris teratas akan dinyatakan dengan nilai 0 hingga cakram pada baris terbawah dinyatakan dengan nilai 5. Selanjutnya didefinisikan sebuah variabel flag dengan tipe data boolean yang berfungsi untuk menyatakan apakah algortima yang dijalankan menemui jalan buntu atau tidak. Ketika didefinisikan, variabel flag menyimpan nilai false yang menyatakan belum ditemukannya langkah yang bisa diambil. Ketika ditemukan langkah yang mungkin diambil, nilai dari variabel flag akan diubah menjadi true.

Algoritma akan dilanjutkan dengan melakukan pengecekan apakah setiap bola telah berada pada kolom yang benar sesuai dengan jenis warnanya. Apabila setiap bola telah berada pada kolom yang benar, maka akan langsung mengembalikan nilai true. Apabila belum, maka akan diperiksa apakah masih terdapat bola yang berada di dalam Babylon Tower. Jika tidak terdapat bola di dalam Babylon Tower, maka hal ini menyatakan bahwa tidak terdapat celah pada Babylon Tower yang artinya permainan


(1)

Proses swapping pertama akan menukar posisi setiap bola pada masing-masing kolom dimulai dari bola yang warnanya paling pucat (tingkat kecerahan 0) menuju posisi yang paling dekat dengan posisi seharusnya (baris 0), dilanjutkan dengan menukar posisi bola yang tingkat kecerahannya 1 menuju posisi yang paling dekat dengan baris 1, dan seterusnya hingga bola yang tingkat kecerahannya 5. Yang dimaksud dengan posisi paling dekat adalah bola yang tingkat kecerahannya n berada pada baris n - 1, baris n, atau baris n + 1, misalnya posisi bola yang tingkat kecerahannya 3 ditukar dengan posisi bola lain hingga berada pada baris 2, baris 3, atau baris 4 walaupun bola tersebut seharusnya hanya boleh berada pada baris 3. Posisi bola yang belum berada pada baris yang benar akan dilanjutkan pada proses swapping kedua. Proses swapping kedua akan menukar posisi bola yang belum berada pada baris yang benar dimulai dari bola yang berada pada baris terbawah hingga baris ketiga dari atas.

Setelah tahap swapping dilakukan, maka yang tersisa adalah dua baris teratas yang belum semuanya terurut. Jumlah kolom yang dua baris teratasnya belum terurut tidak selalu sama untuk setiap keadaan Babylon Tower yang berbeda. Tahap swapping juga mungkin menghasilkan dua baris teratas yang telah terurut untuk setiap kolomnya, namun kondisi tersebut jarang terjadi. Apabila dua baris teratas pada setiap kolom telah terurut, maka tahap parity tidak perlu dijalankan.

4.2.3. Hasil dari Tahap Parity

Tahap parity yang dilakukan terhadap Babylon Tower menghasilkan posisi bola pada dua baris teratas yang telah terurut sesuai dengan tingkat kecerahan warnanya. Tahap parity hanya dapat dijalankan apabila banyak kolom yang dua baris teratasnya belum terurut berjumlah genap. Setiap tahap parity dijalankan, akan dihasilkan sepasang kolom yang dua baris teratasnya terurut. Tahap parity dapat dijalankan sebanyak lebih dari satu kali tergantung pada keadaan Babylon Tower sebelum tahap parity dijalankan. Misalnya terdapat empat kolom yang belum terurut, maka tahap parity akan dijalankan sebanyak dua kali untuk mengurutkan dua pasang kolom tersebut.


(2)

55

4.2.4. Hasil Pengujian

Pengujian dilakukan sebanyak sepuluh kali terhadap Babylon Tower yang keadaan awalnya diacak oleh program untuk setiap tingkat kesulitan yang berbeda. Hal yang dicatat dalam pengujian tersebut adalah banyak langkah yang dibutuhkan untuk mencapai solusi. Hasil pengujian terhadap banyak langkah yang dibutuhkan untuk menemukan solusi dapat dilihat pada tabel 4.1.

Tabel 4.1. Hasil pengujian terhadap banyak langkah yang dibutuhkan untuk menemukan solusi

Case

Tingkat kesulitan

Easy Medium Hard

1 160 253 369

2 122 337 456

3 184 211 356

4 176 300 431

5 99 275 465

6 191 265 466

7 197 242 342

8 108 216 477

9 68 254 547


(3)

BAB 5

KESIMPULAN DAN SARAN

Bab ini membahas tentang kesimpulan dari hasil penerapan algoritma column by column dan depth-first search dalam aplikasi permainan Babylon Tower serta saran-saran untuk pengembangan penelitian selanjutnya.

5.1. Kesimpulan

Berdasarkan penerapan algoritma yang diajukan yakni column by column dan depth-first search untuk mengurutkan setiap bola dengan warna yang sama pada kolom yang sama serta mengurutkan setiap kolom berdasarkan tingkat kecerahan warna bola, diperoleh beberapa kesimpulan sebagai berikut:

1. Aplikasi permainan Babylon Tower pada platform Android telah berhasil dibangun.

2. Penerapan algoritma yang diajukan selalu mampu menemukan solusi dari permainan Babylon Tower yang keadaan awalnya acak.

3. Algoritma yang diajukan mampu menemukan solusi dengan jumlah langkah rata-rata sebanyak 144 langkah untuk tingkat kesulitan easy, 265 langkah untuk tingkat kesulitan medium, dan 438 langkah untuk tingkat kesulitan hard.

5.2. Saran

Pada penelitian selanjutnya, beberapa saran yang dapat digunakan dalam pengembangan aplikasi permainan Babylon Tower adalah sebagai berikut:

1. Melakukan penelitian terhadap Babylon Tower dengan jumlah disc serta jumlah kolom yang berbeda.

2. Mengkombinasikan algoritma lain untuk mempersingkat jumlah langkah yang diperlukan untuk menemui solusi, misalnya algoritma untuk menentukan


(4)

57

warna pada masing-masing kolom secara efektif dan efisien sesuai dengan keadaan awal Babylon Tower.

3. Menerapkan algoritma lain dalam permainan Babylon Tower, khususnya algoritma yang bersifat heuristik.


(5)

DAFTAR PUSTAKA

Abdel-Raouf, O., Abdel-Baset, M. & El-henawy I. 2014. A Novel Hybrid Flower Pollination Algorithm with Chaotic Harmony Search for Solving Sudoku Puzzles. International Journal of Engineering Trends and Technology, 7 (3): 126-132.

Goodrich, M.T. & Tamassia, R. 2015. Algorithm Design and Applications. Wiley: New Jersey.

Gregory, J. 2009. Game Engine Architecture. A K Peters, Ltd: Massachusetts

Heineman, G.T., Pollice, G., & Selkow, S. 2009. Algorithms in a Nutshell. O’Reilly: Sebastopol.

Jing, M.Q., Yu, C.H., Lee, H.L., & Chen, L.H. 2009. Solving Japanese Puzzles with Logical Rules and Depth First Search Algorithm. International Conference on Machine Learning and Cybernetics, 5: 2962-2967.

Korf, R.E. 1985. Depth-First Iterative-Deepening: An Optimal Admissable Tree Search. Artificial Intelligence 27(1): 97-109.

Korf, R.E. & Felner, A. 2007. Recent Progress in Heuristic Search: A Case Study of the Four-Peg Towers of Hanoi Problem. Proceeding of International Joint Conference on Artificial Intelligence, pp. 2324-2329.

Levine, J., Congdon, C.B., Ebner, M., Kendall, G., Lucas, S.M., Miikkulainen, R., Schaul, T., & Thompson, T. 2013. General Video Game Playing. Artificial and Computational Intelligence in Games, 6: 77-83.

Luger, G.F. & Stubblefield, W.A. 2009. AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and Java for Artificial Intelligence. Pearson Education, Inc,: Boston.

Millington, I. & Funge, J. 2009. Artificial Intelligence for Games. 2nd Edition. Morgan Kaufmann: Amsterdam.

Panov, S. & Koceski, S. 2014. Solving Kakuro Puzzle using Self Adapting Harmony Search Metaheuristic Algorithm. International Journal of Engineering Practical Research, 3 (2): 34-39.


(6)

59

Russell, S. & Norvig, P. 2010. Artificial Intelligence A Modern Approach. 3rd Edition. Pearson Education, Inc,: New Jersey.

Sanchez, D. & Dalmau, C. 2004. Core Techniques and Algorithms in Game Programming. New Riders: Indianapolis.

Scerphuis, J. Babylon Tower. (Online) http://www.jaapsch.net/puzzles/ivory.htm (10 Maret 2015)

Sherrod, A. 2007. Data Structures and Algorithms for Game Developers. Charles River Media: Boston.

Stefani, D., Aribowo, A., Saputra, K.V.I., & Lukas, S. 2012. Solving Pixel Puzzle Using Rule-Based Techniques and Best First Search. International Conference on Engineering and Technology Development, Universitas Bandar Lampung, Lampung, pp. 118-124.