Advertisement
PhilHole

kobe

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