Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :-module(artur, [iapb155550/3]).
- iapb155550(MyColor, X, Y):-
- leia_suund(MyColor, S),
- kaigu_variandid(X, Y, S,_,_),!.
- iapb155550(MyColor,0,0):-
- tee(X, Y, MyColor),
- leia_suund(MyColor, S),
- kaigu_variandid(X, Y, S,_,_),!.
- iapb155550(MyColor,_,_) :-
- tee(X, Y, MyColor),
- leia_suund(MyColor, S),
- kaigu_variandid(X, Y, S,_,_),!.
- iapb155550(_,_,_).
- own_color(1, 1).
- own_color(1, 10).
- own_color(10, 1).
- own_color(10, 10).
- own_color(2, 2).
- own_color(2, 20).
- own_color(20, 2).
- own_color(20, 20).
- partner_color(1, 2).
- partner_color(1, 20).
- partner_color(10, 2).
- partner_color(10, 20).
- partner_color(2, 1).
- partner_color(2, 10).
- partner_color(20, 1).
- partner_color(20, 10).
- leia_suund(1,1):- !.
- leia_suund(2,-1).
- leia_suund(10,1).
- leia_suund(10,-1).
- leia_suund(20,1).
- leia_suund(20,-1).
- tee(X,Y,MyColor):-
- own_color(MyColor, Color),
- ruut(X,Y,Color),
- (Color ==10 ; Color ==20),
- leia_kaigud(X, Y, X1, Y1, X2, Y2),
- kas_tamm_saab_votta(Color,X1,Y1,X2,Y2).
- tee(X,Y,Color):-
- ruut(X,Y,Color),
- (kas_saab_votta(X,Y,1,_,_,_,_);
- kas_saab_votta(X,Y,-1,_,_,_,_)).
- tee(X,Y,MyColor):-
- own_color(MyColor, Color),
- ruut(X,Y,Color),
- (Color ==10 ; Color ==20),
- leia_suund(Color,Suund),
- leia(Suund,X,Y,_,_).
- tee(X,Y,Color):-
- ruut(X,Y,Color),
- leia_suund(Color,Suund),
- leia(Suund,X,Y,_,_),!.
- leia_kaigud(X0, Y0, X1, Y1, X2, Y2):-
- findall((X,Y), (ruut(X,Y,_), tingimus(X0,Y0,X,Y)), Output),
- delete(Output, (X0,Y0), Diagonals),
- list_to_set(Diagonals, Diagonals1),
- vota_tamm((X0,Y0), Diagonals1, X1, Y1, X2, Y2).
- vota_tamm((X0,Y0),Diagonals, X1, Y1, X2, Y2):-
- findall((X,Y), (member((X,Y),Diagonals), vaenlane((X0,Y0),(X,Y))), Vaenlane),
- enemy(Vaenlane, X1, Y1, X2, Y2),
- ((X0 > X1, XS is -1);(X0 < X1, XS is 1)),
- ((Y0 > Y1, YS is -1);(Y0 < Y1, YS is 1)),
- X2 is X1 + XS,
- Y2 is Y1 + YS.
- vaenlane((X0,Y0),(X,Y)):-
- ruut(X0, Y0, MyColor),
- partner_color(MyColor,OpColor),
- ruut(X,Y,OpColor),
- Vx is sign(X-X0), Vy is sign(Y-Y0),
- X1 is X0 + Vx, Y1 is Y0 + Vy,
- kas_vabu_ruute((X1,Y1),(X,Y),(Vx,Vy)),
- X2 is X + Vx,
- Y2 is Y + Vy,
- ruut(X2,Y2,0).
- enemy([E1|_], X, Y, _, _) :-
- phrase(listiks(E1), L),
- enemy2(L, X, Y).
- listiks((X,Y)) --> !, listiks(X), listiks(Y).
- listiks(A) --> [A].
- enemy2([E1|T1], X, Y):-
- X is E1,
- Y is T1.
- kas_vabu_ruute((X,Y),(X,Y),_):- !.
- kas_vabu_ruute((Xi,Yi),(X,Y),(Vx,Vy)):-
- ruut(Xi,Yi,0),
- Xi1 is Xi + Vx, Yi1 is Yi + Vy,
- kas_vabu_ruute((Xi1,Yi1),(X,Y),(Vx,Vy)).
- %------------------
- tingimus(X0,Y0,X,Y):-
- kas_laual(X0,Y0),
- X is Y + X0 - Y0.
- tingimus(X0,Y0,X,Y):-
- kas_laual(X0,Y0),
- X is -Y + X0 + Y0.
- kas_laual(X,Y):-
- 1=< X,
- X=<8,
- 1=< Y,
- Y=<8,!.
- %--------------------------------
- kaigu_variandid(X,Y,Suund,X1,Y1):-
- votmine(X,Y,Suund,X1,Y1),!.
- kaigu_variandid(X,Y,_,X1,Y1):-
- kaimine(X,Y,X1,Y1),!.
- %--------------------------------
- :-dynamic ruudud/4.
- votmine(X,Y,Suund,X1,Y1):-
- vota(X,Y,Suund,X1,Y1,X2,Y2),
- tee_tammiks(X2,Y2).
- vota(X,Y,_,X1,Y1,X2,Y2) :-
- ruut(X,Y,Color),
- (Color ==10 ; Color ==20),
- vota_tammiga(X,Y,X1,Y1,X2,Y2).
- vota(X,Y,Suund,X1,Y2,X2,Y2):-
- ruut(X,Y,Color),
- leia_suund(Color, Suund),
- kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2),
- retract(ruut(X1,Y1,_)),
- assert(ruut(X1,Y1,0)),
- liigu(X,Y,X2,Y2).
- vota_tammiga(X,Y,X1,Y1,X2,Y2):-
- ruut(X,Y,Color),
- tammi_kaik(X,Y,X0,Y0,XS,YS),
- kas_saab_votta_tammiga(X0,Y0,X1,Y1,X2,Y2,XS,YS,Color),
- retract(ruut(X1,Y1,_)),
- assert(ruut(X1,Y1,0)),
- liigu(X,Y,X2,Y2).
- tammi_kaik(X,Y,X0,Y0,XS,YS):-
- retractall(ruudud/4),
- not(vabad_ruudud(X,Y,1,1)),
- not(vabad_ruudud(X,Y,-1,1)),
- not(vabad_ruudud(X,Y,1,-1)),
- not(vabad_ruudud(X,Y,-1,-1)),
- ruudud(X0,Y0,XS,YS).
- vabad_ruudud(X,Y,XS,YS):-
- vabad_ruudud(X,Y,XS,YS,X,Y).
- vabad_ruudud(X,Y,XS,YS,X1,Y1):-
- X0 is X1 + 1 * XS,
- Y0 is Y1 + 1 * YS,
- ruut(X0,Y0, 0),
- assert(ruudud(X0,Y0,XS,YS)),
- vabad_ruudud(X,Y,XS,YS,X0,Y0).
- %-----------
- kaimine(X,Y,X1,Y1):-
- ruut(X,Y,Color),
- leia_suund(Color,Suund),
- leia(Suund,X,Y,X1,Y1),
- liigu(X,Y,X1,Y1),
- tee_tammiks(X1,Y1).
- tee_tammiks(1,Y1):-
- ruut(1,Y1,2),
- retract(ruut(1,Y1,2)),
- assert(ruut(1,Y1,20)).
- tee_tammiks(8,Y1):-
- ruut(8,Y1,1),
- retract(ruut(8,Y1,1)),
- assert(ruut(8,Y1,10)).
- tee_tammiks(_,_).
- liigu(X, Y, X1, Y1):-
- ruut(X,Y,Color),
- retract(ruut(X, Y, Color)),
- retract(ruut(X1, Y1, 0)),
- assert(ruut(X, Y, 0)),
- assert(ruut(X1, Y1, Color)).
- leia(Suund,X,Y,X1,Y1):-
- (ruut(X,Y,1);ruut(X,Y,2)),
- ((X1 is X + 1 * Suund,
- Y1 is Y + 1);
- (X1 is X + 1 * Suund,
- Y1 is Y - 1)),
- ruut(X1,Y1,0).
- leia(_,X,Y,X1,Y1):-
- (ruut(X,Y,10);ruut(X,Y,20)),
- ((X1 is X + 1,
- Y1 is Y + 1);
- (X1 is X - 1,
- Y1 is Y - 1);
- (X1 is X + 1,
- Y1 is Y - 1);
- (X1 is X - 1,
- Y1 is Y + 1)),
- ruut(X1,Y1,0).
- %--------
- kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine edasi paremale
- X1 is X + Suund,
- Y1 is Y + 1,
- ruut(X,Y,MyColor),
- ruut(X1,Y1, Color),
- partner_color(MyColor,Color), Color =\= 0,
- X2 is X1 + Suund,
- Y2 is Y1 + 1,
- ruut(X2,Y2, 0).
- kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine edasi vasakule
- X1 is X + Suund,
- Y1 is Y - 1,
- ruut(X,Y,MyColor),
- ruut(X1,Y1, Color),
- partner_color(MyColor,Color), Color =\= 0,
- X2 is X1 + Suund,
- Y2 is Y1 - 1,
- ruut(X2,Y2, 0).
- kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine tagasi paremale
- X1 is X + Suund * -1,
- Y1 is Y + 1,
- ruut(X,Y,MyColor),
- ruut(X1,Y1, Color),
- partner_color(MyColor,Color), Color =\= 0,
- X2 is X1 + Suund * -1,
- Y2 is Y1 + 1,
- ruut(X2,Y2, 0).
- kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine tagasi vasakule
- X1 is X + Suund * -1,
- Y1 is Y - 1,
- ruut(X,Y,MyColor),
- ruut(X1,Y1, Color),
- partner_color(MyColor,Color), Color =\= 0,
- X2 is X1 + Suund * -1,
- Y2 is Y1 - 1,
- ruut(X2,Y2, 0).
- kas_saab_votta_tammiga(X0,Y0,X1,Y1,X2,Y2,XS,YS,Color):-
- partner_color(Color,Partner),
- X1 is X0 + 1 * XS,
- Y1 is Y0 + 1 * YS,
- X2 is X1 + 1 * XS,
- Y2 is Y1 + 1 * YS,
- ruut(X1,Y1,Partner),
- ruut(X2,Y2,0).
- kas_tamm_saab_votta(Color,X1,Y1,X2,Y2):-
- partner_color(Color,Partner),
- ruut(X1,Y1,Partner),
- ruut(X2,Y2,0).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement