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

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 Universitas Sumatera Utara } 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_Rotationtotal_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 . Universitas Sumatera Utara 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. Universitas Sumatera Utara 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 Universitas Sumatera Utara 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 . Universitas Sumatera Utara 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 jarum jam Universitas Sumatera Utara 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. Universitas Sumatera Utara 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