Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :- module(k1, [t155233/3]).
- :- dynamic kaigud/4.
- t155233(Minu_Varv,0,0):-
- leia_nupp(X, Y, Minu_Varv),
- leia_suund(Minu_Varv,Suund),
- kaigu_variandid(X,Y,Suund,X1,Y1),!.
- t155233(Minu_Varv, X, Y):-
- leia_suund(Minu_Varv, Suund),
- kaigu_variandid(X,Y,Suund,X2,Y2),!.
- t155233(Minu_Varv, _, _) :-
- leia_nupp(X,Y, Minu_Varv),
- leia_suund(Minu_Varv, Suund),
- kaigu_variandid(X, Y, Suund, _, _),!.
- t155233(_ ,_, _).
- kaigu_variandid(X,Y,Suund,X1,Y1):-
- votmine(X,Y,Suund,Xa,Ya),!.
- kaigu_variandid(X,Y,Suund,X1,Y1):-
- kaimine(X,Y,Xe,Ye),!.
- votmine(X,Y,Suund,X1,Y1):-
- vota(X,Y,Suund,X1,Y1, Xe, Ye),
- muuda_dam(Xe,Ye).
- kaimine(X, Y, Xe, Ye) :-
- tee_kaik(X,Y,Xe,Ye),
- muuda_dam(Xe,Ye).
- leia_suund(1,1):- !.
- leia_suund(2,-1).
- leia_suund(10, 1).
- leia_suund(10, -1).
- leia_suund(20, 1).
- leia_suund(20, -1).
- %Tammiga votmine
- vota(X,Y,Suund,X2,Y2,X3,Y3) :-
- ruut(X,Y,Color),
- tamm(Color),
- vota_tamm(X,Y,X2,Y2,X3,Y3).
- vota(X,Y,Suund,X2,Y2,X3,Y3) :-
- ruut(X,Y,Color),
- leia_suund(Color,Suund),
- kas_saab_votta(X,Y,Suund,X2,Y2,X3,Y3),
- retract(ruut(X2,Y2,_)),
- assert(ruut(X2,Y2,0)),
- move(X,Y,X3,Y3).
- vota_tamm(X,Y,X1,Y1,X2,Y2) :-
- ruut(X,Y,Color),
- otsi_tammi_kaik(X,Y,Xo,Yo,Xg,Yg),
- kas_saab_votta_t(Color,Xo,Yo,Xg,Yg,X1,Y1,X2,Y2),
- retract(ruut(X1,Y1,_)),
- assert(ruut(X1,Y1,0)),
- move(X,Y,X2,Y2).
- otsi_tammi_kaik(X0, Y0, X1, Y1, X2, Y2):-
- findall((X,Y), (ruut(X,Y,_), diagonaal_ting(X0,Y0,X,Y)), Lst),
- delete(Lst, (X0,Y0), Omakoht),
- list_to_set(Omakoht, Diagonaalid),
- vota_tammiga((X0,Y0), Diagonaalid, X1, Y1, X2, Y2).
- diagonaal(X,Y,Xd,Yd):-
- diagonaal(X,Y,Xd,Yd,X,Y).
- diagonaal(X,Y,Xd,Yd,X1,Y1):-
- X3 is X1 + 1 * Xd,
- Y3 is Y1 + 1 * Yd,
- ruut(X3,Y3, 0),
- assert(kaigud(X3,Y3,Xd,Yd)),
- diagonaal(X,Y,Xd,Yd,X3,Y3).
- %tammiga käimine
- leia_nupp(X,Y,Minu_Varv):-
- minu_nupp(Minu_Varv, Color),
- ruut(X,Y,Color),
- tamm(Color),
- otsi_tammi_kaik(X, Y, X1, Y1, X2, Y2),
- saab_votta_tamm(Color,X1,Y1,X2,Y2).
- %kas selle nupuga saab võtta
- leia_nupp(X,Y,Color):-
- ruut(X,Y,Color),
- (kas_saab_votta(X,Y,1,_,_,_,_);
- kas_saab_votta(X,Y,-1,_,_,_,_)).
- %otsib tammile kaigu
- leia_nupp(X,Y,Minu_Varv):-
- minu_nupp(Minu_Varv, Color),
- ruut(X,Y,Color),
- tamm(Color),
- otsi_kaik(Color,X,Y,_,_).
- %otsi tavalisele nupule käik
- leia_nupp(X,Y,Color):-
- ruut(X,Y,Color),
- otsi_kaik(Color,X,Y,_,_),!.
- kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine edasi paremale
- X1 is X + Suund,
- Y1 is Y + 1,
- ruut(X, Y, Minu_Varv),
- ruut(X1,Y1, Color),
- Color =\= Minu_Varv, 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, Minu_Varv),
- ruut(X1,Y1, Color),
- Color =\= Minu_Varv, 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, Minu_Varv),
- ruut(X1,Y1, Color),
- Color =\= Minu_Varv, 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, Minu_Varv),
- ruut(X1,Y1, Color),
- Color =\= Minu_Varv, Color \= 0,
- X2 is X1 + Suund * -1,
- Y2 is Y1 - 1,
- ruut(X2,Y2, 0).
- kas_saab_votta_t(Color,X1,Y1,Xg,Yg,Xo,Yo,Xf,Yf):-
- vastase_nupp(Color,Opponent),
- Xo is X1 + 1 * Xg,
- Yo is Y1 + 1 * Yg,
- Xf is Xo + 1 * Xg,
- Yf is Yo + 1 * Yg,
- ruut(Xo,Yo,Opponent),
- ruut(Xf,Yf,0).
- move(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)).
- muuda_dam(X,Y) :-
- X == 1,
- ruut(X,Y,Color),
- Color == 2,
- retract(ruut(X,Y,2)),
- assert(ruut(X,Y,20)).
- muuda_dam(X, Y) :-
- X == 8,
- ruut(X,Y,Color),
- Color == 1,
- retract(ruut(X,Y,1)),
- assert(ruut(X,Y,10)).
- muuda_dam(_,_).
- %kui tamm
- tee_kaik(X, Y, Xf, Yf):-
- ruut(X,Y,Color),
- tamm(Color),
- otsi_kaik(Color,X,Y,Xf,Yf),
- move(X,Y,Xf,Yf).
- tee_kaik(X, Y, Xf, Yf):-
- ruut(X,Y, Color),
- otsi_kaik(Color,X,Y,Xf,Yf),
- move(X,Y,Xf,Yf).
- otsi_kaik(Color, X, Y, X1, Y1):-
- ruut(X,Y,Color),
- ((Color == 1); (Color == 10); (Color == 20)),
- X1 is X + 1,
- Y1 is Y + 1,
- ruut(X1, Y1, 0).
- otsi_kaik(Color, X, Y, X1, Y1):-
- ruut(X,Y,Color),
- ((Color == 1); (Color == 10); (Color == 20)),
- X1 is X + 1,
- Y1 is Y - 1,
- ruut(X1, Y1, 0).
- otsi_kaik(Color, X, Y, X1, Y1):-
- ruut(X,Y,Color),
- ((Color == 2); (Color == 20); (Color == 10)),
- X1 is X - 1,
- Y1 is Y + 1,
- ruut(X1, Y1, 0).
- otsi_kaik(Color, X, Y, X1, Y1):-
- ruut(X,Y,Color),
- ((Color == 2); (Color == 20); (Color == 10)),
- X1 is X - 1,
- Y1 is Y - 1,
- ruut(X1, Y1, 0).
- vota_tammiga((X0,Y0),Diagonals, Xo, Yo, Xf, Yf):-
- findall((X,Y), (member((X,Y),Diagonals), voetav((X0,Y0),(X,Y))), Opponent),
- vastane(Opponent, Xo, Yo, Xf, Yf),
- ((X0 > Xo, Suund is -1);(X0 < Xo, Suund is 1)),
- ((Y0 > Yo, Poore is -1);(Y0 < Yo, Poore is 1)),
- Xf is Xo + Suund,
- Yf is Yo + Poore.
- vastane([H|_], Xo, Yo, Xf, Yf) :-
- phrase(toList(H), L),
- oppo(L, Xo, Yo).
- oppo([H|T], Xo, Yo):-
- Xo is H,
- Yo is T.
- toList((A,B)) --> !, toList(A), toList(B).
- toList(X) --> [X].
- diagonaal_ting(X0,Y0,X,Y):-
- piirid(X0,Y0),
- X =:=Y+X0-Y0.
- diagonaal_ting(X0,Y0,X,Y):-
- piirid(X0,Y0),
- X =:= -Y+(X0+Y0).
- voetav((X0,Y0),(X,Y)):-
- ruut(X0, Y0, Minu_Varv),
- vastase_nupp(Minu_Varv,Op),
- ruut(X,Y,Op),
- Vx is sign(X-X0), Vy is sign(Y-Y0),
- X1 is X0 + Vx, Y1 is Y0 + Vy,
- kas_vahel_vabad((X1,Y1),(X,Y),(Vx,Vy)),
- X2 is X + Vx,
- Y2 is Y + Vy,
- ruut(X2,Y2,0).
- kas_vahel_vabad((X,Y),(X,Y),_):- !.
- kas_vahel_vabad((Xi,Yi),(X,Y),(Vx,Vy)):-
- ruut(Xi,Yi,0),
- Xi1 is Xi + Vx, Yi1 is Yi + Vy,
- kas_vahel_vabad((Xi1,Yi1),(X,Y),(Vx,Vy)).
- saab_votta_tamm(Color,Xo,Yo,Xf,Yf):-
- vastase_nupp(Color,Opponent),
- ruut(Xo,Yo,Opponent),
- ruut(Xf,Yf,0).
- otsi_tammi_kaik(X,Y,X1,Y1,X2,Y2):-
- retractall(kaigud(_,_,_,_)),
- not(diagonaal(X,Y,1,1)),
- not(diagonaal(X,Y,1,-1)),
- not(diagonaal(X,Y,-1,1)),
- not(diagonaal(X,Y,-1,-1)),
- kaigud(X1,Y1,X2,Y2).
- piirid(X,Y):-
- 1=< X, X=<8,
- 1=< Y, Y=<8,!.
- minu_nupp(1,1).
- minu_nupp(1,10).
- minu_nupp(10,1).
- minu_nupp(10,10).
- minu_nupp(2,2).
- minu_nupp(2,20).
- minu_nupp(20,2).
- minu_nupp(20,20).
- vastase_nupp(1,2).
- vastase_nupp(1, 20).
- vastase_nupp(10, 2).
- vastase_nupp(10, 20).
- vastase_nupp(2, 1).
- vastase_nupp(2, 10).
- vastase_nupp(20, 1).
- vastase_nupp(20, 10).
- tamm(10).
- tamm(20).
- %-----------KUHU KÄIB JNE--------------------------------
- kaimine(X,Y,Suund,X1,Y1):-
- kas_naaber_vaba(X,Y,Suund,X1,Y1),
- tee_kaik(X,Y,X1,Y1),
- write([' kaib ', X1,Y1]),
- fail.
- kaimine(_,_,_,_,_).
- kas_naaber_vaba(X,Y,Suund,X1,Y1):-
- X1 is X +Suund,
- Y1 is Y + 1,
- ruut(X1,Y1, 0).
- kas_naaber_vaba(X,Y,Suund,X1,Y1):-
- X1 is X +Suund,
- Y1 is Y -1,
- ruut(X1,Y1, 0), write(' voi ').
- kas_naaber_vaba(X,Y,X1,Y1):-
- ruut(X,Y, Status),
- assert(ruut1(X1,Y1, Status)),!.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement