Исходник:
% This program is created by students
% from University of Sofia
?-
set(sit(x,9,9,[[f,f,f],[f,f,f],[f,f,f],
[f,f,f,f,f,f],[f,f,f],[f,f,f],[f,f,f]])),
pen(3,rgb(0,0,0)),
window(_,_,win_funk(_),"Draughts",100,100,508,388).
win_funk(paint):-
line(100,30,100,330,400,330,400,30,100,30),
line(350,80,150,80,150,280,350,280,350,80),
line(300,130,200,130,200,230,300,230,300,130),
line(250,30,250,130),
line(250,230,250,330),
line(100,180,200,180),
line(300,180,400,180),
fail.
win_funk(paint):-
brush(rgb(255,0,0)),
sit(_,R,_,_),
for(I,1,R),
Y is 345- 35*I,
ellipse(40,Y,60,Y+20),
fail.
win_funk(paint):-
brush(rgb(0,0,255)),
sit(_,_,R,_),
for(I,1,R),
Y is 35*I- 5,
ellipse(440,Y,460,Y+20),
fail.
win_funk(paint):-
sit(_,_,_,Pos),
member7(Pos,Row,Y),
(Y=3->
member6(Row,E,X)
else
member3(Row,E,X)
),
color(E),
calculate(X2,X,Y),
Y2 is 20+Y*50,
Y3 is Y2+20,
X3 is X2+20,
ellipse(X2,Y2,X3,Y3),
fail.
member7([E,_,_,_,_,_,_],E,0).
member7([_,E,_,_,_,_,_],E,1).
member7([_,_,E,_,_,_,_],E,2).
member7([_,_,_,E,_,_,_],E,3).
member7([_,_,_,_,E,_,_],E,4).
member7([_,_,_,_,_,E,_],E,5).
member7([_,_,_,_,_,_,E],E,6).
member6([E,_,_,_,_,_],E,0).
member6([_,E,_,_,_,_],E,1).
member6([_,_,E,_,_,_],E,2).
member6([_,_,_,E,_,_],E,3).
member6([_,_,_,_,E,_],E,4).
member6([_,_,_,_,_,E],E,5).
member3([E,_,_],E,0).
member3([_,E,_],E,1).
member3([_,_,E],E,2).
color(f):-brush(system_color(window)).
color(x):-brush(rgb(255,0,0)).
color(o):-brush(rgb(0,0,255)).
calculate(X2,X,3):-
(X<3->
X2 is 50*X+90
else
X2 is 50*X+140
).
calculate(X2,X,Y):- Y<3,
X2 is 240+ (X- 1)* (3-Y)*50.
calculate(X2,X,Y):- Y>3,
X2 is 240- (X- 1)* (3-Y)*50.
win_funk(mouse_click(X,Y)):-
X1 is (X- 90)mod 50,
Y1 is (Y- 20)mod 50,
(X1- 10)**2+ (Y1- 10)**2=<100,
X2 is (X- 90)// 50,
Y2 is (Y- 20)// 50,
X2>=0,Y2>=0,
X2=<6,Y2=<6,
calculate2(X2,X3,Y2),
sit(_,M1,M2,Sit),
member(Sit,f,X3,Y2),
replace(Sit2,Sit,x,X3,Y2),
(dama(x,Sit2)->
message("","You win",!)
else
M1p is M1 - 1,
M2p is M2 - 1,
think(M1p,M2p,Sit2),
sit(_,_,_,Sit3),
(dama(o,Sit3)->
message("","You lost",s) )
),
update_window(_).
think(M1p,M2p,Sit2):-
Max= -2,
member(Sit2,f,X4,Y4),
replace(Sit3,Sit2,o,X4,Y4),
Min= 1,
min_max(Sit3,Min,1),
Max
Max:=Min,
set(sit(_,M1p,M2p,Sit3)),
fail.
think(M1p,M2p,Sit2).
min_max(Sit,Min,_):-dama(o,Sit),!, Min:=1.
min_max(Sit,Min,0):-!, Min:=0.
min_max(Sit,Min,Deep):-
member(Sit,f,X4,Y4),
replace(Sit2,Sit,x,X4,Y4),
Max= -1,
Deep1 is Deep- 1,
max_min(Sit2,Max,Deep1),
Min>Max,
Min:=Max,
fail.
min_max(Sit,Min,Deep).
max_min(Sit, Max,_):-dama(x,Sit),!, Max:= -1.
max_min(Sit, Max,0):-!, Max:=0.
max_min(Sit, Max,Deep):-
member(Sit,f,X4,Y4),
replace(Sit2,Sit,o,X4,Y4),
Min= 1,
Deep1 is Deep- 1,
min_max(Sit2,Min,Deep1),
Max
Max:=Min,
fail.
max_min(Sit,Max,Deep).
calculate2(X2,X,3):-
(X2=3->
fail
else (X2<3->
X is X2
else
X is X2- 1
)).
calculate2(3,1,Y):- not(Y=3).
calculate2(X,0,Y):- Y<3, X=Y.
calculate2(X,0,Y) :- Y>3, 6 is X+Y.
calculate2(X,2,Y):- Y>3, X=Y.
calculate2(X,2,Y) :- Y<3, 6 is X+Y.
replace3([E,A,B],[_,A,B],E,0).
replace3([A,E,B],[A,_,B],E,1).
replace3([A,B,E],[A,B,_],E,2).
replace6([S,A,B,C,D,E],[_,A,B,C,D,E],S,0).
replace6([A,S,B,C,D,E],[A,_,B,C,D,E],S,1).
replace6([A,B,S,C,D,E],[A,B,_,C,D,E],S,2).
replace6([A,B,C,S,D,E],[A,B,C,_,D,E],S,3).
replace6([A,B,C,D,S,E],[A,B,C,D,_,E],S,4).
replace6([A,B,C,D,E,S],[A,B,C,D,E,_],S,5).
replace7([S,A,B,C,D,E,F],[_,A,B,C,D,E,F],S,0).
replace7([A,S,B,C,D,E,F],[A,_,B,C,D,E,F],S,1).
replace7([A,B,S,C,D,E,F],[A,B,_,C,D,E,F],S,2).
replace7([A,B,C,S,D,E,F],[A,B,C,_,D,E,F],S,3).
replace7([A,B,C,D,S,E,F],[A,B,C,D,_,E,F],S,4).
replace7([A,B,C,D,E,S,F],[A,B,C,D,E,_,F],S,5).
replace7([A,B,C,D,E,F,S],[A,B,C,D,E,F,_],S,6).
member(Sit,E,X,Y):-
member7(Sit,Row,Y),
(Y=3->
member6(Row,E,X)
else
member3(Row,E,X)
).
replace(Sit2,Sit,E,X,Y):-
member7(Sit,Row,Y),
(Y=3->
replace6(Row2,Row,E,X)
else
replace3(Row2,Row,E,X)
),
replace7(Sit2,Sit,Row2,Y).
dama(Who,[[Who,Who,Who],_,_,_,_,_,_]).
dama(Who,[_,[Who,Who,Who],_,_,_,_,_]).
dama(Who,[_,_,[Who,Who,Who],_,_,_,_]).
dama(Who,[_,_,_,[Who,Who,Who,_,_,_],_,_,_]).
dama(Who,[_,_,_,[_,_,_,Who,Who,Who],_,_,_]).
dama(Who,[_,_,_,_,[Who,Who,Who],_,_]).
dama(Who,[_,_,_,_,_,[Who,Who,Who],_]).
dama(Who,[_,_,_,_,_,_,[Who,Who,Who]]).
dama(Who,[[_,Who,_],[_,Who,_],[_,Who,_],_,_,_,_]).
dama(Who,[_,_,_,_,[_,Who,_],[_,Who,_],[_,Who,_]]).
dama(Who,[[Who,_,_],_,_,[Who,_,_,_,_,_],_,_,[Who,_,_]]).
dama(Who,[[_,_,Who],_,_,[_,_,_,_,_,Who],_,_,[_,_,Who]]).
dama(Who,[_,[Who,_,_],_,[_,Who,_,_,_,_],_,[Who,_,_],_]).
dama(Who,[_,[_,_,Who],_,[_,_,_,_,Who,_],_,[_,_,Who],_]).
dama(Who,[_,_,[Who,_,_],[_,_,Who,_,_,_],[Who,_,_],_,_]).
dama(Who,[_,_,[_,_,Who],[_,_,_,Who,_,_],[_,_,Who],_,_]).
• |