Friday, November 25, 2011

Cara Memainkan Othello 12x12

Cara Bermain

Berikut ini adalah algoritma yang dipakai dalam permainan ini :

Memilih salah satu dari 144 kotak yang telah di sediakan, anda (player) atau lawan (computer) dapat memilih disisi lingkaran sesuai yang di inginkan.

1. Terdapat 144 kotak yang telah tersedia diisi secara bergantian antara player dan computer.

2. Dengan cara mengklik kiri pada mouse dan arahkan kursor kearah kotak jika salah satu pemain ingin berjalan.

3. Jika anda (player) main sebagai giliran pertama, maka pemain tersebut memilih kotak yang ingin diisi, kemudian giliran lawan (computer) yang memilih kotak yang diinginkan diisi, namun anda juga bisa membuat lawan(computer) untuk jalan terlebih dahulu pada menu yang telah di sediakan

4. Jika kotak yang telah disediakan telah habis atau penuh dan berhasil membuat bidak/pin berurut baik secara horizontal, vertikal dan diagonal dengan jumlah terbanyak diantara salaah satu pemain maka permainan berhenti dan berakhir.


KONSEP AI

Othello merupakan suatu permainan yang menggunakan konsep Artificial Intelligence atau kecerdasan buatan. Kecerdasan buatan atau yang sering disebut dengan AI pada game ini terletak pada komputer yang akan bertindak sebagai lawan. Komputer akan selalu berusaha mengalahkan user dengan cara menutup langkah pemain untuk membentuk sebuah garis, komputer dapat menyusun strateginya sendiri agar menjadi pemenang. Othello 12x12 disini menjelaskan tentang permainan dua buah benda lingkaran yang dibagi menjadi 2 warna dengan masing-masing pemain mempunyai warna yang berbeda yaitu warna putih yang akan digunakan oleh pemain (player) melawan computer yang menggunakan warna hitam. Adapun inti dari permainan ini ialah memenangkan perlawanan dari computer dengan menjadikan satu baris horizontal, vertikal dan diagonal berurut dengan pin/bidak yang sama sebanyak-banyaknya menurut warna kepemilikannya. Pada permainan ini terdapat 144 kotak yang terdiri dari 12 baris dan 12 kolom yang dapat diisi bergantian antara pemain (player) dengan lawan (computer) dengan cara meletakkan pin milik pemain (player) itu disamping pemain milik lawan (computer) yang berfungsi untuk menutupi ruang gerak milik lawan (computer).

Jika salah satu dari pemain memperoleh jumlah terbanyak dari pin yang dimiliki maka pemain itulah yang disebut dengan pemenang.

Othello merupakan suatu permainan yang menggunakan konsep Artificial Intelligence atau kecerdasan buatan. Kecerdasan buatan atau yang sering disebut dengan AI pada game ini terletak pada komputer yang akan bertindak sebagai lawan. Komputer akan selalu berusaha mengalahkan user dengan cara menutup langkah pemain untuk membentuk sebuah garis, komputer dapat menyusun strateginya sendiri agar menjadi pemenang.

Permainan Othello ini menggunakan sebuah algoritma untuk menemukan solusi yang paling optimal untuk memenangkan permainan, dalam hal ini kita menggunakan Algoritma Greedy, berikut penjelasan mengenai algoritma Greedy.

· Algoritma Greedy

Algoritma greedy merupakan metode yang paling populer untuk memecahkan masalah optimasi. Algoritma greedy membentuk solusi langkah per langkah.Pendekatan yang digunakan di dalam algoritma greedy adalah membuat pilihan yang tampak memberi perolehan terbaik, yaitu dengan membuat pilihan optimum local pada setiap langkah dengan harapan akan mengarah ke solusi optimum global.Prinsip algoritma greedy pada setiap langkah ialah mengambil pilihan terbaik yang dapat diperoleh saat itu tanpa memperhatikan konsekuensi ke depan, dan berharap bahwa dengan memilih optimum lokal pada setiap langkah akan menghasilkan optimum global pada akhir proses.



Wednesday, November 23, 2011

Membuat Game Othelo 12x12 di Strawberry Prolog

% This program is created by Rangga Nugraha
% from Gunadarma University

Deklarasi Windows Awal

?-
set(sit([[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,b,w,n,n,n,n,n],[n,n,n,n,n,w,b,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n]])),
pen(2,rgb(0,0,0)),
window(_,_,win_func(_),"Othello 12x12",100,50,720,750).

newGame:- set(sit([[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,b,w,n,n,n,n,n],[n,n,n,n,n,w,b,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n]])),set(sit([[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,b,w,n,n,n,n,n],[n,n,n,n,n,w,b,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n]])),
update_window(_).

win_func(init):-
G_Depth = 3,
G_Flag is 0,
G_Turn is 0,
G_Color is 0,

Deklarasi Menu

menu(pop_up, _, _, myPopUpGame(_), "&Game"),
menu(pop_up, G_Menu,_,level(_),"&Level"),
menu( right, _, _, menu_help(_), "&Help").

myPopUpGame(init):-
menu(normal,_,_,menu_new(_),"New Game"),
menu(pop_up,_,_,moveFirst(_),"Jalan Pertama"),
menu(normal,_,_,menu_exit(_),"Quit").
menu_new(press):-
newGame.
menu_exit(press):-
close_window(_).

menu_help(press):-
message("Help","Kalahkan Lawan dengan score tertinggi dengan cara memblok/menjepit bidak musuh. Putih=Player|COM=Hitam ",i).


Menu Logika AI/Player Jalan Pertama

moveFirst(init):-
menu(normal,_,_,player(_),"Pemain"),
menu(normal,_,_,computer(_),"Komputer").
computer(press):-
(G_Turn=0 -> G_Turn:=1 else G_Turn:=0),
(G_Flag=0 ->
newGame,
wait(1),
take3(Sit2,n,X2,Y2),
(G_Color=0 ->
insert(X2,Y2,b)
else
insert(X2,Y2,w)),
sit(Sit3),
not(Sit2=Sit3),
win_func(paint)).
player(press):-
newGame.

Menu Level AI/Tingkat Kesulitan

level(init):-
menu(normal,_,_,l2(_),"&Beginner"),
menu(checked,_,_,l3(_),"&Advanced"),
menu(normal,_,_,l4(_),"&Expert").
l2(press):-change_menu(2).
l3(press):-change_menu(3).
l4(press):-change_menu(4).
change_menu(M):-modify_menu(G_Menu,G_Depth- 1,normal,_),
G_Depth:=M, modify_menu(G_Menu,M- 1,checked,_).


Warna Board Papan

win_func(paint):-
brush(rgb(251,96,181)),
rect(50,50,650,650),
for(I,0,11),
X is I * 50 + 50,
line(X,50,X,650),
line(50,X,650,X),
fail.

Warna Musuh/ computer

win_func(paint):-
brush(rgb(0,0,0)),
sit(M),
for(J,0,11),
for(I,0,11),
take(M,Line,J),
take(Line,b,I),
X is I*50 + 55,
Y is J*50 + 55,
X1 is X + 40,
Y1 is Y + 40,
ellipse(X,Y,X1,Y1),
fail.

Warna Kita/ Player

win_func(paint):-
brush(rgb(250,250,250)),

Logika Menang/Kalah

sit(M),
N1 is count_successes(victory(w,M)),
N2 is count_successes(victory(b,M)),
text_out(0, 0, "You: "+print(N1)+", Computer: "+print(N2)),
(N1>N2, N1+N2=:=144 ->
ask1
else (N1=N2, N1+N2=:=144 ->
ask3
else (N1
ask2
))),
(N2=:=0 ->
ask1
else (N1=:=0->
ask3
)),

for(J,0,11),
for(I,0,11),
take(M,Line,J),
take(Line,w,I),
X is I*50 + 55,
Y is J*50 + 55,
X1 is X + 40,
Y1 is Y + 40,
ellipse(X,Y,X1,Y1),
fail.
win_func(paint).

Program AI Dalam Game Ini

win_func(mouse_click(X,Y)):-
X1 is (X - 40) // 50,
Y1 is (Y - 40) // 50,
X1 >= 0,
X1 =< 11,
Y1 >= 0,
Y1 =< 11,
sit(Sit1),
insert(X1,Y1,w),
sit(Sit2),
not(Sit1=Sit2),
win_func(paint),
wait(1),
take3(Sit2,n,X2,Y2),
insert(X2,Y2,b),
sit(Sit3),
not(Sit2=Sit3),
win_func(paint).

insert(X,Y,Who):-%trace,
sit(Sit),
take2(Sit,n,X,Y),
opposit(Who,NewWho),
for(WayX,-1,1),
for(WayY,-1,1),
sit(Sit2),
neighbour(NewWho,X,Y,Sit2,WayX,WayY),
jump(NewWho,X,Y,Sit2,WayX,WayY,NewX,NewY),
replace3(Result,Sit2,Who,X,Y,NewX,NewY,WayX,WayY),
set(sit(Result)),
fail.
insert(X,Y,Who).

neighbour(Who,X,Y,Sit,WayX,WayY):-
X1 is X+ WayX,
Y1 is Y+ WayY,
take2(Sit,Who,X1,Y1).

jump(Who,X,Y,Sit,WayX,WayY,X2,Y2):-
X1 is X+ WayX,
Y1 is Y+ WayY,
opposit(Who,NewWho),
neighbour(NewWho,X1,Y1,Sit,WayX,WayY),
X2 is X1+ WayX,
Y2 is Y1+ WayY.

jump(Who,X,Y,Sit,WayX,WayY,NewX,NewY):-
X1 is X+ WayX,
Y1 is Y+ WayY,
neighbour(Who,X1,Y1,Sit,WayX,WayY),
jump(Who,X1,Y1,Sit,WayX,WayY,NewX,NewY).

take3(Sit,El,0,0):-
take2(Sit,El,0,0).

take3(Sit,El,0,11):-
take2(Sit,El,0,11).

take3(Sit,El,11,0):-
take2(Sit,El,11,0).

take3(Sit,El,11,11):-
take2(Sit,El,11,11).

take3(Sit,El,1,1):-
take2(Sit,El,1,1).

take3(Sit,El,1,2):-
take2(Sit,El,1,2).

take3(Sit,El,1,3):-
take2(Sit,El,1,3).

take3(Sit,El,1,4):-
take2(Sit,El,1,5).

take3(Sit,El,4,1):-
take2(Sit,El,4,1).

take3(Sit,El,4,2):-
take2(Sit,El,4,2).

take3(Sit,El,4,3):-
take2(Sit,El,4,3).

take3(Sit,El,4,4):-
take2(Sit,El,4,4).

take3(Sit,El,2,1):-
take2(Sit,El,2,1).

take3(Sit,El,3,1):-
take2(Sit,El,3,1).

take3(Sit,El,2,4):-
take2(Sit,El,2,4).

take3(Sit,El,3,4):-
take2(Sit,El,3,4).

take3(Sit,El,2,0):-
take2(Sit,El,2,0).

take3(Sit,El,3,0):-
take2(Sit,El,3,0).

take3(Sit,El,5,2):-
take2(Sit,El,5,2).

take3(Sit,El,5,3):-
take2(Sit,El,5,3).

take3(Sit,El,2,5):-
take2(Sit,El,2,5).

take3(Sit,El,3,5):-
take2(Sit,El,3,5).

take3(Sit,El,X,Y):-
take2(Sit,El,X,Y).

take2(Sit,El,X,Y):-
take(Sit,Row,Y),
take(Row,El,X).

replace2(Result,Sit,El,X,Y):-
take(Sit,Line,Y),
replace(NewLine,Line,El,X),
replace(Result,Sit,NewLine,Y).

replace3(Result,Result,Who,X,Y,X,Y,WayX,WayY).
replace3(Result,Sit,Who,X,Y,ToX,ToY,WayX,WayY):-
replace2(ResultP,Sit,Who,X,Y),
X1 is X + WayX,
Y1 is Y + WayY,
replace3(Result,ResultP,Who,X1,Y1,ToX,ToY,WayX,WayY).

replace([New,B,C,D,E,F,G,H,K,L,M,N],[_,B,C,D,E,F,G,H,K,L,M,N],New,0).
replace([A,New,C,D,E,F,G,H,K,L,M,N],[A,_,C,D,E,F,G,H,K,L,M,N],New,1).
replace([A,B,New,D,E,F,G,H,K,L,M,N],[A,B,_,D,E,F,G,H,K,L,M,N],New,2).
replace([A,B,C,New,E,F,G,H,K,L,M,N],[A,B,C,_,E,F,G,H,K,L,M,N],New,3).
replace([A,B,C,D,New,F,G,H,K,L,M,N],[A,B,C,D,_,F,G,H,K,L,M,N],New,4).
replace([A,B,C,D,E,New,G,H,K,L,M,N],[A,B,C,D,E,_,G,H,K,L,M,N],New,5).
replace([A,B,C,D,E,F,New,H,K,L,M,N],[A,B,C,D,E,F,_,H,K,L,M,N],New,6).
replace([A,B,C,D,E,F,G,New,K,L,M,N],[A,B,C,D,E,F,G,_,K,L,M,N],New,7).
replace([A,B,C,D,E,F,G,H,New,L,M,N],[A,B,C,D,E,F,G,H,_,L,M,N],New,8).
replace([A,B,C,D,E,F,G,H,K,New,M,N],[A,B,C,D,E,F,G,H,K,_,M,N],New,9).
replace([A,B,C,D,E,F,G,H,K,L,New,N],[A,B,C,D,E,F,G,H,K,L,_,N],New,10).
replace([A,B,C,D,E,F,G,H,K,L,M,New],[A,B,C,D,E,F,G,H,K,L,M,_],New,11).

take([El,_,_,_,_,_,_,_,_,_,_,_],El,0).
take([_,El,_,_,_,_,_,_,_,_,_,_],El,1).
take([_,_,El,_,_,_,_,_,_,_,_,_],El,2).
take([_,_,_,El,_,_,_,_,_,_,_,_],El,3).
take([_,_,_,_,El,_,_,_,_,_,_,_],El,4).
take([_,_,_,_,_,El,_,_,_,_,_,_],El,5).
take([_,_,_,_,_,_,El,_,_,_,_,_],El,6).
take([_,_,_,_,_,_,_,El,_,_,_,_],El,7).
take([_,_,_,_,_,_,_,_,El,_,_,_],El,8).
take([_,_,_,_,_,_,_,_,_,El,_,_],El,9).
take([_,_,_,_,_,_,_,_,_,_,El,_],El,10).
take([_,_,_,_,_,_,_,_,_,_,_,El],El,11).

Syarat Menang/Kalah


victory(Who,[[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_,_,_,_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_,_,_,_,_,_,_,_,_]).


victory(Who,[_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_,_,_,_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_,_,_,_,_,_,_,_]).

victory(Who,[_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_,_,_,_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_,_,_,_,_,_,_]).



victory(Who,[_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_,_,_,_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_,_,_,_,_,_]).

victory(Who,[_,_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_,_,_,_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_,_,_,_,_]).

victory(Who,[_,_,_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_,_,_,_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_,_,_,_]).

victory(Who,[_,_,_,_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_,_,_]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_,_,_]).

victory(Who,[_,_,_,_,_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_,_]).
victory(Who,[_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_,_]).

victory(Who,[_,_,_,_,_,_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_,_]).
victory(Who,[_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_,_]).

victory(Who,[_,_,_,_,_,_,_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_,_]).
victory(Who,[_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_,_]).

victory(Who,[_,_,_,_,_,_,_,_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_],_]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who],_]).

victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[Who,_,_,_,_,_,_,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,Who,_,_,_,_,_,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,Who,_,_,_,_,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,Who,_,_,_,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,_,Who,_,_,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,Who,_,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,Who,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,Who,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,Who,_,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,Who,_,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,Who,_]]).
victory(Who,[_,_,_,_,_,_,_,_,_,_,_,[_,_,_,_,_,_,_,_,_,_,_,Who]]).


new_game:-
set(sit([[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,b,w,n,n,n,n,n],[n,n,n,n,n,w,b,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n],[n,n,n,n,n,n,n,n,n,n,n,n]])),
pen(2,rgb(0,0,0)),
update_window(_).

ask1:-
yes_no("Game over","You are the winner."+"Play again?",!) -> new_game; (!,close_window(_)).

ask2:-
yes_no("Game over","You lost this time."+"Play again?",!) -> new_game; (!,close_window(_)).

ask3:-
yes_no("Game over","This game is equal."+"Play again?",!) -> new_game; (!,close_window(_)).

opposit(b,w).
opposit(w,b).