Advertisement
Nebajes

Kabe131030

Dec 19th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 5.45 KB | None | 0 0
  1. :- module(t_131030, [t131030/3]).
  2.  
  3. t131030(MyColor):-
  4.     ruut(X, Y, PieceType),
  5.     minu_nupp(MyColor, PieceType),
  6.     nl, write([PieceType, 'Nupp ', ruudul, X, Y]),
  7.     leia_suund(MyColor, Suund),
  8.     votmine(X, Y, Suund, X1, Y1, MyColor),
  9.     !.
  10. t131030(MyColor):-
  11.     ruut(X, Y, PieceType),
  12.     minu_nupp(MyColor, PieceType),
  13.     nl, write([PieceType, 'Nupp ', ruudul, X,Y]),
  14.     leia_suund(MyColor, Suund),
  15.     kaimine(X, Y, Suund, X1, Y1),
  16.     !.
  17. t131030(_).
  18.  
  19. t131030(MyColor, Xin, Yin):-
  20.     kasuta_kui_ei_ole_null(Xin, X),
  21.     kasuta_kui_ei_ole_null(Yin, Y),
  22.     ruut(X, Y, PieceType),
  23.     minu_nupp(MyColor, PieceType),
  24.     nl, write([PieceType, 'Nupp ', ruudul, X, Y]),
  25.     leia_suund(MyColor, Suund),
  26.     votmine(X, Y, Suund, X1, Y1, MyColor),
  27.     !.
  28. t131030(MyColor, Xin, Yin):-
  29.     kasuta_kui_ei_ole_null(Xin, X),
  30.     kasuta_kui_ei_ole_null(Yin, Y),
  31.     ruut(X, Y, PieceType),
  32.     minu_nupp(MyColor, PieceType),
  33.     nl, write([PieceType, 'Nupp ', ruudul, X,Y]),
  34.     leia_suund(MyColor, Suund),
  35.     kaimine(X, Y, Suund, X1, Y1),
  36.     !.
  37. t131030(_, _, _).
  38.  
  39. kasuta_kui_ei_ole_null(0, _).
  40. kasuta_kui_ei_ole_null(X, X).
  41.  
  42. leia_suund(1,1):- !.
  43. leia_suund(2,-1).
  44.  
  45. minu_nupp(C, C).
  46. minu_nupp(1, 10).
  47. minu_nupp(2, 20).
  48.  
  49. %--------------------------------
  50. kaigu_variandid(X, Y, Suund, X1, Y1, MyColor):-
  51.     votmine(X, Y, Suund, X1, Y1, MyColor),!.
  52. kaigu_variandid(X, Y, Suund, X1, Y1, _):-
  53.     kaimine(X, Y, Suund, X1, Y1),!.
  54. %--------------------------------
  55. votmine(X,Y,Suund,X1,Y1, MyColor):-
  56.     kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2, MyColor),
  57.     vota(X,Y,Suund,X1,Y1,X2,Y2), !,
  58.     write([' votab ', X1,Y1, ' ja liigub ', X2, Y2]).
  59.  
  60. %--------
  61. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2, MyColor) :- % Tamm
  62.     ruut(X, Y, PieceType),
  63.     tamm(PieceType),
  64.     leia_diagonaalid(X, Y, X1, Y1),
  65.     ruut(X1,Y1, TargetPieceType),
  66.     not(minu_nupp(MyColor, TargetPieceType)),
  67.     TargetPieceType =\= 0,
  68.     kas_saab_votta_nuppu(X,Y,Suund,X1,Y1,X2,Y2, MyColor).
  69. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2, MyColor):-  % Votmine edasi paremale
  70.     X1 is X + Suund,
  71.     Y1 is Y + 1,
  72.     ruut(X1,Y1, PieceType),
  73.     not(minu_nupp(MyColor, PieceType)),
  74.     PieceType =\= 0,
  75.     X2 is X1 + Suund,
  76.     Y2 is Y1 + 1,
  77.     ruut(X2,Y2, 0).
  78. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2, MyColor):-  % Votmine edasi vasakule
  79.     X1 is X + Suund,
  80.     Y1 is Y - 1,
  81.     ruut(X1,Y1, PieceType),
  82.     not(minu_nupp(MyColor, PieceType)),
  83.     PieceType =\= 0,
  84.     X2 is X1 + Suund,
  85.     Y2 is Y1 - 1,
  86.     ruut(X2,Y2, 0).
  87. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2, MyColor):-  % Votmine tagasi paremale
  88.     X1 is X + Suund * -1,
  89.     Y1 is Y + 1,
  90.     ruut(X1,Y1, PieceType),
  91.     not(minu_nupp(MyColor, PieceType)),
  92.     PieceType =\= 0,
  93.     X2 is X1 + Suund * -1,
  94.     Y2 is Y1 + 1,
  95.     ruut(X2,Y2, 0).
  96. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2, MyColor):-  % Votmine tagasi vasakule
  97.     X1 is X + Suund * -1,
  98.     Y1 is Y - 1,
  99.     ruut(X1,Y1, PieceType),
  100.     not(minu_nupp(MyColor, PieceType)),
  101.     PieceType =\= 0,
  102.     X2 is X1 + Suund * -1,
  103.     Y2 is Y1 - 1,
  104.     ruut(X2,Y2, 0).
  105.  
  106. leia_diagonaalid(X, Y, X1, Y1) :-
  107.     between(1, 16, Y1t),
  108.     (Y1t =< 8 ->
  109.     Y1 is Y1t,
  110.     X1 is Y1 + X - Y;
  111.     Y1 is Y1t - 8,
  112.     X1 is X + Y - Y1),
  113.     X1 >= 1,
  114.     X1 =< 8.
  115. leia_diagonaalid(X, Y, -1, -1).
  116.  
  117. kas_saab_votta_nuppu(X,Y,Suund,X1,Y1,X2,Y2, MyColor) :-
  118.     pole_midagi_vahel(X, Y, X1, Y1),
  119.     ruum_taga(X, Y, X1, Y1, X2, Y2),
  120.     write(' (tamm saab votta) ').
  121.  
  122. pole_midagi_vahel(X, Y, X1, Y1) :-
  123.     leia_diagonaalid(X, Y, Xi, Yi),
  124.     (Xi >= 0 ->
  125.         (peaks_olema_tyhi(X, Y, X1, Y1, Xi, Yi) ->
  126.             (not(ruut(Xi, Yi, 0)) -> !, fail; fail); fail); nl).
  127.  
  128.  
  129. peaks_olema_tyhi(X, Y, X1, Y1, Xi, Yi) :-
  130.     kaugus(X, Y, Xi, Yi, DistanceToPoint),
  131.     kaugus(X, Y, X1, Y1, DistanceToTarget),
  132.     DistanceToPoint > 0,
  133.     DistanceToPoint < DistanceToTarget,
  134.     DifX1 is X1 - X,
  135.     DifXi is Xi - X,
  136.     sign(DifX1) =:= sign(DifXi),
  137.     DifY1 is Y1 - Y,
  138.     DifYi is Yi - Y,
  139.     sign(DifY1) =:= sign(DifYi).
  140.  
  141. ruum_taga(X, Y, X1, Y1, Xt, Yt) :-
  142.     DifX is X1 - X,
  143.     DifY is Y1 - Y,
  144.     SignX is sign(DifX),
  145.     SignY is sign(DifY),
  146.     Xt is X1 + SignX,
  147.     Yt is Y1 + SignY,
  148.     ruut(Xt, Yt, 0).
  149.  
  150.  
  151. %--------------------------------
  152. kaimine(X,Y,Suund,X1,Y1):-
  153.     kas_naaber_vaba(X,Y,Suund,X1,Y1),
  154.     tee_kaik(X,Y,X1,Y1), !,
  155.     write([' kaib ', X1,Y1]).
  156.  
  157. kas_naaber_vaba(X,Y,Suund,X1,Y1):-
  158.     X1 is X +Suund,
  159.     Y1 is Y + 1,
  160.     ruut(X1,Y1, 0).
  161. kas_naaber_vaba(X,Y,Suund,X1,Y1):-
  162.     X1 is X +Suund,
  163.     Y1 is Y -1,
  164.     ruut(X1,Y1, 0), write(' voi ').
  165. kas_naaber_vaba(X,Y,X1,Y1):-
  166.     ruut(X,Y, Status),
  167.     assert(ruut1(X1,Y1, Status)),!.
  168. kas_naaber_vaba(X,Y,Suund,X1,Y1) :- % Tamm saab liikuda tagasi
  169.     ruut(X, Y, PieceType),
  170.     tamm(PieceType),
  171.     X1 is X - Suund,
  172.     Y1 is Y + 1,
  173.     ruut(X1,Y1, 0).
  174. kas_naaber_vaba(X,Y,Suund,X1,Y1) :- % Tamm saab liikuda tagasi
  175.     ruut(X, Y, PieceType),
  176.     tamm(PieceType),
  177.     X1 is X - Suund,
  178.     Y1 is Y - 1,
  179.     ruut(X1,Y1, 0).
  180.  
  181. tee_kaik(X, Y, X1, Y1) :-
  182.     retract(ruut(X, Y, PieceType)),
  183.     retract(ruut(X1, Y1, _)),
  184.     tee_uus_nupp(PieceType, X1, NewPieceType),
  185.     assert(ruut(X1, Y1, NewPieceType)),
  186.     assert(ruut(X, Y, 0)).
  187.  
  188. vota(X, Y, Suund, X1, Y1, X2, Y2) :-
  189.     retract(ruut(X, Y, PieceType)),
  190.     assert(ruut(X, Y, 0)),
  191.     retract(ruut(X2, Y2, _)),
  192.     tee_uus_nupp(PieceType, X2, NewPieceType),
  193.     assert(ruut(X2, Y2, NewPieceType)),
  194.     retract(ruut(X1, Y1, _)),
  195.     assert(ruut(X1, Y1, 0)).
  196.  
  197.  
  198. tee_uus_nupp(1, 8, 10) :-
  199.     write(' (saab tammiks) ').
  200. tee_uus_nupp(2, 1, 20) :-
  201.     write(' (saab tammiks) ').
  202. tee_uus_nupp(T, _, T).
  203.  
  204. tamm(10).
  205. tamm(20).
  206.  
  207. kaugus(X1, Y1, X2, Y2, Distance) :-
  208.     ((DifX is X2 - X1, DifX < 0, NewDifX is DifX * -1); (NewDifX is X2 - X1)),
  209.     ((DifY is Y2 - Y1, DifY < 0, NewDifY is DifY * -1); (NewDifY is Y2 - Y1)),
  210.     Distance is max(NewDifX, NewDifY).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement