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