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.