Tuesday, May 27, 2014

Tugas Pengantar Teknologi Game 2



Tic-Tac-Toe
Pada kesempata kali ini saya akan membuat sebuah game tic-tac-toe. langsung saja penjelasannya dibawah ini..

Cara Main
Pada Game ini diawalnya terdiri dari 9 petak kosong yang tersusun oleh 3 baris dan 3 kolom yang dipakai untuk bermain di dalam game ini,sebenarnya ada beberapa jenis bentuk petak pada game ini yaitu seperti 4x4 yang terdiri dari 4 baris dan 4 kolom ada juga yang 5x5 dsb kebetulan saya memakai yang 3x3.  Di dalam permainan ini terdapat  2 karakter yaitu satu karakter yang digunakan untuk user yang berbentuk “kepala kucing” dan satu karakter yang digunakan oleh komputer yang berbentuk “tangan kucing” sebagai lawan kita. Pada permainan ini hanya dimainkan oleh 1 user sedangkan  komputer bertindak sebagai lawan.  User atau kita dapat menaruh karakter pada area permainan yang telah disediakan.
  
 Strawberry Prolog
 Strawberry prolog, kita bahas terlebih dahulu tentang PROLOG, PROLOG adalah sebuah bahasa pemrograman yang dirancang oleh Alain Colmenraurer dan P. Roussel di Universitas Marseilles Prancis pada tahun 1972, PROLOG merupakan sebuah singkatan dari Programing in Logic (dalam bahasa Pranci programmation en logique), di Eropa sana, bahasa pemrograman ini populer digunakan untuk membuat sebuah aplikasi atau game berbasiskan Artificial Intelligence atau kecerdasan buatan.
Bahasa pemrograman PROLOG tidak memilki aturan khusus seperti adanya prosedur atau tetek bengeknya yang ada pada bahasa pemrograman lain dikarenakan bahasa pemrograman PROLOG ini tergolong “Declarative Language“, tidak ada prosedur didalamnya, tetapi terdapat kumpulan data-data objek (fakta) yang akan diolah, dan relasi antara objek tersebut akan membentuk sebuah aturan (rule) yang diperlukan untuk mencapai suatu goal (tujuannya).
Penerapan PROLOG ini cukup banyak diterapkan pada bidang-bidang tertentu, berikut contoh penerapannya :
  • Sistem Pakar (Expert System)
  • Pengolahan Bahasa Alami (Natural Language Processing)
  • Robotika
  • Pengenalan Pola (Pattern Recognition)
  • Pembelajaran (Learning)

Pembuatan
Pada kesempatan ini saya akan coba menjelaskan cara membuat Game Tic-Tac-Toe ini yang dibuat dengan program Strawberry Prolog..
Pertama kita buat codingan seperti dibawah ini di awal program harus ada tanda “?-“ sebagai pendeklarasian awal program lalu lanjut ke ::
   “G_Br=0, %brush” ini sebagai deklarasi untuk Brush atau tampilan background.
   “G_N=50, %timer” kemudian ini untuk mendeklarasikan timer.
Untuk yang dibawah ini berguna untuk mendeklarasikan atau memasukan image yang kita inginkan dengan format gambarnya bitmap.
   G_gue is bitmap_image("jitac\\kucing.bmp",_),
   G_loe is bitmap_image("jitac\\kucing10.bmp",_),
Selanjutnya saya buat untuk menampilkan pesan pembuka pada program saat dijalankan nanti yaitu dengan mengetikan: 



set(currscore(0)),read(Name,"siapa nama loe"),set(hisname(Name)),
   set(currscore(1)),read(Umur,"berapa umur loe"),set(hisumur(Umur)),
yang akan memunculkan tampilan seperti ini ::




Lalu kita ketikan ini::
   set(pos([[f,f,f], [f,f,f], [f,f,f]])),
   set(lose_flag(false)),
   brush(system_color(window)),
   window( _, _, win_func(_), "Tick-Tack-Toe", 200, 200, 496, 550).
gunanya untuk menset tampilan pada layarnya.
Kemudian kita lanjutkan dengan mengetikan ::
put_mark(Mark) :-
   pos(Current_Pos),
   member(Current_Pos, L, Y),
   member(L, Mark, X),
   X1 is 80 + 120*X, Y1 is 80 + 120*Y, X2 is X1 + 80, Y2 is Y1 +80,
   write_mark(Mark, X1, Y1, X2, Y2),
   fail.
put_mark(_).
Yang berfungsi untuk menentukan kordinat dari bidak atau karakter yang kita mainkan letaknya dimana.



Kalau yang dibawah ini untuk memasukan setingan gambar yang sudah kita deklarasikan diatas untuk dapat dimainkan didalam game sebagai karakter kita ::
  write_mark(x, X1, Y1, X2, Y2) :-
   draw_bitmap(X1, Y1, G_gue,_ ,_).
write_mark(o, X1, Y1, X2, Y2) :-
   draw_bitmap(X1, Y1, G_loe,_ ,_).
  


Selanjutnya kalau kita ingin memasukan menu maka kita ketikan ini,pada menu ini kita dapat memilih letak menu tersebut dimana seperti normal(di pojok kiri), Right(di pojok kanan), dan Pop up(dia akan sebagai induk menu yang dapat di taruh sub menunya) ::
win_func(init):-
menu(pop_up,_,_,menu_Game(_), "&Game"),
menu(normal,_,_,menu_brush(_), "&Brush"),
menu(normal,_,_,menu_about(_), "&About"),
menu(normal,_,_,menu_Exit(_), "&Exit"),
menu(right,_,_,menu_help(_), "&Help").
menu(right,_,_,menu_help(_), "&Help").



win_func(paint) :-     
   pen(2, rgb(255, 0, 0)), “berfungsi untuk menampilkan warna tabelnya   dengan pen sebagai alat gambarnya
   line(60, 60, 60, 420),   
   line(60, 420, 420, 420),  “dan Line itu sendiri untuk membuat garisnya”
   line(420, 420, 420, 60),
   line(420, 60, 60, 60),
   line(180, 60, 180, 420),
   line(300, 60, 300, 420),
   line(60, 180, 420, 180),
   line(60, 300, 420, 300),
   pen(4, rgb(255, 0, 0)),
   put_mark(x),
   pen(4, rgb(0, 0, 255)),
   put_mark(o),
   fail.
Table atau petak-petak pada tampilan ini dibuat dengan kodingan seperti diatas ini dengan fungsi masing-masing.
Kemudian kita harus membuat kodingan yang berfungsi sebagai tombol klik kita yang menjalankan permainan atau yang menaruh karakternya ::
win_func(mouse_click(X, Y)) :-
  lose_flag(false),
  X>60, Y>60,
  X<420, Y<420,
  X1 is (X - 60)//120,
  Y1 is (Y - 60)//120,
  pos(Current_Pos),
  member(Current_Pos, L, Y1),
  member(L, f, X1),
  !,
  replace(L2, L, x, X1),
  replace(Current_Pos2, Current_Pos, L2, Y1),
  set(pos(Current_Pos2)),
  not(win_func(paint)),
  think(Current_Pos2).

win_func(mouse_click(X, Y)) :-
  beep.                         “ini berfungsi sebagai suara jika kita klik”

Selanjutnya pada game ini terdapat Timer yang berfungsi memberitahu waktu berakhirnya permainan cara untuk memasukan waktu ke dalam game ini dengan cara mengetikan ::
win_func(paint):-
G_waktu is set_timer(_,1,time_func).
time_func(end):-
(G_N=:=0->
kill_timer(_,G_waktu),
message("Surat!!","waktunya abiss ha ha",i)
else
G_N <>=G_N-1),
T is printq(G_N),
text_out(10, 10, "Time : "+print(T)),
beep.
G_N ini sudah dideklarasikan diatas sebagai tempat lamanya waktu yang ingin kita buat..
Berikutnya:
is_it_win(Sit2) :-
  victory(o, Sit2),
  set(pos(Sit2)),
  not(win_func(paint)),
  set(lose_flag(true)),
  message("Maap nih!","loe kalahhh :)",s),
close_window(_).

is_it_win(Sit2) :-
  win(x, Sit2),
  set(pos(Sit2)),
  not(win_func(paint)).
Ini adalah potongan dari kodingan untuk mengecek kejadian menang atau kalah versi fullnya dapat dilihat di listing atas dipotongan ini dia mengecek jika kita kalah, maka akan keluar pesan. : 
Pada game ini tentunya terdapat AI sebagai lawan kita,untuk memasukan AI ke game Tic-Tac-Toe ini anda harus mengetikan koding seperti berikut:
member([Element, _, _], Element, 0).
member([_, Element, _], Element, 1).
member([_, _, Element], Element, 2).

replace([Element, A, B], [_, A, B], Element, 0).
replace([A, Element, B], [A, _, B], Element, 1).
replace([A, B, Element], [A, B, _], Element, 2).

Ini berguna untuk menentukan letak AI itu berjalan kita dapat menentukan letak AI itu berjalan bisa mengusakan dia menang ataupun memblok kita. Tentunya ini hanya versi fullnya di listing atas J lalu ini juga potongannya,sama seperti yang sebelumnya ini juga untuk menentukan letak AI itu berada bedanya adalah yang sebelumnya untuk meletakan saja sedangkan yang ini sebagai otaknya untuk AI itu berjalan agar menhalangi kita menang.

lose( x, Sit) :- move(x, Sit, Sit2), lose(o, Sit2).
lose( o, Sit) :- victory(x, Sit).
lose( o, Sit) :- not(nolose( o, Sit)).

nolose(o, Sit) :- not(move(Sit)). % the last move belongs to X
nolose(o, Sit) :- move(o, Sit, Sit2), nolose(x, Sit2).
nolose( x, Sit) :- victory(o, Sit).
nolose(x, Sit) :- not(lose(x, Sit)).

Bila tadi sebelumnya kita sudah membuat menu maka kita akan mencoba membuat sub menu nya dengan cara :
            menu_Game(init):-
     menu(normal, _,_,menu_newGame(_),"NewGame"),
     menu(separator, _,_,fail(_),_),
     menu(normal,_,_,menu_play(_),"Play"),
     menu(separator, _,_,fail(_),_),
     menu(normal, _,_,menu_Exit(_),"Exit").
Sub menu ini terdapat di dalam menu Game, disitu ada perintah yang berisikan “separator”ini berfungsi untuk membuat garis pemisah antara menu satu dengan yang lain.




Lalu  kita buat menu Brush yang berfungsi untuk mengganti tampilan background pada layar disini saya buat contoh 5 background dan bisa ditambah lagi sesukany:
menu_brush(press) :-
     new_brush(G_Br),
     update_window(_),
     G_Br:= (G_Br+1) mod 5.
        
new_brush(0) :- window_brush(_, "jitac/aha.bmp").
new_brush(1) :- window_brush(_, "jitac/uta.bmp").
new_brush(2) :- window_brush(_, "jitac/kiti.bmp").
new_brush(3) :- window_brush(_, "jitac/kutu.bmp").
new_brush(4) :- window_brush(_, rgb(255, 0, 0), '/').

G_Br itu sendiri sudah di deklarasikan di atas agar dapat muncul dan berjalan pada programnya.