GAME Horrible Racing

2.1. Konsep AI
Smiley adalah karakter yang dimainkan oleh pemain dalam permainan ini. Pemain harus bisa menghindari rintangan yang ada dan menyelesaikan level permainan untuk menuju garis finish.
Penyelesaian :
1. Identifikasi ruang keadaan
Permasalahan ini dapat dilambangkan dengan ( 1 karakter smiley yang berbentuk kotak dan banyak karakter yang digunakan untuk menjadi halangan atau rintangan ).
2. Keadaan awal & tujuan
Keadaan awal = halangan ada di setiap jalur atau jalan dengan posisi yang mengacak, 1 smiley atau pemain.
Keadaan tujuan = smiley atau pemain harus terus menghindar dari tabrakan sampai score tertinggi.
3. Aturan-aturan
a. Pemain harus melewati jalan atau jalur sampai menuju finish.
b. Pemain tidak boleh bertabrakan dengan rintangan yang ada.
c. Untuk menang dalam permainan ini, life point minimal 1.

2.2. Algoritma

Penulisan ini akan membahas implementasi algoritma A* dan algoritma Branch and Bound dalam pemodelan AI dalam permainan Horrible Racing.

2.2.1. Algoritma A*

Algoritma A* ( A-star algorithm ) dipakai untuk pathfinding. Pathfinding dilakukan untuk mencari jalan paling dekat yang dapat ditempuh dari satu tempat ke tempat yang lain. Algoritma A* didasari oleh sebuah

3
persamaan sebuah empat benda yang sedang berjalan dari satu tempat ke tempat yang lain : F(s) = G(s) + H(s).
Dimana : F(s) adalah jarak dari awal ke tempat akhir, G(s) adalah jarak yang sudah ditempuh oleh benda itu dari tempat awal, dan H(s) adalah jarak yang sudah ditempuh oleh benda itu berada ke tempat akhir.
Beberapa terminologi dasar yang terdapat pada algoritma ini adalah starting point, simpul (nodes), A, open list, closed list, harga (cost), halangan (unwalkable).
• Starting point adalah sebuah terminologi untuk posisi awal.
• A adalah simpul atau node yang sedang dijalankan dalam algoritma.
• Open list adalah tempat menyimpan data simpul yang mungkin diakses dari starting point.
• Closed list adalah tempat menyimpan data simpul sebelum A.
• Harga (F) adalah nilai yang diperoleh dari penjumlahan nilai G, jumlah nilai tiap simpul dalam jalur terpendek dari starting point ke A, dan H, jumlah nilai perkira dari sebuah simpul sampai di simpul terakhir atau tujuan.
• Simpul tujuan yaitu simpul yang dituju.
• Rintangan atau halangan adalah sebuah atribut yang menyatakan bahwa sebuah simpul tidak dapat dilalui oleh A.

2.2.2. Algoritma Branch and Bound

Persoalan pencarian jalan (path-finding) adalah persoalan mencari lintasan dari titik awal menuju titik akhir yang ditentukan melewati hambatan yang ada. Cara penyelesaian persoalan path-finding dengan menggunakan algoritma brounch and bound dengan menggunakan suatu fungsi heuristic sederhana. Algoritma branch and bound juga merupakan metode pencarian di dalam ruang solusi secara sistematis. Pada algoritma B&B, pencarian ke simpul solusi dapat dipercepat dengan memilih simpul hidup berdasarkan nilai (cost). Pada praktiknya, nilai batas untuk setiap simpul umumnya berupa perkiraan.

4
Fungsi heuristic untuk menghitung perkiraan nilai dapat dinyatakan secara umum sebagai berikut :
c(i) = f(i) + g(i)
dimana :
c(i) = ongkos untuk simpul i
f(i) = ongkos mencapai simpul i dari akar
g(i) = ongkod mencapai simpul tujuan dari simpul akar i
Nilai c digunakan untuk mengurutkan pencarian. Simpul berikutnya yang dipilih untuk diekspansi adalah simpul yang memiliki c minimum.
Algoritma B&B jika ditulis secara prosedural :
1. Masukkan simpul akar ke dalam antrian Q. Jika simpul akar adalah simpul solusi (goal node), maka solusi telah ditemukan. Stop.
2. Jika Q kosong, tidak ada solusi. Stop.
3. Jika Q tidak kosong, pilih dari antrian Q simpul i yang mempunyai c(i) paling kecil. Jika terdapat beberapa simpul i yang memenuhi, pilih satu secara sembarang.
4. Jika simpul i adalah simpul solusi, berarti solusi sudah ditemukan, stop. Jika simpul i bukan simpul solusi, maka bangkitkan semua anak-anaknya. Jika i tidak mempunyai anak, kembali ke langkah 2.
5. Untuk setiap anak j dari simpul i, hitung c(i), dan masukkan semua anak-anak tersebut ke dalam antrian Q.
6. Kembali ke langkah 2.
Berikut ini adalah algoritma yang digunakan dalam permainan ini :
1. Buat jalur serta pasang karakter di tengah jalur dan pasang juga rintangan di dalam jalur.
2. Acak angka untuk menentukan posisi awal karakter dan rintangan.
3. Rintangan bergerak mendekati untuk menabrakan ke pemain menggunakan jalur terpendek untuk menghampirinya.
4. Karakter bergerak ke kanan atau ke kiri untuk menghindari tabrakan.
5. Jika karakter tertabrak maka point untuk nyawa dari pemain akan berkurang.
6. Jika karakter terus menghindar dari tabrakan maka score akan terus bertambah.

5
2.3. Konsep Permainan

Konsep permainan yang diterapkan dalam permainan ini adalah pemain harus berjalan melalui jalur atau track sampai menuju finish, namun terdapat rintangan yang harus dilewati pemain yaitu harus menghindari musuh dan jangan sampai tertabrak. Dalam permainan ini musuh pemain adalah semua karakter yang digunakan sebagai penghalang. Agar tidak bertabrakan, pemain harus berhati-hati. Hal yang harus dilakukan adalah menghindari rintangan tersebut dengan bergerak ke kiri dan ke kanan dengan menggunakan tombol panah kiri () dan panah kanan () yang ada pada keyboard.
Ketika pemain berhasil berjalan tanpa hambatan atau melewati satu rintangan maka poin akan bertambah satu poin, poin ini akan terus bertambah sesuai dengan kelipatannya dan disaat nilai yang didapat mencapai poin 50 dan kelipatannya, maka kecepatan rintangan tersebut akan semakin bertambah. Namun apabila pemain bertabrakan, maka life point akan berkurang satu, permainan akan berhenti jika pemain bertabrakan dengan rintangan sebanyak nyawa yang dimiliki. Jika sisa nyawa pemain habis, maka pemain dinyatakan kalah. Pemain dinyatakan menang jika semua rintangan dapat dilewati dengan baik, sisa nyawa yang dimiliki minimal satu. Jika ingin tambah seru bisa memilih menu +level dalam menu bar yang ada, maka kecepatan rintangan tersebut akan bertambah.

6
2.3.1. Flowchart

Berikut adalah tampilan flowchart dari permainan Horrible Racing :

Gambar 1 (diagram alur permainan horrible racing)

Diagram diatas adalah diagram yang sederhana untuk menntukan langkah pemain yang dimulai dari start. Pemain untuk menghindari rintangan agar sampai di finish. Penjelasan alurnya sebagai berikut :
Pertama pada kondisi flowchart di atas, pemain akan melihat kondisi apakah ada halangan, jika ya maka akan melakukan proses geser ke kanan atau ke kiri, tetapi jika tidak ada rintangan maka pemain akan tetap lurus atau diam di posisi. Setelah berhasil melewati rintangan maka pemain akan naik ke level selanjutnya. Jika semua rintangan berhasil terlewati maka akan mencapai finish.

7
2.3.2. Rancangan Tampilan

Berikut ini merupakan rancangan tampilan pada permainan Horrible Racing :

Gambar 2 (Rancangan Tampilan)

Keterangan gambar :
: merupakan karakter yang digunakan sebagai lawan dalam permainan ini.
: merupakan karakter yang digunakan pemain dalam permainan ini.
: digunakan untuk mengetahui score dari pemain.
: digunakan untuk mengetahui sisa nyawa dari pemain.

8
2.3.3. Tampilan Output

Gambar 3 (Tampilan output saat program dijalankan)

Permainan dimulai dengan menjalankan run di strawbery prolog. Pemain atau karakter yang digunakan akan muncul pada satu posisi di tengah dan dapat berjalan di jalur dengan menggunakan tombol panah  dan  pada keyboard. Selama karakter jalan perlangkah maka akan mendapatkan nilai satu. Di sepanjang jalur terdapat rintangan yang dijalankan oleh komputer, jika karakter behasil mendapatkan nilai 50 maka level akan naik secara otomatis tingkat kesulitan bertambah, dimana kondisi rintangan akan mengalami penambahan kecepatan, hal ini akan terus berjalan jika pemain dapat melewati kelipatan dari 50. Hal ini tentunta akan menambah seru permainan. Pemain dinyatakan kalah jika lifes-nya 0 yang diakibatkan terlalu sering bertabrakan dengan rintangan dan pemain akan dinyatakan menang pada saat sampai di finish dengan selamat.

2.3.4. Implementasi Kode Program
Pada bagian ini penulis akan membahas dalam pembuatan aplikasi game Horrible Racing yaitu implementasi kode program. Penulis hanya menyediakan potongan kode program dalam implementasi kode program. Untuk melihat program lengkap dapat dilihat pada lampiran program dan output.

9
Tampilan awal dan proses program

Koding berikut adalah untuk menentukan ukuran window, warna background, posisi awal pemain, dan proses permainan. Di kondisi awal sebelum dimodifikasi ,permainan horribel racing disini memiliki warna backgroud biru muda dan jumlah life point sebanyak sepuluh kali. Setelah dimodifikasi background menjadi warna biru muda.
?-
G_Lifes:=10,
G_Counter:=0,
G_Times:=5,
G_Score:=0,
G_Depth:=10,
G_Crashed:=0,
G_Col1:=0, G_Col2:=0, G_Col3:=0,
G_Pos:=2,
G_OldPos:=GPos,
G_Pen0:= pen(1, rgb(155, 155, 255)),
G_Pen1:= pen(1, rgb(255, 255, 255)),
G_Brush0:= brush(rgb(233, 250, 230)),
G_Brush1:= brush(rgb(100, 0, 0)),
G_Brush2:= brush(rgb(19, 248, 8)),
G_Brush3:= brush(rgb(231, 19, 201)),
G_Brush4:= brush(rgb(255, 255, 255)),
G_Brush5:= brush(rgb(0, 0, 0)),
window(G_Wnd, _, win_func(_), “Horrible Racing”, 120, 0, 220, 620).

Tampilan Pilihan menu serta kendali
Koding berikut kita gunakan untuk menambahkan pilihan pada menu barnya.Pada program awalnya,menu tersebut belum tersedia,tetapi setelah di modifikasi ada penambahan pada menu barnya yang antara lain tambah level,keluar dan info mengenai kelompok yang mengerjakan projek ini.
win_func(init):-
G_Timer:=set_timer(G_Wnd, 0.15, time_func),
menu(normal, _, _, menu_baru(_), “&+Level”),
menu(normal, _, _, menu_keluar(_), “&Keluar”),
menu(right,_,_,info(_),”&info”).

menu_baru(press) :-
G_P = 0,
G_Clicked = 0,
G_Timer:=set_timer(G_Wnd, 0.15, time_func).

10
menu_keluar(press) :-
close_window(_).

info(press):-
message(“Info”, “Kelompok:\nDhimas\nFany\nDeshita\nDhieta”, i),
write(“OK”), nl.
win_func(key_down(37, _)) :-
(G_Pos > 1 -> G_OldPos:=G_Pos, G_Pos:=G_Pos – 1), draw_car.
win_func(mouse_click(_, _)) :-
(G_Pos > 1 -> G_OldPos:=G_Pos, G_Pos:=G_Pos – 1), draw_car.
win_func(key_down(39, _)) :-
(G_Pos G_OldPos:=G_Pos, G_Pos:=G_Pos + 1), draw_car.
win_func(r_mouse_click(_, _)) :-
(G_Pos G_OldPos:=G_Pos, G_Pos:=G_Pos + 1), draw_car.
win_func(paint):- draw.

Tampilan saat karakter di gerakkan
Koding berikut ini merupakan koding yang digunakan untuk membentuk karakter saat karakter tersebut berpindah tempat.Pada awalnya tampilan pada karakter masih berbentuk bulat saat di gerakkan,tetapi setelah di modifikasi maka karakter disesuaikan dengan keinginan pengedit.
draw_car:-
pen(G_Pen0), brush(G_Brush0),
Pos:=G_Pos*60- 40,
pen(G_Pen1), brush(G_Brush1),
rect(Pos, 420, Pos+40, 460),
Pos:=G_OldPos*60- 40,
brush(G_Brush5),
rect(Pos+7- G_Crashed, 428- G_Crashed, Pos+15+G_Crashed, 439+G_Crashed),
brush(G_Brush5),
rect(Pos+25- G_Crashed, 428- G_Crashed, Pos+33+G_Crashed, 439+G_Crashed),
brush(G_Brush4),
rect(Pos+13- G_Crashed, 447- G_Crashed, Pos+27+G_Crashed, 453+G_Crashed).

11
Tampilan Untuk Karakter Diam dan Karakter Rintangan
Koding berikut ini merupakan koding yang digunakan untuk membentuk karakter diam dan karakter yang digunakan untuk membuat rintangan. Bentuk dari karakter yang digunakan untuk rintangan dengan bentuk ellipse dan kotak.
draw:-
pen(G_Pen0), brush(G_Brush0),
rect(0, 0, 300, 600),
color_text_back(G_Wnd, rgb(155, 155, 255)),
color_text(G_Wnd, rgb(255, 255, 0)),
text_out(10, 512, “Score : “+print(G_Score)),
text_out(10, 530, “Lifes : “+print(G_Lifes)),
Pos:=G_Pos*60- 40,
pen(G_Pen1), brush(G_Brush1),
rect(Pos, 420, Pos+40, 460),
brush(G_Brush2),
ellipse(Pos+7- G_Crashed, 428- G_Crashed, Pos+15+G_Crashed, 439+G_Crashed),
brush(G_Brush2),
ellipse(Pos+25- G_Crashed, 428- G_Crashed, Pos+33+G_Crashed, 439+G_Crashed),
brush(G_Brush3),
ellipse(Pos+13- G_Crashed, 447- G_Crashed, Pos+27+G_Crashed, 453+G_Crashed),
Mask:= 1 < 0 -> ellipse(20, I*40- 25, 47, I*40, 10, 10)),
(G_Col2 /\ Mask > 0 -> round_rect(80, I*40- 20, 120, I*40, 10, 10)),
(G_Col3 /\ Mask > 0 -> ellipse(140, I*40- 20, 170, I*40, 20, 70)),
Mask:= Mask >> 1, fail
).

Tampilan Untuk Menggerakkan Rintangan dan Penentuan Score
Berikut adalah koding yang digunakan untuk menggerakkan balok yang dijalankan oleh komputer dengan konsep AI untuk menghalangi pergerakan pemain serta penambahan level saat nilai pemain berada pada posisi yang ditentutkan untuk menambah level.
time_func(end):-
G_Counter:=G_Counter+1,
(G_Counter >= G_Times ->
G_Score:=G_Score+1,
G_Crashed:=0,

12
Pos:=random(300) // 100 + 1, put_trap(Pos),
once(crash(Z)),
(Z =:= G_Pos -> beep, G_Lifes:= G_Lifes- 1, G_Crashed:=3),
(G_Lifes = kill_timer(G_Wnd, G_Score=20)),
G_Col1:=G_Col1>>1, G_Col2:=G_Col2>>1, G_Col3:=G_Col3>>1,
G_Counter:=0,
G_Times:= (200- G_Score) // 40,
draw
).

Tampilan Untuk Menentukan Posisi Rintangan

Program ini digunakan untuk menetukan posisi balok secara acak dan juga membuat posisi lawan dan pemain berada pada posisi yang sama akan dinyatakan menabrak dan life point akan berkurang.
put_trap(1):- G_Col1:= G_Col1 \/ (1 << G_Depth).
put_trap(2):- G_Col2:= G_Col2 \/ (1 << G_Depth).
put_trap(3):- G_Col3:= G_Col3 \/ (1 < 0, G_Pos =:= 1.
crash(2):- G_Col2 /\ 1 > 0, G_Pos =:= 2.
crash(3):- G_Col3 /\ 1 > 0, G_Pos =:= 3.
crash(4).

13
2.4. Uji Coba Program

Berikut ini adalah keterangan beberapa langkag pada saat pemain memulai permainan ini. Pertama pengguna instal terlebih dahulu Strawbery prolog pada komputer. Tampilan Strawbery prolog dapat dilihat pada (gambar 3).
Gambar 3 (tampilan jendela strawbey prolog)

Setelah jendela Strawbery prolog muncul maka pilih “file” pengguna buka folder yang menyimpan data permainan. Kemudian pengguna compile dan run program horrible racing. Seperti pada gambar 3.

Gambar 4 (Tampilan program saat running)
Gambar diatas merupakan gambar yang akan muncul pada saat kita telah melakukan compile dan running program. Permainannya yaitu bagaimana caranya kita untuk selalu menghindari dari rintangan yang terus berdatangan.
14
Score akan bertambah setiap rintangan yang datang.Life akan berkurang jika rintangan tersebut menabrak karakternya dan ekspresi yang dihasilkan seperti pada gambar 5.

Gambar 5(Tampilan saat membentur rintangan)
Kemudian karena disini lama permainan kita di tentukan oleh lifes,maka dapat disimpulkan pemain akan kalah.Berikut ini tampilan saat kalah.

15

Gambar 6 (Tampilan saat kalah)

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: