UNIVERSITAS GUNADARMA
PENGANTAR TEKNOLOGI GAME
MANUAL BOOK
“THE CRAZY SYMBOL TIC TAC TOE 8 x 8”
Nama : Syifa Darul Khodidjah
NPM : 57412266
Jurusan : Teknik Informatika
Fakultas : Teknologi Industri
INITIAL STATE
Game the crazy symbol ini merupakan permainan tic – tac – toe 8×8 yang terdiri dari 64 petak kosong yang tersusun oleh 8 baris dan 8 kolom yang nantinya akan digunakan dalam permainan. Permainan ini menggunakan 2 karakter yaitu karakter gambar orang yang digunakan untuk user dan karakter simbol yang digunakan oleh komputer. Permainan ini dimainkan oleh 1 user, sedangkan komputer bertindak sebagai lawan. Pada tampilan awal permainan ini, user akan melihat kotak game dan bisa langsung memulai permainan dengan mengklik salah satu kotak yang ada di dalam permainan ini. Pada permainan tampilan awal permainan ini, terdapat tampilan menu yang bertujuan untuk membantu user. Tampilan menu tersebut berisi NewGame, back , exit dan help. Newgame berfungsi untuk melakukan kembali permainan ke awal permainan jika user telah selesai melakukan permainan atau ditengah-tengah jalan user sudah menyerah, back digunakan untuk kembali ke menu awal sebelumnya, exit digunakan untuk keluar dari permainan dan help digunakan untuk petunjuk permainan.
Tampilan Awal Permainan
Tampilan Ketika User Menang
Tampilan Ketika User Kalah |
Tampilan Splash Screen |
Tampilan Menu Awal |
Tampilan Menu AboutMe |
Tampilan Menu Help
Tampilan Menu Exit
RULES
Aturan main (rule) pada the crazy symbol adalah sebagai berikut:
- Pada awal permainan user menentukan letak objek yang akan dimainkan dengan cara mengklik ke area yang diinginkan didalam area permainan.
- Komputer diberi pembelajaran untuk menghalangi jalan user untuk mencapai Goal (Tujuan).
- Komputer juga diberi pembelajaran untuk mencapai Goal (tujuan).
- Jika tempat sudah diisikan karakter, maka tidak dapat menaruh kembali ke tempat yang sama.
- Jika papan permainan sudah terisi penuh maka pemain harus mulai dari awal lagi yaitu dengan cara mengklik new game.
GOALS
Game ini akan berakhir dengan sebuah goal yang harus dicapai dalam setiap permainannya. Goal dalam game ini adalah pemain (manusia dan computer) diharuskan agar membentuk garis lurus dari karakter-karakter. Karakter gambar orang untuk pemain dan karakter symbol untuk computer. Garis yang terbentuk terdiri dari 4 karakter secara horizontal, vertical , diagonal dan 6 baris diagonal. Untuk garis diagonal, diharuskan membentuk garis hingga ujung, tidak boleh ada kotak kosong atau terisi karakter lain didepannya. Jika user menang dalam permainan, maka akan keluar pesan “KAMU MENANG!!! SELAMAT!!”. Jika user kalah dan komputer yang menang maka akan keluar pesan “kalah ya? Kasian…”. Jika pemain terdesak dan tidak memungkinkan untuk menang maka akan keluar pesan “permainan seri,silahkan coba
KONSEP AI
Game the crazy symbol ini adalah sebuah game yang berbasis AI (Artificial Intelliginece) atau kecerdasan buatan. Kecerdasan buatan dapat diterapkan atau dimplementasikan kedalam berbagai bentuk aplikasi. Bentuk implementasi yang paling mudah untuk diukur tingkat keberhasilan dan cukup digemari oleh sebagain besar publik yaitu pada games atau permainan. Game ini dibuat berfikir layaknya seorang manusia hingga dapat dikatakan cerdas.
Algoritma yang dipakai
Pada game ini,kita menggunakan algoritma minimax, algoritma minimax itu sendiri merupakan algoritma yang digunakan untuk menentukan pilihan agar memperkecil kemungkinan kehilangan nilai maksimal. Algoitma ini diterapkan dalam permainan yang melibatkan dua pemain seperti halnya the crazy symbol ini. Aplikasi algoritma minimax pada games ini adalah komputer dapat menyerang user dimana komputer bisa berpikir kapan komputer menyerang user dan kapan komputer bertahan. Diharapkan akan hasil game yang interaktif dengan menerapkan algoritma minimax ini sebagai pondasi suatu kecerdasan buatan pada permainan. Maksud dari menyerang user adalah komputer dapat memenangkan permainan ini atau dengan kata lain mencapai goal(tujuan). Kemudian maksud dari bertahan adalah berusaha menggagalkan kesempatan untuk menang yang diraih oleh user. Oleh sebab itu, langkah komputer(lawan) menyerang disebut juga maximizing player dan langkah komputer(lawan) bertahan disebut juga minimizing player. Algoritma minimax merupakan basis dari semua permainan berbasis Artificial Intelligence, dimana algoritma ini akan melakukan pengecekan pada seluruh kemungkinan yang ada sampai akhir permainan dilakukan. Pengecekan tersebut akan menghasilkan pohon permainan yang berisi semua kemungkinan tersebut.
Listing Program
%==Nama : Syifa Darul Khodidjah ==============================================%
%==Kelas: 3IA07 ==============================================%
%==NPM : 57412266 ==============================================%
win_deep(0). % semakin besar kedua nilai ini semakin pintar AI%
nolose_deep(0).
?-
%========= DEKLARASI GAMBAR ==========%
G_background is bitmap_image(“kok.bmp”,_),
G_splash is bitmap_image(“x.bmp”,_),
G_cover is bitmap_image(“kai.bmp”,_),
G_x is bitmap_image(“lu.bmp”,_),
G_o is bitmap_image(“s.bmp”,_),
set(pos([[f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f],
[f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f],[f,f,f,f,f,f,f,f]])),
set(lose_flag(false)),
brush(system_color(window)),
window(G_tvt, _, window_pertama(_), ” LOADING ….. “, 400, 200, 500, 500).
%========================== FUNGSI TIMER ===================================%
window_pertama(paint):-
draw_bitmap(0,0,G_splash,_,_),
G_batas := 1,
G_waktu is set_timer(_,0.01,fungsi_timer).
fungsi_timer(end):-
text_out(230,160,print(G_batas + “%”)),
G_batas := G_batas + 1,
(G_batas = 100 -> close_window(G_tvt),
beep(“xo.wav”),
window(G_tbt,_,window_kedua(_),” SELAMAT DATANG DI PERMAINAN TIC TAC TOE 8×8 “,400,200,600,450)).
%============================== MENU AWAL ============================%
window_kedua(paint):-
draw_bitmap(0,0,G_background,_,_),
button(_,_,start(_),” START GAME “,400,30,130,35),
button(_,_,about(_),” ABOUT ME”,400,80,130,35),
button(_,_,exit(_),” EXIT “,400,130,130,35).
start(press):-
close_window(G_tbt),
window(G_menutama,_,window_ketiga(_),” THE CRAZY SYMBOL TIC TAC TOE 8×8 “,400,200,950,620),
beep(“o.wav”).
about(press):-
beep(“jagi.wav”),
message(“about”,”THE CRAZY SYMBOL Tic Tac Toe 8 X 8
My Name IS Syifa Darul Khodidjah
3IA07
57412266
LABORATORIUM TEKNIK INFORMATIKA
UNIVERSITAS GUNADARMA
2014″,i).
exit(press):-
close_window(G_tbt),
fail.
%======= WINDOW START GAME ==========%
window_ketiga(init) :-
menu(normal, _, _, menu_new(_), “&New Game”), %untuk membuat menu%
menu(normal,_,_,menu_help(_),”Help”),
menu(normal, _, _, menu_back(_), “&back”),
menu(normal, _, _, menu_exit(_), “&Exit”).
menu_new(press) :-
set(pos([[f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f],
[f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f], [f,f,f,f,f,f,f,f]])),
set(lose_flag(false)),
update_window(_).
window_ketiga(close):- %—-> isi menu keluar
ask.
ask:-
yes_no( “Exit”,” YAKIN MAU KELUAR “, ?),
!,message(“Yes”, ” NE, ARASSO! GOMAWOYO “,!),
end.
ask:-
message(“No”, ” AYOOO, MAIN lAGI ! “, s).
menu_help(press):-
beep(“bogo.wav”),
message(“Help”,” Tempatkan ikon dengan cara meng-klik di salah satu kotak.Susun hingga membentuk sebuah garis terdiri dari 8 simbol secara vertikal, horizontal ataupun diagonal.”,i).
menu_back(press) :-
close_window(G_kedua),
window(G_tbt,_,window_kedua(_),”Window Splash Screen”,400,200,720,450).
%=========== WINDOW EXIT =============%
menu_exit(press) :-
close_window(G_menutama),
close_window(_).
put_mark(Mark) :-
pos(Current_Pos),
member(Current_Pos, L, Y),
member(L, Mark, X),
X1 is 35 + 60*X, Y1 is 35 + 60*Y, X2 is X1 + 40, Y2 is Y1 +40, %untuk ngepasin ikon di dalam kotak%
write_mark(Mark, X1, Y1, X2, Y2),
fail.
put_mark(_).
write_mark(x, X1, Y1, X2, Y2) :-
draw_bitmap(X1, Y1,G_x,_,_).
write_mark(o, X1, Y1, X2, Y2) :-
draw_bitmap(X1, Y1,G_o,_,_).
%======= WINDOW PAPAN PERMAINAN ======%
window_ketiga(paint) :-
draw_bitmap(0,0,G_cover,_,_),
pen(4, rgb(255, 0, 0)),
%garisvertikal
line(30, 30, 30, 500),
line(30, 30, 510, 30),
line(510, 500, 510, 30),
line(510, 500, 30, 500),
line(90, 30, 90, 500),
line(150, 30, 150, 500),
line(210, 30, 210, 500),
line(270, 30, 270, 500),
line(330, 30, 330, 500),
line(390, 30, 390, 500),
line(450, 30, 450, 500),
%garishorizontal
pen(5,rgb(250,0,0)),
line(30,90,510,90),
line(30,150,510,150),
line(30,210,510,210),
line(30,260,510,260),
line(30,320,510,320),
line(30,380,510,380),
line(30,440,510,440),
pen(4, rgb(255, 128, 192)),
put_mark(x),
pen(4, rgb(0, 128, 255)),
put_mark(o),
fail.
window_ketiga(mouse_click(X, Y)) :-
beep(“a.wav”),
lose_flag(false),
X>35, Y>35,
X<510, Y<510, %untuk menampilkan ikon pada 8 kotak%
X1 is (X – 30)//60,
Y1 is (Y – 30)//60,
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(window_ketiga(paint)),
think(Current_Pos2).
window_ketiga(mouse_click(X, Y)) :-
beep.
think(Pos) :-
victory(x, Pos), !,
set(lose_flag(true)),
beep(“o.wav”),
message(“Unbelievable”,”Horee ! ! Menang.”,!).
think(Pos) :-
try_to_win(Pos), !.
think(Pos) :-
retractall(last_good_move(_)), try_nolose(Pos).
think(_) :-
last_good_move(Sit2), !,
set(pos(Sit2)),
not(window_ketiga(paint)).
think(Pos) :-
message(“Congratulations”, “Ayo kamu pasti menang.”, n),
move(o, Pos, Sit2),
nolose(x, Sit2, 0), !, % Tries to make the lose farther
set(pos(Sit2)),
not(window_ketiga(paint)).
think(Pos) :-
move(o, Pos, Sit2),
set(pos(Sit2)),
not(window_ketiga(paint)).
try_nolose(Pos) :-
move(o, Pos, Sit2),
nolose_deep(Deep),
nolose(x, Sit2, Deep),
set(last_good_move(Sit2)),
random(3)=:=0, !, fail. % this makes the game more interesting
try_to_win(Pos) :-
move(o, Pos, Sit2),
is_it_win(Sit2).
is_it_win(Sit2) :-
victory(o, Sit2),
set(pos(Sit2)),
not(window_ketiga(paint)),
set(lose_flag(true)),
beep(“selau.wav”),
message(“Sorry”,”Yah kalah.”,s).
is_it_win(Sit2) :-
win_deep(Deep),
win(x, Sit2, Deep),
set(pos(Sit2)),
not(window_ketiga(paint)),
message(“Advice”,”Cepetan dong jalan.”,i).
member([Element, _, _, _, _, _, _, _], Element, 0).
member([_, Element, _, _, _, _, _, _], Element, 1).
member([_, _, Element, _, _, _, _, _], Element, 2).
member([_, _, _, Element, _, _, _, _], Element, 3).
member([_, _, _, _, Element, _, _, _], Element, 4).
member([_, _, _, _, _, Element, _, _], Element, 5).
member([_, _, _, _, _, _, Element, _], Element, 6).
member([_, _, _, _, _, _, _, Element], Element, 7).
replace([Element, A, B, C, D, E, F, G], [_, A, B, C, D, E, F, G], Element, 0).
replace([A, Element, B, C, D, E, F, G], [A, _, B, C, D, E, F, G], Element, 1).
replace([A, B, Element, C, D, E, F, G], [A, B, _, C, D, E, F, G], Element, 2).
replace([A, B, C, Element, D, E, F, G], [A, B, C, _, D, E, F, G], Element, 3).
replace([A, B, C, D, Element, E, F, G], [A, B, C, D, _, E, F, G], Element, 4).
replace([A, B, C, D, E, Element, F, G], [A, B, C, D, E, _, F, G], Element, 5).
replace([A, B, C, D, E, F, Element, G], [A, B, C, D, E, F, _, G], Element, 6).
replace([A, B, C, D, E, F, G, Element], [A, B, C, D, E, F, G, _], Element, 7).
%====== kondisi menang horizontal ======%
victory( Who, [[Who, Who, Who, Who, Who, Who, Who, Who], %==1==%
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _, _],
[Who, Who, Who, Who, Who, Who, Who, Who], %==2==%
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[Who, Who, Who, Who, Who, Who, Who, Who], %==3==%
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[Who, Who, Who, Who, Who, Who, Who, Who], %==4==%
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[Who, Who, Who, Who, Who, Who, Who, Who], %==5==%
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[Who, Who, Who, Who, Who, Who, Who, Who], %==6==%
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[Who, Who, Who, Who, Who, Who, Who, Who], %==7==%
[_, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[_, _, _, _, _, _, _, _],
[Who, Who, Who, Who, Who, Who, Who, Who]]). %==8==%
%========= kondisi menang vertikal =======%
victory( Who, [[Who, _, _, _, _, _, _, _], %1%
[Who, _, _, _, _, _, _, _],
[Who, _, _, _, _, _, _, _],
[Who, _, _, _, _, _, _, _],
[Who, _, _, _, _, _, _, _],
[Who, _, _, _, _, _, _, _],
[Who, _, _, _, _, _, _, _],
[Who, _, _, _, _, _, _, _]]).
victory( Who, [[_, Who, _, _, _, _, _, _], %2%
[_, Who, _, _, _, _, _, _],
[_, Who, _, _, _, _, _, _],
[_, Who, _, _, _, _, _, _],
[_, Who, _, _, _, _, _, _],
[_, Who, _, _, _, _, _, _],
[_, Who, _, _, _, _, _, _],
[_, Who, _, _, _, _, _, _]]).
victory( Who, [[_, _, Who, _, _, _, _, _], %3%
[_, _, Who, _, _, _, _, _],
[_, _, Who, _, _, _, _, _],
[_, _, Who, _, _, _, _, _],
[_, _, Who, _, _, _, _, _],
[_, _, Who, _, _, _, _, _],
[_, _, Who, _, _, _, _, _],
[_, _, Who, _, _, _, _, _]]).
victory( Who, [[_, _, _, Who, _, _, _, _], %4%
[_, _, _, Who, _, _, _, _],
[_, _, _, Who, _, _, _, _],
[_, _, _, Who, _, _, _, _],
[_, _, _, Who, _, _, _, _],
[_, _, _, Who, _, _, _, _],
[_, _, _, Who, _, _, _, _],
[_, _, _, Who, _, _, _, _]]).
victory( Who, [[_, _, _, _, Who, _, _, _], %5%
[_, _, _, _, Who, _, _, _],
[_, _, _, _, Who, _, _, _],
[_, _, _, _, Who, _, _, _],
[_, _, _, _, Who, _, _, _],
[_, _, _, _, Who, _, _, _],
[_, _, _, _, Who, _, _, _],
[_, _, _, _, Who, _, _, _]]).
victory( Who, [[_, _, _, _, _, Who, _, _], %6%
[_, _, _, _, _, Who, _, _],
[_, _, _, _, _, Who, _, _],
[_, _, _, _, _, Who, _, _],
[_, _, _, _, _, Who, _, _],
[_, _, _, _, _, Who, _, _],
[_, _, _, _, _, Who, _, _],
[_, _, _, _, _, Who, _, _]]).
victory( Who, [[_, _, _, _, _, _, Who, _], %7%
[_, _, _, _, _, _, Who, _],
[_, _, _, _, _, _, Who, _],
[_, _, _, _, _, _, Who, _],
[_, _, _, _, _, _, Who, _],
[_, _, _, _, _, _, Who, _],
[_, _, _, _, _, _, Who, _],
[_, _, _, _, _, _, Who, _]]).
victory( Who, [[_, _, _, _, _, _, _, Who], %8%
[_, _, _, _, _, _, _, Who],
[_, _, _, _, _, _, _, Who],
[_, _, _, _, _, _, _, Who],
[_, _, _, _, _, _, _, Who],
[_, _, _, _, _, _, _, Who],
[_, _, _, _, _, _, _, Who],
[_, _, _, _, _, _, _, Who]]).
%===== kondisi menang diagonal 8 kotak ====%
victory( Who, [[Who, _, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _]]).
victory( Who, [[_, Who, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _]]).
victory( Who, [[_, _, Who, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, Who, _, _, _, _, _]]).
victory( Who, [[_, _, _, Who, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, Who, _, _, _, _]]).
victory( Who, [[_, _, _, _, Who, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, Who, _, _, _]]).
victory( Who, [[_, _, _, _, _, Who, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, Who, _, _]]).
victory( Who, [[_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, Who, _]]).
victory( Who, [[_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, _, Who]]).
victory( Who, [[Who, _, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, _, Who]]).
victory( Who, [[_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, Who, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [Who, _, _, _, _, _, _, _], [_, _, _, _, _, _, _, _]]).
victory( Who, [[_, Who, _, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, _, _, Who]]).
victory( Who, [[_, _, _, _, _, _, _, _], [_, _, _, _, _, _, _, Who], [_, _, _, _, _, _, Who, _], [_, _, _, _, _, Who, _, _], [_, _, _, _, Who, _, _, _], [_, _, _, Who, _, _, _, _], [_, _, Who, _, _, _, _, _], [_, Who, _, _, _, _, _, _]]).
win( o, Sit, Deep) :- move(o, Sit, Sit2), win(x, Sit2, Deep).
win( x, Sit, _) :- victory(o, Sit).
win( x, Sit, 0) :- !, fail.
win( x, Sit, Deep) :- Deep1 is Deep – 1, not(nowin( x, Sit, Deep1)).
nowin(x, Sit, _) :- not(move(Sit)). % the last move belongs to O
nowin(x, Sit, Deep) :- move(x, Sit, Sit2), nowin(o, Sit2, Deep).
nowin( o, Sit, _) :- victory(x, Sit).
nowin(o, Sit, Deep) :- not(win(o, Sit, Deep)).
lose( x, Sit, Deep) :- move(x, Sit, Sit2), lose(o, Sit2, Deep).
lose( o, Sit, _) :- victory(x, Sit).
lose( o, Sit, 0) :- !, fail.
lose( o, Sit, Deep) :- Deep1 is Deep – 1, not(nolose( o, Sit, Deep1)).
nolose(o, Sit, Deep) :- move(o, Sit, Sit2), nolose(x, Sit2, Deep).
nolose( x, Sit, _) :- victory(o, Sit).
nolose(x, Sit, _) :- not(move(Sit)). % the last move belongs to O
nolose(x, Sit, Deep) :- not(lose(x, Sit, Deep)).
move(P, Sit, Sit2) :-
member(Sit, L, Y),
member(L, f, X),
replace(L2, L, P, X),
replace(Sit2, Sit, L2, Y).
move(Sit) :-
member(Sit, L, _),
member(L, f, _).
DAFTAR PUSTAKA
- http://destyput-gamesquare.blogspot.com/
- http://rifaliandana.blogspot.com/2012/11/manual-book-rifastropic-tic-tac-toe-5×5.html
- http://nurrahmanp.blogspot.com/2014/05/progres-game-kriting-wajik-5×5.html
- http://fathiyahally.blogspot.com/2014/11/tictactoe-8×8-strawberry-prolog.html
Glousarium:
- Win_func():- = membuat fungsi dengan nama win_func.
- Is bitmap_image() = mendeklarasikan variabel gambar (.bmp)
- window(_,_,win_func(_)) = membuat jendela window
- message(_,_,!) = membuat kotak pesan
- draw_bitmap(_,_,_) = mendeklarasikan gambar
- write(_) = mencetak
- beep() = mendekrasikan suara
- win_func(paint):- = fungsi menggambar diwindow
- win_func(init) :- = fungsi proses diwindow
- % = komentar
- Close_window(_) = menutup window
- mouse_click(X,Y) = proses klik pada mouse
- win_func(press) = proses tekan pada mouse dan keyboard
- font(_) = bentuk huruf
- text_out(_) = mencetak huruf di window