• Tidak ada hasil yang ditemukan

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

N/A
N/A
Protected

Academic year: 2017

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

Copied!
73
0
0

Teks penuh

(1)

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

(2)

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,

(3)

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

(4)

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.

(5)

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 software Unity.

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.

(6)

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

(7)

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.

(8)

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

(9)

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 class Ball

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

(10)

Selain itu, pada class Ball 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.

(11)

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 class Inner 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

(12)

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

(13)

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) {

(14)

}

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 }

}

(15)

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

(16)

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.

(17)

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

(18)

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

(19)

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.

(20)

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.

(21)

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:

(22)

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

(23)

telah menemui jalan buntu, sehingga akan langsung mengembalikan nilai false. Apabila permainan tidak menemui jalan buntu, maka akan dilanjutkan dengan mencari bola pada kolom lain yang memiliki warna yang sesuai dengan warna pada kolom yang memiliki celah (sesuai dengan nilai parameter yang diterima yang menyatakan posisi kolom yang memiliki celah).

Proses pencarian bola pada kolom lain dilakukan dengan perulangan untuk setiap kolom selain kolom yang memiliki celah. Apabila kolom yang memiliki celah adalah kolom 0, maka kolom 0 tidak disertakan dalam pencarian, sehingga pencarian dimulai dari kolom 1 hingga kolom 5. Pada setiap kolom juga dilakukan perulangan untuk memeriksa setiap bola yang terdapat pada setiap kolom dimulai dari bola pada baris 0 hingga baris 5. Apabila warna bola yang diperiksa sama dengan warna yang ditetapkan untuk kolom yang memiliki celah, maka akan dijalankan beberapa langkah prosedural untuk memindahkan posisi bola yang dicari menuju kolom yang memiliki warna yang sesuai dengan warna bola yang dicari.

Langkah-langkah untuk memindahkan bola dimulai dengan mendefinisikan variabel gap_row yang berfungsi untuk menyimpan nilai yang menyatakan posisi baris yang memiliki celah. Selanjutnya akan didefinisikan variabel active_disc untuk menyimpan nilai yang menyatakan posisi baris yang ditargetkan untuk ditempati oleh celah. Nilai pada active_disc tergantung kepada posisi baris dari bola yang ingin dipindahkan. Apabila bola yang ingin dipindahkan berada pada baris yang lebih besar dari 2, maka nilai pada active_disc adalah posisi baris bola yang ingin dipindahkan dikurangi 1. Dengan kata lain, posisi celah digeser hingga berada tepat satu baris di atas posisi baris bola yang ingin dipindahkan. Apabila bola yang ingin dipindahkan berada pada baris yang lebih kecil dari 3, maka nilai pada active_disc adalah posisi baris bola yang ingin dipindahkan ditambah 1, yang artinya posisi celah digeser hingga berada tepat satu baris di bawah posisi baris bola yang ingin dipindahkan.

Setelah nilai active_disc ditentukan, maka akan diperiksa apakah posisi celah sama dengan nilai active_disc. Jika berbeda, maka celah akan digeser sehingga menempati baris yang sama dengan nilai active_disc. Selanjutnya cakram pada posisi

active_disc akan diputar supaya celah berada pada kolom yang sama dengan posisi

(24)

active_disc akan diputar kembali supaya bola yang ingin dipindahkan berada pada

kolom yang benar.

Setelah bola selesai dipindahkan, akan dijalankan lagi method StartSorting secara rekursif dengan parameter berupa posisi celah yang baru setelah bola dipindahkan. Method tersebut hanya tidak akan dijalankan apabila tahap sorting telah selesai atau algoritma menemui jalan buntu. Apabila variabel flag bernilai false (menemui jalan buntu), maka akan diambil langkah mundur terhadap langkah-langkah yang terakhir kali dilakukan dan mencari bola lain yang dapat dipindahkan.

3.5.2. Swapping

Tahap swapping akan dieksekusi setelah tahap sorting selesai dilakukan. Tahap ini bertujuan untuk menukar posisi bola-bola pada setiap kolom hingga bola-bola pada setiap kolom terurut berdasarkan tingkat kecerahan warna bola. Selama proses ini, kedua baris teratas tidak harus dalam keadaan terurut. Proses tersebut dianggap selesai apabila tingkat kecerahan warna bola pada baris ketiga dari atas hingga baris terbawah telah terurut berdasarkan tingkat kecerahan untuk masing-masing kolom.

Adapun pseudocode yang digunakan dalam tahap ini adalah sebagai berikut:

void StartSwapping () {

for (each column other than gap_column) { if (Swapping1_Not_Completed(column)) { for (each row) {

while (ball_row – row > 1 or ball_row – row < -1) { if (ball_row – row > 1) { row_1 = ball_row – 1 row_2 = ball_row – 2 } else {

row_1 = ball_row + 1 row_2 = ball_row + 2 }

if (gap_row != row_1) {

Slide gap_column from row_1 to gap_row }

swap ball }

} }

if (Swapping2_Not_Completed(column)) { for (each row from 5 to 2) {

(25)

row_1 = row – 1 row_2 = row – 2

Slide gap_column from row_1 to row_2 Swap row_1 with row_2

} else if (row – ball_brightness < 0) { row_1 = row + 1

row_2 = row + 2

Slide gap_column from row_1 to row_2 swap ball } } } } }

Tahap swapping akan dimulai dengan melakukan perulangan terhadap setiap kolom selain kolom yang memuat celah. Untuk setiap kolom akan dilakukan

swapping pertama, yaitu menukar posisi bola pada setiap kolom hingga selisih antara

posisi sebuah bola dengan posisi yang seharusnya tidak lebih dari 1. Selama selisih antara posisi bola dengan posisi seharusnya lebih dari 1, maka posisi bola akan dipindahkan menuju posisi yang lebih dekat dengan posisi seharusnya.

Untuk memindahkan bola menuju posisi yang lebih dekat dengan posisi seharusnya, perlu didefinisikan terlebih dahulu variabel ball_row yang menyimpan posisi baris bola yang sedang diperiksa tingkat kecerahan warnanya serta variabel

gap_row yang menyimpan posisi baris yang memuat celah. Selanjutnya perlu

didefinisikan pula variabel row_1 dan row_2 yang berfungsi untuk menyimpan posisi baris yang terlibat selama langkah-langkah dalam proses swapping dijalankan.

Langkah-langkah yang dijalankan selama proses swapping adalah memutar cakram row_1 dari posisi kolom yang memuat celah (gap_column) menuju posisi kolom dimana bola yang ingin dipindahkan berada (target_column). Selanjutnya geser bola yang ingin dipindahkan menuju celah yang terdapat pada cakram row_1, dan putar kembali cakram row_1 dari target_column menuju gap_column. Kemudian geser bola pada target_column dari cakram row_2 menuju cakram yang memuat celah sehingga celah berpindah ke posisi row_2 sebelumnya. Putar cakram row_2 dari

target_column menuju gap_column, sehingga terdapat celah pada gap_column. Geser

(26)

Sebagai contoh sebuah bola dengan tingkat kecerahan 1 berada pada baris ke 4, maka bola tersebut harus dipindahkan menuju baris di atasnya. Dalam contoh ini,

row_1 akan bernilai 3 dan row_2 akan bernilai 2. Setelah langkah swapping dilakukan

maka bola tersebut akan berpindah dari baris ke 4 menuju baris ke 2. Dengan demikian, dalam tahap swapping bola hanya dapat dipindahkan tepat dua baris di atas atau di bawah posisi bola itu sendiri.

Setelah tahap swapping pertama selesai dilakukan, maka akan dilanjutkan dengan tahap swapping kedua yang bertujuan untuk menempatkan bola-bola dengan tingkat kecerahan 2 sampai 5 pada baris yang benar. Langkah-langkah untuk memindahkan posisi bola tetap sama dengan langkah-langkah yang digunakan pada tahap swapping pertama.

Setelah setiap kolom selesai melakukan tahap swapping, maka yang tersisa adalah kolom yang memuat celah, karena selama tahap swapping posisi bola-bola pada kolom tersebut tidak diperhatikan. Oleh karena itu, bola yang berada di dalam kolom tersebut perlu dikeluarkan kembali dan bola pada kolom lain yang telah selesai melakukan swapping akan ditekan masuk ke dalam untuk menghasilkan celah pada kolom lain tersebut. Selanjutnya akan dilakukan langkah-langkah swapping sekali lagi untuk kolom yang tersisa.

3.5.3. Parity

Tahap parity merupakan tahap terakhir dari algoritma column by column yang akan dijalankan apabila bola pada dua baris teratas belum semuanya terurut. Dua bola teratas tidak selalu terurut selama menjalankan tahap swapping karena pada tahap

swapping, posisi sebuah bola hanya dapat ditukar dengan posisi bola lain yang

(27)

Syarat yang harus dipenuhi untuk menjalankan tahap parity adalah harus terdapat pasangan kolom yang belum terurut karena sekali tahap parity dijalankan, akan menghasilkan sepasang kolom yang telah terurut. Jadi sebelum tahap parity dijalankan, perlu dihitung terlebih dahulu jumlah kolom yang belum terurut. Apabila jumlahnya ganjil, maka akan ada sebuah kolom yang tidak memiliki pasangan kolom lain untuk diurutkan bersama, sehingga perlu dilakukan langkah lain untuk mengurutkan salah satu kolom supaya jumlah kolom yang belum terurut menjadi genap. Langkah yang dimaksud adalah memutar cakram pada baris 0 sejauh 60°, menekan masuk bola pada kolom 0, diikuti dengan mengulangi tahap sorting dengan parameter 0. Tahap sorting yang dilakukan sebelum tahap parity tidak memerlukan jumlah langkah sebanyak yang dilakukan saat tahap sorting pertama kali dilakukan karena bola yang belum berada pada kolom yang benar hanya berada pada baris teratas. Setelah tahap sorting tersebut dilakukan, maka kolom yang belum terurut pasti berjumlah genap sehingga tahap parity dapat dijalankan.

Adapun pseudocode yang digunakan dalam tahap ini adalah sebagai berikut:

void StartParity () { for (each column) { column_1 = -1 column_2 = -1

if (ball_0_brightness == 1) { if (column_1 == -1) {

column_1 = column

} else if (column_2 == -1) { column_2 = column

} } }

last_row_rotated = false

if (inner_gap_column_0 != column_1 and inner_gap_column_0 != column_2) { pushed_column = inner_gap_column_0

} else if (inner_gap_column_1 != column_1 and inner_gap_column_1 != column_2) {

pushed_column = inner_gap_column_1 } else {

last_row_rotated = true Rotate row_5 around 60°

pushed_column = inner_gap_column_0 }

do parity steps

(28)

if (unsorted_column > 0) { StartParity()

} }

Tahap parity akan dijalankan pada setiap pasangan kolom yang belum terurut dengan melibatkan sebuah kolom lain. Pertama-tama akan ditentukan dua kolom yang belum terurut dengan melakukan perulangan pada setiap kolom. Kedua kolom yang belum terurut masing-masing akan disimpan dalam variabel column_1 dan column_2. Selanjutnya akan didefinisikan variabel last_row_rotated dengan tipe data boolean dan mula-mula bernilai false. Variabel tersebut nantinya akan digunakan untuk menyatakan apakah cakram pada baris terbawah diputar sebelum langkah-langkah tahap parity dilakukan. Kemudian akan ditentukan kolom ketiga yang terlibat dalam tahap parity yang merupakan salah satu kolom inner gap (kolom dimana bola pada baris terbawahnya dapat ditekan masuk). Kolom ketiga yang ditentukan akan disimpan dalam variabel pushed_column. Untuk menentukannya perlu dipastikan bahwa kolom ketiga tidak boleh sama dengan salah satu di antara dua kolom yang hendak diurutkan. Apabila kolom yang hendak diurutkan sama dengan kolom inner

gap, maka cakram terbawah perlu diputar sejauh 60° sehingga posisi kolom inner gap

juga ikut berubah, serta nilai variabel last_row_rotated diubah menjadi true. Dengan demikian, posisi kolom inner gap tersebut dapat digunakan sebagai kolom ketiga yang terlibat dalam tahap parity.

(29)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

Bab ini membahas tentang implementasi algoritma column by column dan depth-first

search pada permainan Babylon Tower berdasarkan rancangan aplikasi yang telah

dibahas pada bab 3. Bab ini juga membahas hasil yang diperoleh dari pengujian terhadap implementasi yang telah dilakukan terhadap aplikasi yang dibuat.

4.1. Implementasi

Aplikasi permainan Babylon Tower dibuat menggunakan software Unity versi 5.0.0f4 dengan menggunakan bahasa pemrograman C#. Output yang ditargetkan berupa aplikasi untuk platform Android (.apk).

4.1.1. Spesifikasi perangkat keras

Komputer yang digunakan penulis dalam proses pembuatan dan pengembangan aplikasi permainan Babylon Tower memiliki spesifikasi perangkat keras sebagai berikut:

1. Processor Intel Pentium P6300 (2.27 GHz) 2. Memory RAM 2 GB

3. Hard Disk 300 GB 4. VGA Intel HD Graphics

(30)

4.1.2. Spesifikasi perangkat lunak

Proses pembuatan dan pengembangan aplikasi permainan Babylon Tower di komputer, penulis menggunakan sistem operasi Windows 7 32-bit. Perangkat lunak yang digunakan adalah sebagai berikut:

1. Blender 2.7.1 2. Unity 5.0.0f4

3. Java Standard Edition Development Kit 7 4. Android SDK 6.0 (API 23)

Penulis menggunakan software Blender untuk membangun model-model 3D yang dibutuhkan dalam merancang aplikasi permainan Babylon Tower. Selanjutnya penulis menggunakan model 3D tersebut dalam software Unity untuk merancang keseluruhan aplikasi permainan yang hendak dibangun, termasuk kode program, tampilan antarmuka, serta assets (berupa gambar dan model 3D) yang digunakan. Setelah aplikasi Babylon Tower selesai dirancang menggunakan software Unity, penulis mem-build aplikasi tersebut ke dalam bentuk aplikasi Android (.apk). Untuk mem-build aplikasi Android, dibutuhkan Java Development Kit dan Android SDK. Sistem operasi yang digunakan pada perangkat Android untuk melakukan uji coba adalah Android 4.4.2.

4.1.3. Eksekusi aplikasi

(31)
[image:31.595.222.411.84.416.2]

Gambar 4.1. Tampilan Main Menu

(32)

game scene juga terdapat beberapa UI, seperti button-button untuk melakukan undo,

redo, play/pause, dan sebagainya, serta text yang menampilkan jumlah langkah yang

telah dilakukan dalam permainan Babylon Tower dan lama waktu yang dibutuhkan

user untuk menyelesaikan permainan Babylon Tower.. Tampilan game scene dapat

[image:32.595.212.422.212.579.2]

dilihat pada gambar 4.2.

Gambar 4.2. Tampilan Game Scene

(33)

jumlah langkah yang telah dilakukan oleh user akan ditampilkan sebagai text di sebelah bawah Babylon Tower.

Pada bagian atas game scene terdapat timer yang menyatakan lama waktu yang dibutuhkan user untuk menyelesaikan permainan. Waktu pada timer akan mulai dijalankan ketika user melakukan gerakan pertama terhadap Babylon Tower. Waktu pada timer akan dihentikan ketika user telah menemukan solusi permainan atau user menyentuh button solve. Di sebelah bawah button solve terdapat informasi yang dapat membantu user mengingat warna bola serta posisi kolom bola yang sedang berada di dalam Babylon Tower. Informasi tersebut hanya akan ditampilkan ketika terdapat bola yang sedang berada di dalam Babylon Tower.

User juga dapat melakukan navigasi terhadap langkah-langkah yang telah

tersimpan di dalam list melalui button-button yang terdapat pada bagian bawah tampilan game scene. User dapat menjalankan animasi dari langkah-langkah yang tersimpan di dalam list dengan menyentuh button play. Ketika animasi sedang dijalankan, button play berubah menjadi button pause yang berfungsi untuk menghentikan animasi yang sedang berjalan. Ketika button pause disentuh, animasi akan berhenti dan button pause akan berubah kembali menjadi button play.

User dapat memilih untuk menyelesaikan permainan melalui AI dengan

menekan button solve. Dengan menekan button solve, maka akan dijalankan animasi tiga dimensi setiap langkah yang ditempuh mulai dari keadaan awal hingga Babylon

Tower terselesaikan. User dapat kembali ke main menu dengan menekan button home.

Dari main menu, user dapat memilih help untuk melihat cara bermain Babylon

Tower dan memilih about untuk melihat informasi tentang aplikasi permainan

(34)
[image:34.595.119.524.84.438.2]

Gambar 4.3. Tampilan Help dan About

4.2. Pengujian

(35)

4.2.1. Hasil dari Tahap Sorting

Tahap sorting yang dilakukan terhadap Babylon Tower menghasilkan posisi bola-bola yang telah berada pada kolom yang benar sesuai dengan warna yang ditetapkan untuk masing-masing kolom. Proses sorting akan selalu mencari bola dari kolom lain yang memiliki warna yang sama dengan warna yang ditetapkan pada kolom yang memiliki celah. Bola yang telah ditemukan akan dipindahkan menuju kolom yang memiliki celah sehingga celah akan berpindah ke kolom yang lain. Selanjutnya akan diulangi proses pencarian bola dari kolom lain yang memiliki warna yang sama dengan warna pada kolom baru yang memiliki celah. Proses tersebut akan dilakukan terus menerus hingga setiap bola berada pada kolom yang sesuai dengan warna yang telah ditetapkan.

Tahap sorting akan selalu diakhiri dengan dipindahkannya bola dari kolom yang bolanya ditekan masuk ke dalam saat tahap sorting akan dijalankan. Misalnya saat tahap sorting dijalankan, bola pada kolom pertama ditekan masuk ke dalam

Babylon Tower sehingga menghasilkan celah pada kolom pertama. Bola terakhir yang

dipindahkan pada keadaan tersebut adalah bola yang berada pada kolom pertama sehingga pada akhirnya celah kembali berada pada kolom pertama. Dengan demikian, bola yang sebelumnya berada di dalam Babylon Tower dapat dikeluarkan kembali karena telah terdapat celah pada kolom pertama.

4.2.2. Hasil dari Tahap Swapping

Tahap swapping yang dilakukan terhadap Babylon Tower selalu menukar posisi bola-bola pada setiap kolom hingga setiap bola-bola yang berada pada baris ketiga dari atas sampai baris terbawah menempati posisi yang benar sesuai dengan tingkat kecerahan warnanya. Tahap swapping dijalankan secara kolom per kolom untuk setiap kolom yang tidak memiliki celah. Setelah proses swapping selesai dijalankan pada setiap kolom yang tidak memiliki celah, maka proses swapping dijalankan sekali lagi untuk kolom yang memiliki celah. Misalnya kolom pertama memiliki celah, maka tahap

swapping akan dijalankan mulai dari kolom kedua hingga kolom kelima dan diakhiri

(36)

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

(37)

4.2.4. Hasil Pengujian

[image:37.595.116.519.300.568.2]

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

(38)

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.

(39)

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

(40)

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.

(41)

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.

(42)

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

(43)

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

(44)

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).

(45)

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

(46)

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

[image:46.595.221.411.404.538.2]

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.

(47)

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

[image:47.595.114.524.339.597.2]

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

(48)

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 nya, dan seterusnya. Node yang akan di-men-generate

(49)

Breadth-first search akan selalu menemukan solusi apabila pencarian

[image:49.595.111.523.335.562.2]

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

(50)

ketiga, dan seterusnya. Apabila solusi pencarian terdapat pada kedalaman d, maka dalam kondisi

Gambar

Gambar 3.1. Arsitektur Umum
Gambar 3.2. Model cakram (disc) pada posisi paling atas
Gambar 3.4. Model cakram (disc) yang posisinya diapit oleh dua cakram yang
Gambar 3.6. Babylon Tower dalam Model 3D
+7

Referensi

Dokumen terkait

Penelitian ini bertujuan untuk menganalisis peramalan nilai ekspor Indonesia pada sektor pertanian, industri, pertambangan, dan agregat dari ketiga sektor tersebut pasca

Gambar 1.2 Keterkaitan RPI2-JM Bidang Cipta Karya dengan RPI2JM bidang Pekerjaan Umum dan Dokumen perencanaan Pembangunan di Daerah. Pada Gambar 1.2 dapat dilihat bahwa

Mengingat Nota Kesepahaman antara Pemerintah Republik Indonesia dan Pemerintah Australia tentang Pemberantasan Terorisme lnternasional (2002)... Telah mencapai

Data yang dihasilkan dari studi ini memberikan informasi tentang dampak jangka pendek yang dialami oleh masyarakat dan upaya pemulihan di wilayah-wilayah yang

The International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences, Volume XL-3/W3, 2015 ISPRS Geospatial Week 2015, 28 Sep – 03 Oct 2015, La

Demikian surat penugasan ini dikeluarkan untuk dapat dilaksanakan dengan baik dan penuh rasa tanggung jawab. ..., 29 April 2017

The GeoBigData'15 Workshop (2 October 2015), was organized by the ISPRS working group III/5 as an event of the ISPRS Geospatial Week 2015 (La Grande Motte, France, 28 September -

Tujuan dan Sasaran pembangunan adalah sebagaimana tabel di.