Read more: http://danker-corporation.blogspot.com/2013/05/membuat-blog-anti-copy-paste_10.html#ixzz2WZpvvZja Dimas Reza Handika Prabowo: Project PKB - (Tick Tack Toe 8x8)

Pages

Wednesday 26 November 2014

Project PKB - (Tick Tack Toe 8x8)




 Wots Tick Tack Toe (8x8)

Pada semester 5 ini semua mahasiswa UG diwajibkan untuk membuat project Artificial intelligence(AI) dalam mata kulian pengantar kecerdasan buatan,software yang digunakan pada kali ini adalah Strawberry Prolog.

Game yang saya modify adalah Tick Tack Toe yang berukuran 8x8 dan berjudul Wots dengan menggunakan objek member JKT48,berikut tampilannya.

1. Tampilan windows pembuka dengan backsoud sebuah lagu,ketika klik start otomatis lagunya akan berhenti.

2. Tampilan windows utama,dimana ini berguna sebagai test sebelum melanjutkan permainan menggunakan level.

3. Kondisi menang dan kalah, setiap penempatan bidak akan muncul sound sbg penanda mana user dan lawan.

Berikut source codenya :


%=== jeda waktu saat objek permainan dilakukan ===%
win_deep(0). % You can change this two numbers to make the AI more clever
nolose_deep(0).

?-
%=== deklarasi variabel untuk gambar ===%

G_gambar1 is bitmap_image("gambar\\9.bmp",_),
G_gambar is bitmap_image("gambar\\11.bmp",_),
G_user is bitmap_image("gambar\\13.bmp",_),
G_lawan is bitmap_image("gambar\\14.bmp",_),


%=== window pembuka ===%

    window(G_awal,_,win_awal(_),"Wots Tick Tack Toe",200,100,560,600).

%=== memasukan gambar pada window G_awal ===%

win_awal(paint):-
    draw_bitmap(0,0,G_gambar1,_,_).


%=== pembuatan menu bar ===%

win_awal(init):-
    button(_,_,button_start(_),"Play",150,400,100,30),
    button(_,_,button_exit(_),"Exit",300,400,100,30),
    execute("back\\Fr.exe").

%=== fungsi tombol exit ===%

button_exit(press):-
    beep("musik\\samurai.wav"),
    close_window(G_awal).

%=== fungsi tombol start ===%

button_start(press):-
    close_window(G_awal),
    execute("back\\stop.bat"),
    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)),
    beep("musik\\samurai.wav"),
       window( G_mulai, _, win_func(_), "Wots Tick Tack Toe", 200, 100, 560,600).

%=== membuat menu pada window kedua ===%

win_func(init):-
    menu(pop_up,_,_,level(_),"Level"),
    menu(normal,_,_,how_to_play(_),"How to Play"),
    menu(normal,_,_,about(_),"About"),
    menu(normal,_,_,exit_game(_),"Exit").
   
%=== fungsi menu how to play ===%

    how_to_play(press):-
    beep("musik\\samurai.wav"),
    message("Message","Pilih level,lalu buat deretan sebanyak 8. Bisa berupa garis Horizontal, Vertikal ,dan Diagonal serta jangan biarkan deretan ini terisi oleh musuh",1).

%=== fungsi menu about ===%

    about(press):-
    beep("musik\\samurai.wav"),
    message("About", "
This game modified by :
Nama    :    Dimas Reza H.P.
Kelas    :    3IA06
NPM    :    52412146
Versi    :    JKT48",n).

%=== fungsi menu exit game ===%
   
    exit_game(press):-
    beep("musik\\samurai.wav"),
    not(yes_no("Konfirmasi","Yakin mau keluar ?",?)-> close_window(_)).

%=== pembuatan koordinat X dan Y sebagai penempatan posisi objek permainan ===%

put_mark(Mark) :-
   pos(Current_Pos),
   member(Current_Pos, L, Y),
   member(L, Mark, X),
   X1 is 40 + 60*X, Y1 is 40 + 60*Y, X2 is X1 + 35, Y2 is Y1 +40,
   write_mark(Mark, X1, Y1, X2, Y2),
   fail.
put_mark(_).

%=== pembuatan tipe objek permainannya ===%

write_mark(x, X1, Y1, X2, Y2) :-
  draw_bitmap(X1,Y1,G_user,_,_).

write_mark(o, X1, Y1, X2, Y2) :-
  draw_bitmap(X1,Y1,G_lawan,_,_).

%=== pembuatan background serta tata letak tempat permaiannya ===%

win_func(paint) :-
   draw_bitmap(0,0,G_gambar,_,_),
   pen(2, rgb(128, 64, 0)),   % black
   line(30, 30, 30, 510), % kiri
   line(30, 510, 510, 510), % bwh
   line(510, 510, 510, 30), % kanan
   line(510, 30, 30, 30), % atas
   line(90, 30, 90, 510),
   line(150, 30, 150, 510),
   line(210, 30, 210, 510),
   line(270, 30, 270, 510),
   line(330, 30, 330, 510),
   line(390, 30, 390, 510),
   line(450, 30, 450, 510),
   line(30, 90, 510, 90),
   line(30, 150, 510, 150),
   line(30, 210, 510, 210),
   line(30, 270, 510, 270),
   line(30, 330, 510, 330),
   line(30, 390, 510, 390),
   line(30, 450, 510, 450),


   put_mark(x),
   put_mark(o),
   fail.

%=== proses untuk mengacu objek permainan serta tata letaknya ===%

win_func(mouse_click(X, Y)) :-
 
  lose_flag(false),
  X>30, Y>30,
  X<510, Y<510,
  X1 is (X - 20)//60,
  Y1 is (Y - 20)//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(win_func(paint)),
  beep("musik//bersin.wav"),
  think(Current_Pos2).

%=== jika lebih dari 1x maka akan muncul bunyi ===%

win_func(mouse_click(X, Y)) :-
  beep.

%=== proses dimana menang dan kalah dalam suatu permainan ===%

think(Pos) :-
  victory(x, Pos), !,
  set(lose_flag(true)),
  message("Unbelievable","You are the winner.",!).
think(Pos) :-
  try_to_win(Pos), !.
think(Pos) :-
  retractall(last_good_move(_)), try_nolose(Pos).
think(_) :-
  last_good_move(Sit2), !,
  set(pos(Sit2)),
  not(win_func(paint)),
  beep("musik\\ok.wav").

think(Pos) :-
  message("Congratulations", "You have some chance in this game.", n),
  move(o, Pos, Sit2),
  nolose(x, Sit2, 0), !, % Tries to make the lose farther
  set(pos(Sit2)),
  not(win_func(paint)),
  beep("musik\\ok.wav").

think(Pos) :-
  move(o, Pos, Sit2),
  set(pos(Sit2)),
  not(win_func(paint)),
  beep("musik\\ok.wav").

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(win_func(paint)),
  beep("musik\\ok.wav"),
  set(lose_flag(true)),
  message("Sorry","You cannot win against the AI.",s).
is_it_win(Sit2) :-
  win_deep(Deep),
  win(x, Sit2, Deep),
  set(pos(Sit2)),
  not(win_func(paint)),
  message("Advice","Give up. Don't lose my time.",i).

%=== window baru dan pembuatan menu untuk level easy ===%

win_easy(init):-
    G_batas1 :=90,
    G_waktu1 is set_timer(_,1,fungsi_timer1),
    menu(pop_up,_,_,level(_),"Level"),
    menu(normal,_,_,how_to_play(_),"How to Play"),
    menu(normal,_,_,about(_),"About"),
    menu(normal,_,_,exit_game(_),"Exit").

level(init):-
    menu(normal,_,_,easy(_),"Easy"),
    menu(normal,_,_,hard(_),"Hard").

%=== fungsi menu easy ===%

easy(press):-
    close_window(G_mulai),
    beep("musik\\samurai.wav"),
    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_utama, _, win_easy(_), "Wots Tick Tack Toe", 200, 100, 560,600).

%=== fungsi menu how to play ===%
   
    how_to_play(press):-
    beep("musik\\samurai.wav"),
    message("Message","Pilih level,lalu buat deretan sebanyak 8. Bisa berupa garis Horizontal, Vertikal ,dan Diagonal serta jangan biarkan deretan ini terisi oleh musuh",1).

%=== fungsi menu about ===%

    about(press):-
    beep("musik\\samurai.wav"),
    message("About", "
This game modified by :
Nama    :    Dimas Reza H.P.
Kelas    :    3IA06
NPM    :    52412146
Versi    :    JKT48",n).

%=== pembuatan koordinat X dan Y sebagai penempatan posisi objek ===%

put_mark(Mark) :-
   pos(Current_Pos),
   member(Current_Pos, L, Y),
   member(L, Mark, X),
   X1 is 40 + 60*X, Y1 is 40 + 60*Y, X2 is X1 + 35, Y2 is Y1 +40,
   write_mark(Mark, X1, Y1, X2, Y2),
   fail.

%=== fungsi timer ===%

fungsi_timer1(end):-
text_out(370,10,print("WAKTU BERMAIN: "+G_batas1)),
G_batas1 := G_batas1 - 1,
(G_batas1 = 0 -> message("Sorry","Waktu Habis!, Anda Kalah",!),close_window(G_utama),
       window( G_awal, _, win_awal(_), "Wots Tick Tack Toe", 200, 100, 560,600)).

%=== pembuatan background serta tata letak pembuatan tempat permaiannya ===%

win_easy(paint) :-
   draw_bitmap(0,0,G_gambar,_,_),
   pen(2, rgb(128, 64, 0)),   % black
   line(30, 30, 30, 510), % kiri
   line(30, 510, 510, 510), % bwh
   line(510, 510, 510, 30), % kanan
   line(510, 30, 30, 30), % atas
   line(90, 30, 90, 510),
   line(150, 30, 150, 510),
   line(210, 30, 210, 510),
   line(270, 30, 270, 510),
   line(330, 30, 330, 510),
   line(390, 30, 390, 510),
   line(450, 30, 450, 510),
   line(30, 90, 510, 90),
   line(30, 150, 510, 150),
   line(30, 210, 510, 210),
   line(30, 270, 510, 270),
   line(30, 330, 510, 330),
   line(30, 390, 510, 390),
   line(30, 450, 510, 450),


   put_mark(x),
   put_mark(o),
   fail.

%=== proses untuk mengacu objek permainan serta tata letaknya ===%

win_easy(mouse_click(X, Y)) :-
 
  lose_flag(false),
  X>30, Y>30,
  X<510, Y<510,
  X1 is (X - 20)//60,
  Y1 is (Y - 20)//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(win_easy(paint)),
  beep("musik//bersin.wav"),
  think(Current_Pos2).

%=== jika lebih dari 1x maka akan muncul bunyi ===%

win_easy(mouse_click(X, Y)) :-
  beep.

%=== proses dimana menang dan kalah dalam suatu permainan ===%

think(Pos) :-
  victory(x, Pos), !,
  set(lose_flag(true)),
  message("Unbelievable","You are the winner.",!).
think(Pos) :-
  try_to_win(Pos), !.
think(Pos) :-
  retractall(last_good_move(_)), try_nolose(Pos).
think(_) :-
  last_good_move(Sit2), !,
  set(pos(Sit2)),
  not(win_easy(paint)),
  beep("musik\\ok.wav").

think(Pos) :-
  message("Congratulations", "You have some chance in this game.", n),
  move(o, Pos, Sit2),
  nolose(x, Sit2, 0), !, % Tries to make the lose farther
  set(pos(Sit2)),
  not(win_easy(paint)),
  beep("musik\\ok.wav").

think(Pos) :-
  move(o, Pos, Sit2),
  set(pos(Sit2)),
  not(win_easy(paint)),
  beep("musik\\ok.wav").

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(win_easy(paint)),
  beep("musik\\ok.wav"),
  set(lose_flag(true)),
  message("Sorry","You cannot win against the AI.",!).

is_it_win(Sit2) :-
  win_deep(Deep),
  win(x, Sit2, Deep),
  set(pos(Sit2)),
  not(win_easy(paint)),
  message("Advice","Give up. Don't lose my time.",!).

%=== window baru dan pembuatan menu untuk level hard ===%
win_hard(init):-
    G_batas1 :=40,
    G_waktu1 is set_timer(_,1,fungsi_timer1),
    menu(pop_up,_,_,level(_),"Level"),
    menu(normal,_,_,how_to_play(_),"How to Play"),
    menu(normal,_,_,about(_),"About"),
    menu(normal,_,_,exit_game(_),"Exit").

level(init):-
    menu(normal,_,_,easy(_),"Easy"),
    menu(normal,_,_,hard(_),"Hard").

%=== fungsi menu hard ===%

hard(press):-
    close_window(G_mulai),
    beep("musik\\samurai.wav"),
    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_utama1, _, win_hard(_), "Wots Tick Tack Toe", 200, 100, 560,600).

%=== fungsi menu how to play ===%

    how_to_play(press):-
    beep("musik\\samurai.wav"),
    message("Message","Pilih level,lalu buat deretan sebanyak 8. Bisa berupa garis Horizontal, Vertikal ,dan Diagonal serta jangan biarkan deretan ini terisi oleh musuh",1).

%=== fungsi menu about ===%

    about(press):-
    beep("musik\\samurai.wav"),
    message("About", "
This game modified by :
Nama    :    Dimas Reza H.P.
Kelas    :    3IA06
NPM    :    52412146
Versi    :    JKT48",n).

%=== pembuatan koordinat X dan Y sebagai penempatan posisi objek ===%

put_mark(Mark) :-
   pos(Current_Pos),
   member(Current_Pos, L, Y),
   member(L, Mark, X),
   X1 is 40 + 60*X, Y1 is 40 + 60*Y, X2 is X1 + 35, Y2 is Y1 +40,
   write_mark(Mark, X1, Y1, X2, Y2),
   fail.

%=== fungsi timer ===%

fungsi_timer1(end):-
text_out(370,10,print("WAKTU BERMAIN: "+G_batas1)),
G_batas1 := G_batas1 - 1,
(G_batas1 = 0 -> message("Sorry","Waktu Habis!, Anda Kalah",!),close_window(G_utama1),
       window( G_awal, _, win_awal(_), "Wots Tick Tack Toe", 200, 100, 560,600)).

%=== pembuatan background serta tata letak pembuatan tempat permaiannya ===%

win_hard(paint) :-
   draw_bitmap(0,0,G_gambar,_,_),
   pen(2, rgb(128, 64, 0)),   % black
   line(30, 30, 30, 510), % kiri
   line(30, 510, 510, 510), % bwh
   line(510, 510, 510, 30), % kanan
   line(510, 30, 30, 30), % atas
   line(90, 30, 90, 510),
   line(150, 30, 150, 510),
   line(210, 30, 210, 510),
   line(270, 30, 270, 510),
   line(330, 30, 330, 510),
   line(390, 30, 390, 510),
   line(450, 30, 450, 510),
   line(30, 90, 510, 90),
   line(30, 150, 510, 150),
   line(30, 210, 510, 210),
   line(30, 270, 510, 270),
   line(30, 330, 510, 330),
   line(30, 390, 510, 390),
   line(30, 450, 510, 450),


   put_mark(x),
   put_mark(o),
   fail.

%=== proses untuk mengacu objek permainan serta tata letaknya ===%

win_hard(mouse_click(X, Y)) :-
 
  lose_flag(false),
  X>30, Y>30,
  X<510, Y<510,
  X1 is (X - 20)//60,
  Y1 is (Y - 20)//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(win_hard(paint)),
  beep("musik//bersin.wav"),
  think(Current_Pos2).

%=== jika lebih dari 1x maka akan muncul bunyi ===%

win_hard(mouse_click(X, Y)) :-
  beep.

%=== proses dimana menang dan kalah dalam suatu permainan ===%

think(Pos) :-
  victory(x, Pos), !,
  set(lose_flag(true)),
  message("Unbelievable","You are the winner.",!).
think(Pos) :-
  try_to_win(Pos), !.
think(Pos) :-
  retractall(last_good_move(_)), try_nolose(Pos).
think(_) :-
  last_good_move(Sit2), !,
  set(pos(Sit2)),
  not(win_hard(paint)),
  beep("musik\\ok.wav").

think(Pos) :-
  message("Congratulations", "You have some chance in this game.", n),
  move(o, Pos, Sit2),
  nolose(x, Sit2, 0), !, % Tries to make the lose farther
  set(pos(Sit2)),
  not(win_hard(paint)),
  beep("musik\\ok.wav").

think(Pos) :-
  move(o, Pos, Sit2),
  set(pos(Sit2)),
  not(win_hard(paint)),
  beep("musik\\ok.wav").

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(win_hard(paint)),
  beep("musik\\ok.wav"),
  set(lose_flag(true)),
  message("Sorry","You cannot win against the AI.",s).
is_it_win(Sit2) :-
  win_deep(Deep),
  win(x, Sit2, Deep),
  set(pos(Sit2)),
  not(win_hard(paint)),
  message("Advice","Give up. Don't lose my time.",i).


%=== variabel element untuk mengatur kemenangan ===%
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).

%=== langkah-langkah untuk memenangkan permainan ===%
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, _, _, _, _, _], [_, _, 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, _], [_, _, _, _, _, _, _, 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, _, _, _, _, _, _], [_, Who, _, _, _, _, _, _]]).
victory( Who, [[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, _).

OK sekian dulu mengenai projectnya, semoga dapat berguna kedepannya.

NB: game ini masih belum sempurna dan dapat di kembangkan lagi,jadi gak usah takut pas waktu sidang di tanyain sama aslabnya hehehe.

No comments:

Post a Comment