Advertisement
PhilHole

t155233

Dec 19th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.29 KB | None | 0 0
  1. :- module(k1, [t155233/3]).
  2. :- dynamic kaigud/4.
  3.  
  4. t155233(Minu_Varv,0,0):-
  5. leia_nupp(X, Y, Minu_Varv),
  6. leia_suund(Minu_Varv,Suund),
  7. kaigu_variandid(X,Y,Suund,X1,Y1),!.
  8.  
  9. t155233(Minu_Varv, X, Y):-
  10. leia_suund(Minu_Varv, Suund),
  11. kaigu_variandid(X,Y,Suund,X2,Y2),!.
  12.  
  13. t155233(Minu_Varv, _, _) :-
  14. leia_nupp(X,Y, Minu_Varv),
  15. leia_suund(Minu_Varv, Suund),
  16. kaigu_variandid(X, Y, Suund, _, _),!.
  17.  
  18. t155233(_ ,_, _).
  19.  
  20. kaigu_variandid(X,Y,Suund,X1,Y1):-
  21. votmine(X,Y,Suund,Xa,Ya),!.
  22. kaigu_variandid(X,Y,Suund,X1,Y1):-
  23. kaimine(X,Y,Xe,Ye),!.
  24.  
  25. votmine(X,Y,Suund,X1,Y1):-
  26. vota(X,Y,Suund,X1,Y1, Xe, Ye),
  27. muuda_dam(Xe,Ye).
  28.  
  29. kaimine(X, Y, Xe, Ye) :-
  30. tee_kaik(X,Y,Xe,Ye),
  31. muuda_dam(Xe,Ye).
  32.  
  33. leia_suund(1,1):- !.
  34. leia_suund(2,-1).
  35. leia_suund(10, 1).
  36. leia_suund(10, -1).
  37. leia_suund(20, 1).
  38. leia_suund(20, -1).
  39.  
  40. %Tammiga votmine
  41. vota(X,Y,Suund,X2,Y2,X3,Y3) :-
  42. ruut(X,Y,Color),
  43. tamm(Color),
  44. vota_tamm(X,Y,X2,Y2,X3,Y3).
  45.  
  46. vota(X,Y,Suund,X2,Y2,X3,Y3) :-
  47. ruut(X,Y,Color),
  48. leia_suund(Color,Suund),
  49. kas_saab_votta(X,Y,Suund,X2,Y2,X3,Y3),
  50. retract(ruut(X2,Y2,_)),
  51. assert(ruut(X2,Y2,0)),
  52. move(X,Y,X3,Y3).
  53.  
  54. vota_tamm(X,Y,X1,Y1,X2,Y2) :-
  55. ruut(X,Y,Color),
  56. otsi_tammi_kaik(X,Y,Xo,Yo,Xg,Yg),
  57. kas_saab_votta_t(Color,Xo,Yo,Xg,Yg,X1,Y1,X2,Y2),
  58. retract(ruut(X1,Y1,_)),
  59. assert(ruut(X1,Y1,0)),
  60. move(X,Y,X2,Y2).
  61.  
  62. otsi_tammi_kaik(X0, Y0, X1, Y1, X2, Y2):-
  63. findall((X,Y), (ruut(X,Y,_), diagonaal_ting(X0,Y0,X,Y)), Lst),
  64. delete(Lst, (X0,Y0), Omakoht),
  65. list_to_set(Omakoht, Diagonaalid),
  66. vota_tammiga((X0,Y0), Diagonaalid, X1, Y1, X2, Y2).
  67.  
  68. diagonaal(X,Y,Xd,Yd):-
  69. diagonaal(X,Y,Xd,Yd,X,Y).
  70.  
  71. diagonaal(X,Y,Xd,Yd,X1,Y1):-
  72. X3 is X1 + 1 * Xd,
  73. Y3 is Y1 + 1 * Yd,
  74. ruut(X3,Y3, 0),
  75. assert(kaigud(X3,Y3,Xd,Yd)),
  76. diagonaal(X,Y,Xd,Yd,X3,Y3).
  77.  
  78. %tammiga käimine
  79. leia_nupp(X,Y,Minu_Varv):-
  80. minu_nupp(Minu_Varv, Color),
  81. ruut(X,Y,Color),
  82. tamm(Color),
  83. otsi_tammi_kaik(X, Y, X1, Y1, X2, Y2),
  84. saab_votta_tamm(Color,X1,Y1,X2,Y2).
  85.  
  86. %kas selle nupuga saab võtta
  87. leia_nupp(X,Y,Color):-
  88. ruut(X,Y,Color),
  89. (kas_saab_votta(X,Y,1,_,_,_,_);
  90. kas_saab_votta(X,Y,-1,_,_,_,_)).
  91.  
  92. %otsib tammile kaigu
  93. leia_nupp(X,Y,Minu_Varv):-
  94. minu_nupp(Minu_Varv, Color),
  95. ruut(X,Y,Color),
  96. tamm(Color),
  97. otsi_kaik(Color,X,Y,_,_).
  98.  
  99. %otsi tavalisele nupule käik
  100. leia_nupp(X,Y,Color):-
  101. ruut(X,Y,Color),
  102. otsi_kaik(Color,X,Y,_,_),!.
  103.  
  104. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine edasi paremale
  105. X1 is X + Suund,
  106. Y1 is Y + 1,
  107. ruut(X, Y, Minu_Varv),
  108. ruut(X1,Y1, Color),
  109. Color =\= Minu_Varv, Color \= 0,
  110. X2 is X1 + Suund,
  111. Y2 is Y1 + 1,
  112. ruut(X2,Y2, 0).
  113.  
  114. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine edasi vasakule
  115. X1 is X + Suund,
  116. Y1 is Y - 1,
  117. ruut(X, Y, Minu_Varv),
  118. ruut(X1,Y1, Color),
  119. Color =\= Minu_Varv, Color \= 0,
  120. X2 is X1 + Suund,
  121. Y2 is Y1 - 1,
  122. ruut(X2,Y2, 0).
  123.  
  124. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine tagasi paremale
  125. X1 is X + Suund * -1,
  126. Y1 is Y + 1,
  127. ruut(X, Y, Minu_Varv),
  128. ruut(X1,Y1, Color),
  129. Color =\= Minu_Varv, Color \= 0,
  130. X2 is X1 + Suund * -1,
  131. Y2 is Y1 + 1,
  132. ruut(X2,Y2, 0).
  133.  
  134. kas_saab_votta(X,Y,Suund,X1,Y1,X2,Y2):- % Votmine tagasi vasakule
  135. X1 is X + Suund * -1,
  136. Y1 is Y - 1,
  137. ruut(X, Y, Minu_Varv),
  138. ruut(X1,Y1, Color),
  139. Color =\= Minu_Varv, Color \= 0,
  140. X2 is X1 + Suund * -1,
  141. Y2 is Y1 - 1,
  142. ruut(X2,Y2, 0).
  143.  
  144.  
  145. kas_saab_votta_t(Color,X1,Y1,Xg,Yg,Xo,Yo,Xf,Yf):-
  146. vastase_nupp(Color,Opponent),
  147. Xo is X1 + 1 * Xg,
  148. Yo is Y1 + 1 * Yg,
  149. Xf is Xo + 1 * Xg,
  150. Yf is Yo + 1 * Yg,
  151. ruut(Xo,Yo,Opponent),
  152. ruut(Xf,Yf,0).
  153.  
  154. move(X, Y, X1, Y1):-
  155. ruut(X,Y,Color),
  156. retract(ruut(X, Y, Color)),
  157. retract(ruut(X1, Y1, 0)),
  158. assert(ruut(X, Y, 0)),
  159. assert(ruut(X1, Y1, Color)).
  160.  
  161. muuda_dam(X,Y) :-
  162. X == 1,
  163. ruut(X,Y,Color),
  164. Color == 2,
  165. retract(ruut(X,Y,2)),
  166. assert(ruut(X,Y,20)).
  167.  
  168. muuda_dam(X, Y) :-
  169. X == 8,
  170. ruut(X,Y,Color),
  171. Color == 1,
  172. retract(ruut(X,Y,1)),
  173. assert(ruut(X,Y,10)).
  174.  
  175. muuda_dam(_,_).
  176.  
  177. %kui tamm
  178. tee_kaik(X, Y, Xf, Yf):-
  179. ruut(X,Y,Color),
  180. tamm(Color),
  181. otsi_kaik(Color,X,Y,Xf,Yf),
  182. move(X,Y,Xf,Yf).
  183.  
  184. tee_kaik(X, Y, Xf, Yf):-
  185. ruut(X,Y, Color),
  186. otsi_kaik(Color,X,Y,Xf,Yf),
  187. move(X,Y,Xf,Yf).
  188.  
  189. otsi_kaik(Color, X, Y, X1, Y1):-
  190. ruut(X,Y,Color),
  191. ((Color == 1); (Color == 10); (Color == 20)),
  192. X1 is X + 1,
  193. Y1 is Y + 1,
  194. ruut(X1, Y1, 0).
  195.  
  196. otsi_kaik(Color, X, Y, X1, Y1):-
  197. ruut(X,Y,Color),
  198. ((Color == 1); (Color == 10); (Color == 20)),
  199. X1 is X + 1,
  200. Y1 is Y - 1,
  201. ruut(X1, Y1, 0).
  202.  
  203. otsi_kaik(Color, X, Y, X1, Y1):-
  204. ruut(X,Y,Color),
  205. ((Color == 2); (Color == 20); (Color == 10)),
  206. X1 is X - 1,
  207. Y1 is Y + 1,
  208. ruut(X1, Y1, 0).
  209.  
  210. otsi_kaik(Color, X, Y, X1, Y1):-
  211. ruut(X,Y,Color),
  212. ((Color == 2); (Color == 20); (Color == 10)),
  213. X1 is X - 1,
  214. Y1 is Y - 1,
  215. ruut(X1, Y1, 0).
  216.  
  217. vota_tammiga((X0,Y0),Diagonals, Xo, Yo, Xf, Yf):-
  218. findall((X,Y), (member((X,Y),Diagonals), voetav((X0,Y0),(X,Y))), Opponent),
  219. vastane(Opponent, Xo, Yo, Xf, Yf),
  220. ((X0 > Xo, Suund is -1);(X0 < Xo, Suund is 1)),
  221. ((Y0 > Yo, Poore is -1);(Y0 < Yo, Poore is 1)),
  222. Xf is Xo + Suund,
  223. Yf is Yo + Poore.
  224.  
  225. vastane([H|_], Xo, Yo, Xf, Yf) :-
  226. phrase(toList(H), L),
  227. oppo(L, Xo, Yo).
  228.  
  229. oppo([H|T], Xo, Yo):-
  230. Xo is H,
  231. Yo is T.
  232.  
  233. toList((A,B)) --> !, toList(A), toList(B).
  234. toList(X) --> [X].
  235.  
  236. diagonaal_ting(X0,Y0,X,Y):-
  237. piirid(X0,Y0),
  238. X =:=Y+X0-Y0.
  239.  
  240. diagonaal_ting(X0,Y0,X,Y):-
  241. piirid(X0,Y0),
  242. X =:= -Y+(X0+Y0).
  243.  
  244. voetav((X0,Y0),(X,Y)):-
  245. ruut(X0, Y0, Minu_Varv),
  246. vastase_nupp(Minu_Varv,Op),
  247. ruut(X,Y,Op),
  248. Vx is sign(X-X0), Vy is sign(Y-Y0),
  249. X1 is X0 + Vx, Y1 is Y0 + Vy,
  250. kas_vahel_vabad((X1,Y1),(X,Y),(Vx,Vy)),
  251. X2 is X + Vx,
  252. Y2 is Y + Vy,
  253. ruut(X2,Y2,0).
  254.  
  255. kas_vahel_vabad((X,Y),(X,Y),_):- !.
  256.  
  257. kas_vahel_vabad((Xi,Yi),(X,Y),(Vx,Vy)):-
  258. ruut(Xi,Yi,0),
  259. Xi1 is Xi + Vx, Yi1 is Yi + Vy,
  260. kas_vahel_vabad((Xi1,Yi1),(X,Y),(Vx,Vy)).
  261.  
  262. saab_votta_tamm(Color,Xo,Yo,Xf,Yf):-
  263. vastase_nupp(Color,Opponent),
  264. ruut(Xo,Yo,Opponent),
  265. ruut(Xf,Yf,0).
  266.  
  267.  
  268. otsi_tammi_kaik(X,Y,X1,Y1,X2,Y2):-
  269. retractall(kaigud(_,_,_,_)),
  270. not(diagonaal(X,Y,1,1)),
  271. not(diagonaal(X,Y,1,-1)),
  272. not(diagonaal(X,Y,-1,1)),
  273. not(diagonaal(X,Y,-1,-1)),
  274. kaigud(X1,Y1,X2,Y2).
  275.  
  276.  
  277. piirid(X,Y):-
  278. 1=< X, X=<8,
  279. 1=< Y, Y=<8,!.
  280.  
  281. minu_nupp(1,1).
  282. minu_nupp(1,10).
  283. minu_nupp(10,1).
  284. minu_nupp(10,10).
  285. minu_nupp(2,2).
  286. minu_nupp(2,20).
  287. minu_nupp(20,2).
  288. minu_nupp(20,20).
  289.  
  290. vastase_nupp(1,2).
  291. vastase_nupp(1, 20).
  292. vastase_nupp(10, 2).
  293. vastase_nupp(10, 20).
  294. vastase_nupp(2, 1).
  295. vastase_nupp(2, 10).
  296. vastase_nupp(20, 1).
  297. vastase_nupp(20, 10).
  298.  
  299. tamm(10).
  300. tamm(20).
  301.  
  302.  
  303. %-----------KUHU KÄIB JNE--------------------------------
  304.  
  305. kaimine(X,Y,Suund,X1,Y1):-
  306. kas_naaber_vaba(X,Y,Suund,X1,Y1),
  307. tee_kaik(X,Y,X1,Y1),
  308. write([' kaib ', X1,Y1]),
  309. fail.
  310. kaimine(_,_,_,_,_).
  311.  
  312. kas_naaber_vaba(X,Y,Suund,X1,Y1):-
  313. X1 is X +Suund,
  314. Y1 is Y + 1,
  315. ruut(X1,Y1, 0).
  316. kas_naaber_vaba(X,Y,Suund,X1,Y1):-
  317. X1 is X +Suund,
  318. Y1 is Y -1,
  319. ruut(X1,Y1, 0), write(' voi ').
  320.  
  321. kas_naaber_vaba(X,Y,X1,Y1):-
  322. ruut(X,Y, Status),
  323. assert(ruut1(X1,Y1, Status)),!.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement