Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.58 KB | None | 0 0
  1. zadanie(ZAD):- ZAD = zadanie1.
  2.  
  3. plansza([[w ,w ,w ,w ,w ,w ,w ,w ,w ],
  4. [w, b1R,b1 ,r1R,r1 ,x ,g1R,y1R,w ],
  5. [w, b1 ,b1 ,x ,r2R,r2 ,x ,y1 ,w ],
  6. [w, x ,x ,x ,y2R,g2R,x ,y3R,w ],
  7. [w, p1R,p1 ,x ,y2 ,g3R,x ,y3 ,w ],
  8. [w, p1 ,p1 ,x ,x ,x ,b2R,b2 ,w ],
  9. [w, p1 ,p1 ,x ,r3R,r3 ,b2 ,b2 ,w ],
  10. [w ,w ,w ,w ,w ,w ,w ,w ,w ]]).
  11. % Manipulacja stringiem
  12. pierwszy_znak(Z, PZ):-
  13. string_chars(Z, Str),
  14. nth0(0, Str, PZ).
  15. % REGUŁY PRZYNALEŻNOŚCI DO KOLORÓW i ROGÓW
  16. blue(C):-
  17. string_chars(C, [H|_]),
  18. H = b.
  19.  
  20. red(C):-
  21. string_chars(C, [H|_]),
  22. H = r.
  23.  
  24. purple(C):-
  25. string_chars(C, [H|_]),
  26. H = p.
  27.  
  28. yellow(C):-
  29. string_chars(C, [H|_]),
  30. H = y.
  31.  
  32. green(C):-
  33. string_chars(C, [H|_]),
  34. H = g.
  35.  
  36. czy_jest_rogiem(Z):-
  37. string_chars(Z, Str),
  38. nth0(_, Str, r).
  39.  
  40. %SPRAWDZANIE OBIEKTU NA POLU X Y
  41. %%czy_puste(B,[[X,Y]|[]]).
  42. czy_puste(B, Y, X) :-
  43. pozycja(B, Y, X, x).
  44.  
  45. czy_sciana(B, Y, X, _):-
  46. zadanie(zadanie2),
  47. pozycja(B, Y, X, w).
  48.  
  49. czy_sciana(B, Y, X, Kolor_Klocka):-
  50. zadanie(zadanie1),
  51. pozycja(B, Y, X, w);
  52. \+pozycja(B, Y, X, Kolor_Klocka).
  53.  
  54. pozycja(B, Y, X, Char) :-
  55. nth0(Y, B, Column),
  56. nth0(X, Column, Char).
  57.  
  58.  
  59. % REGUŁY MODYFIKOWANIA PLANSZY
  60.  
  61. podmien_w_liscie(Index, Elem, [_|T], [Elem|T]) :-
  62. Index = 0, !.
  63. podmien_w_liscie(Index, Elem, [H|T], [H|Out]) :-
  64. Index1 is Index - 1,
  65. podmien_w_liscie(Index1, Elem, T, Out).
  66.  
  67. wstaw_do_dwuwymiarowej([X1,Y1,C],B, Bnew) :-
  68. nth0(X1, B, ColFrom),
  69. podmien_w_liscie(Y1, C, ColFrom, ColFromNew),
  70. podmien_w_liscie(X1, ColFromNew, B, Bnew).
  71.  
  72. wykonaj_wiele_przemieszczen([], B, Bnew):-
  73. Bnew = B, !.
  74.  
  75. %wykonaj_wiele_przemieszczen(lista wspolrzednych i znakow->[[x, y, z]..],
  76. % Board, Bnew)
  77. wykonaj_wiele_przemieszczen([H|T], B, Bnew):-
  78. wstaw_do_dwuwymiarowej(H, B, Btemp),
  79. wykonaj_wiele_przemieszczen(T, Btemp, Bnew).
  80.  
  81. % ROZPAKOWYWANIE LISTY
  82. rozpakuj_jedno_elementowa_liste([H|_], H).
  83.  
  84. rozpakuj_dwu_elementowa_liste([H|T], H, B):-
  85. rozpakuj_jedno_elementowa_liste(T, B).
  86.  
  87. rozpakuj_trzy_elementowa_liste([H|T], H, B, C):-
  88. rozpakuj_dwu_elementowa_liste(T, B, C).
  89.  
  90.  
  91. % ZNAJDYWANIE ROGU
  92.  
  93. znajdz_rog_przeszkody(R, _, R):-
  94. rozpakuj_trzy_elementowa_liste(R, _, _, Z),
  95. czy_jest_rogiem(Z), !.
  96. znajdz_rog_przeszkody(R, B, [Yr,Xr, CharNew]) :-
  97. rozpakuj_trzy_elementowa_liste(R, _, _, C),
  98. atom_concat(C, 'R', CharNew),
  99. pozycja(B,Yr,Xr,CharNew).
  100.  
  101.  
  102. %przemieszczanie klocka
  103. przemiesc(R, B, Bnew):-
  104. rozpakuj_trzy_elementowa_liste(R, _, _, Z),
  105. pierwszy_znak(Z, Kolor),
  106. czy_mozliwy(R, B, Bnew, d, Kolor),!.
  107. przemiesc(R, B, Bnew):-
  108. rozpakuj_trzy_elementowa_liste(R, _, _, Z),
  109. pierwszy_znak(Z, Kolor),
  110. czy_mozliwy(R, B, Bnew, l, Kolor),!.
  111. przemiesc(R, B, Bnew):-
  112. rozpakuj_trzy_elementowa_liste(R, _, _, Z),
  113. pierwszy_znak(Z, Kolor),
  114. czy_mozliwy(R, B, Bnew, p, Kolor),!.
  115. przemiesc(R, B, Bnew):-
  116. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  117. pierwszy_znak(Z, Kolor),
  118. czy_mozliwy(R, B, Bnew, g, Kolor),!.
  119.  
  120.  
  121.  
  122. % Możliwość poruszania się
  123.  
  124. %zielony dol
  125. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  126. Kierunek = d,
  127. Kolor = g,
  128. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  129. Y1 is Y+1,
  130. czy_puste(B, Y1, X),
  131. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  132.  
  133. %zielony dol
  134. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  135. Kierunek = d,
  136. Kolor = g,
  137. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  138. Y1 is Y+1,
  139. \+ czy_puste(B, Y1, X),
  140. \+ czy_sciana(B, Y1, X, Z),
  141. pozycja(B, Y1, X, C),
  142. znajdz_rog_przeszkody([Y1, X, C], B, Rnew),
  143. przemiesc(Rnew, B, BnewT),
  144. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  145.  
  146. %zielony gora
  147. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  148. Kierunek = g,
  149. Kolor = g,
  150. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  151. Y1 is Y-1,
  152. czy_puste(B, Y1, X),
  153. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  154.  
  155. %zielony gora
  156. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  157. Kierunek = g,
  158. Kolor = g,
  159. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  160. Y1 is Y-1,
  161. \+ czy_puste(B, Y1, X),
  162. \+ czy_sciana(B, Y1, X, Z),
  163. pozycja(B, Y1, X, C),
  164. znajdz_rog_przeszkody([Y1, X, C], B, Rnew),
  165. przemiesc(Rnew, B, BnewT),
  166. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  167.  
  168. %zielony lewo
  169. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  170. Kierunek = l,
  171. Kolor = g,
  172. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  173. X1 is X-1,
  174. czy_puste(B, Y, X1),
  175. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  176.  
  177. %zielony lewo
  178. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  179. Kierunek = l,
  180. Kolor = g,
  181. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  182. X1 is X-1,
  183. \+ czy_puste(B, Y, X1),
  184. \+ czy_sciana(B, Y, X1, Z),
  185. pozycja(B, Y, X1, C),
  186. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  187. przemiesc(Rnew, B, BnewT),
  188. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  189.  
  190. %zielony prawo
  191. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  192. Kierunek = p,
  193. Kolor = g,
  194. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  195. X1 is X+1,
  196. czy_puste(B, Y, X1),
  197. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  198.  
  199. %zielony prawo
  200. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  201. Kierunek = p,
  202. Kolor = g,
  203. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  204. X1 is X+1,
  205. \+ czy_puste(B, Y, X1),
  206. \+ czy_sciana(B, Y, X1, Z),
  207. pozycja(B, Y, X1, C),
  208. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  209. przemiesc(Rnew, B, BnewT),
  210. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  211.  
  212. %czerwony prawo
  213. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  214. Kierunek = p,
  215. Kolor = r,
  216. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  217. X1 is X+2,
  218. czy_puste(B, Y, X1),
  219. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  220.  
  221. %czerwony prawo
  222. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  223. Kierunek = p,
  224. Kolor = r,
  225. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  226. X1 is X+2,
  227. \+ czy_puste(B, Y, X1),
  228. \+ czy_sciana(B, Y, X1, Z),
  229. pozycja(B, Y, X1, C),
  230. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  231. przemiesc(Rnew, B, BnewT),
  232. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  233.  
  234. %czerwony lewo
  235. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  236. Kierunek = l,
  237. Kolor = r,
  238. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  239. X1 is X-1,
  240. czy_puste(B, Y, X1),
  241. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  242.  
  243. %czerwony lewo
  244. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  245. Kierunek = l,
  246. Kolor = r,
  247. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  248. X1 is X-1,
  249. \+ czy_puste(B, Y, X1),
  250. \+ czy_sciana(B, Y, X1, Z),
  251. pozycja(B, Y, X1, C),
  252. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  253. przemiesc(Rnew, B, BnewT),
  254. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  255.  
  256. %czerwony gora
  257. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  258. Kierunek = g,
  259. Kolor = r,
  260. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  261. Y1 is Y-1,
  262. czy_puste(B, Y1, X),
  263. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  264.  
  265. %czerwony gora
  266. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  267. Kierunek = g,
  268. Kolor = r,
  269. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  270. Y1 is Y-1,
  271. \+ czy_puste(B, Y1, X),
  272. \+ czy_sciana(B, Y1, X, Z),
  273. pozycja(B, Y1, X, C),
  274. znajdz_rog_przeszkody([Y1, X, C], B, Rnew),
  275. przemiesc(Rnew, B, BnewT),
  276. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  277.  
  278. %czerwony dol
  279. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  280. Kierunek = d,
  281. Kolor = r,
  282. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  283. Y1 is Y+2,
  284. czy_puste(B, Y1, X),
  285. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  286.  
  287. %czerwony dol
  288. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  289. Kierunek = d,
  290. Kolor = r,
  291. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  292. Y1 is Y+2,
  293. \+ czy_puste(B, Y1, X),
  294. \+ czy_sciana(B, Y1, X, Z),
  295. pozycja(B, Y1, X, C),
  296. znajdz_rog_przeszkody([Y1, X, C], B, Rnew),
  297. przemiesc(Rnew, B, BnewT),
  298. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  299.  
  300. %fiolet prawo
  301. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  302. Kierunek = p,
  303. Kolor = p,
  304. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  305. X1 is X+2,
  306. Y1 is Y + 1,
  307. Y2 is Y + 2,
  308. czy_puste(B, Y, X1),
  309. czy_puste(B, Y1, X1),
  310. czy_puste(B, Y2, X1),
  311. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  312.  
  313. %fiolet prawo
  314. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  315. Kierunek = p,
  316. Kolor = p,
  317. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  318. X1 is X+2,
  319. Y1 is Y + 1,
  320. Y2 is Y + 2,
  321. \+ czy_puste(B, Y, X1),
  322. \+ czy_puste(B, Y1, X1),
  323. \+ czy_puste(B, Y2, X1),
  324. \+ czy_sciana(B, Y, X1 Z),
  325. \+ czy_sciana(B, Y1, X1, Z),
  326. \+ czy_sciana(B, Y2, X1, Z),
  327. pozycja(B, Y, X1, C),
  328. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  329. przemiesc(Rnew, B, BnewT),
  330. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  331.  
  332. %fiolet lewo
  333. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  334. Kierunek = l,
  335. Kolor = p,
  336. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  337. X1 is X-1,
  338. Y1 is Y + 1,
  339. Y2 is Y + 2,
  340. czy_puste(B, Y, X1),
  341. czy_puste(B, Y1, X1),
  342. czy_puste(B, Y2, X1),
  343. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  344.  
  345. %fiolet lewo
  346. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  347. Kierunek = l,
  348. Kolor = p,
  349. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  350. X1 is X-1,
  351. Y1 is Y + 1,
  352. Y2 is Y + 2,
  353. \+ czy_puste(B, Y, X1),
  354. \+ czy_puste(B, Y1, X1),
  355. \+ czy_puste(B, Y2, X1),
  356. \+ czy_sciana(B, Y, X1 Z),
  357. \+ czy_sciana(B, Y1, X1, Z),
  358. \+ czy_sciana(B, Y2, X1, Z),
  359. pozycja(B, Y, X1, C),
  360. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  361. przemiesc(Rnew, B, BnewT),
  362. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  363.  
  364. %fiolet gora
  365. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  366. Kierunek = g,
  367. Kolor = p,
  368. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  369. X1 is X+1,
  370. Y1 is Y - 1,
  371. czy_puste(B, Y1, X),
  372. czy_puste(B, Y1, X1),
  373. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  374.  
  375. %fiolet gora
  376. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  377. Kierunek = g,
  378. Kolor = p,
  379. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  380. X1 is X+1,
  381. Y1 is Y - 1,
  382. \+ czy_puste(B, Y1, X),
  383. \+ czy_puste(B, Y1, X1),
  384. \+ czy_sciana(B, Y1, X Z),
  385. \+ czy_sciana(B, Y1, X1, Z),
  386. pozycja(B, Y, X1, C),
  387. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  388. przemiesc(Rnew, B, BnewT),
  389. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  390.  
  391. %fiolet dol
  392. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  393. Kierunek = d,
  394. Kolor = p,
  395. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  396. X1 is X+1,
  397. Y1 is Y +3,
  398. czy_puste(B, Y1, X),
  399. czy_puste(B, Y1, X1),
  400. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  401.  
  402. %fiolet dol
  403. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  404. Kierunek = d,
  405. Kolor = p,
  406. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  407. X1 is X+1,
  408. Y1 is Y +3,
  409. \+ czy_puste(B, Y1, X),
  410. \+ czy_puste(B, Y1, X1),
  411. \+ czy_sciana(B, Y1, X Z),
  412. \+ czy_sciana(B, Y1, X1, Z),
  413. pozycja(B, Y, X1, C),
  414. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  415. przemiesc(Rnew, B, BnewT),
  416. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  417.  
  418.  
  419. %niebieski prawo
  420. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  421. Kierunek = p,
  422. Kolor = b,
  423. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  424. X1 is X+2,
  425. czy_puste(B, Y, X1),
  426. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  427.  
  428. %niebieski prawo
  429. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  430. Kierunek = p,
  431. Kolor = b,
  432. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  433. X1 is X+2,
  434. \+ czy_puste(B, Y, X1),
  435. \+ czy_sciana(B, Y, X1, Z),
  436. pozycja(B, Y, X1, C),
  437. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  438. przemiesc(Rnew, B, BnewT),
  439. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  440.  
  441. %niebieski lewo
  442. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  443. Kierunek = l,
  444. Kolor = b,
  445. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  446. X1 is X-1,
  447. czy_puste(B, Y, X1),
  448. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  449.  
  450. %niebieski lewo
  451. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  452. Kierunek = l,
  453. Kolor = b,
  454. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  455. X1 is X-1,
  456. \+ czy_puste(B, Y, X1),
  457. \+ czy_sciana(B, Y, X1, Z),
  458. pozycja(B, Y, X1, C),
  459. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  460. przemiesc(Rnew, B, BnewT),
  461. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  462.  
  463. %niebieski gora
  464. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  465. Kierunek = g,
  466. Kolor = b,
  467. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  468. Y1 is Y-1,
  469. czy_puste(B, Y1, X),
  470. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  471.  
  472. %niebieski gora
  473. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  474. Kierunek = g,
  475. Kolor = b,
  476. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  477. Y1 is Y-1,
  478. \+ czy_puste(B, Y1, X),
  479. \+ czy_sciana(B, Y1, X, Z),
  480. pozycja(B, Y1, X, C),
  481. znajdz_rog_przeszkody([Y1, X, C], B, Rnew),
  482. przemiesc(Rnew, B, BnewT),
  483. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  484.  
  485. %niebieski dol
  486. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  487. Kierunek = d,
  488. Kolor = b,
  489. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  490. Y1 is Y+2,
  491. czy_puste(B, Y1, X),
  492. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  493.  
  494. %niebieski dol
  495. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  496. Kierunek = d,
  497. Kolor = b,
  498. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  499. Y1 is Y+2,
  500. \+ czy_puste(B, Y1, X),
  501. \+ czy_sciana(B, Y1, X, Z),
  502. pozycja(B, Y1, X, C),
  503. znajdz_rog_przeszkody([Y1, X, C], B, Rnew),
  504. przemiesc(Rnew, B, BnewT),
  505. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  506.  
  507. %zolty prawo
  508. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  509. Kierunek = p,
  510. Kolor = y,
  511. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  512. X1 is X+2,
  513. czy_puste(B, Y, X1),
  514. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  515.  
  516. %zolty prawo
  517. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  518. Kierunek = p,
  519. Kolor = y,
  520. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  521. X1 is X+2,
  522. \+ czy_puste(B, Y, X1),
  523. \+ czy_sciana(B, Y, X1, Z),
  524. pozycja(B, Y, X1, C),
  525. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  526. przemiesc(Rnew, B, BnewT),
  527. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  528.  
  529. %zolty lewo
  530. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  531. Kierunek = l,
  532. Kolor = y,
  533. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  534. X1 is X-1,
  535. czy_puste(B, Y, X1),
  536. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  537.  
  538. %zolty lewo
  539. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  540. Kierunek = l,
  541. Kolor = y,
  542. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  543. X1 is X-1,
  544. \+ czy_puste(B, Y, X1),
  545. \+ czy_sciana(B, Y, X1, Z),
  546. pozycja(B, Y, X1, C),
  547. znajdz_rog_przeszkody([Y, X1, C], B, Rnew),
  548. przemiesc(Rnew, B, BnewT),
  549. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  550.  
  551. %zolty gora
  552. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  553. Kierunek = g,
  554. Kolor = y,
  555. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  556. Y1 is Y-1,
  557. czy_puste(B, Y1, X),
  558. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  559.  
  560. %zolty gora
  561. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  562. Kierunek = g,
  563. Kolor = y,
  564. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  565. Y1 is Y-1,
  566. \+ czy_puste(B, Y1, X),
  567. \+ czy_sciana(B, Y1, X, Z),
  568. pozycja(B, Y1, X, C),
  569. znajdz_rog_przeszkody([Y1, X, C], B, Rnew),
  570. przemiesc(Rnew, B, BnewT),
  571. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  572.  
  573. %zolty dol
  574. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  575. Kierunek = d,
  576. Kolor = y,
  577. rozpakuj_trzy_elementowa_liste(R, Y, X, _),
  578. Y1 is Y+2,
  579. czy_puste(B, Y1, X),
  580. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor),!.
  581.  
  582. %zolty dol
  583. czy_mozliwy(R, B, Bnew, Kierunek, Kolor):-
  584. Kierunek = d,
  585. Kolor = y,
  586. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  587. Y1 is Y+2,
  588. \+ czy_puste(B, Y1, X),
  589. \+ czy_sciana(B, Y1, X, Z),
  590. pozycja(B, Y1, X, C),
  591. znajdz_rog_przeszkody([Y1, X, C], B, Rnew),
  592. przemiesc(Rnew, B, BnewT),
  593. wykonaj_ruch(R, BnewT, Bnew, Kierunek, Kolor),!.
  594.  
  595.  
  596. %REGUŁY PORUSZANIA SIĘ
  597. %zielony dol
  598. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  599. Kolor = g,
  600. Kierunek = d,
  601. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  602. N is Y+1,
  603. wykonaj_wiele_przemieszczen([[Y, X, x], [N, X, Z]], B, Bnew).
  604.  
  605. %zielony gora
  606. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  607. Kolor = g,
  608. Kierunek = g,
  609. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  610. N is Y-1,
  611. wykonaj_wiele_przemieszczen([[Y, X, x], [N, X, Z]], B, Bnew).
  612. %zielony lewo
  613. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  614. Kolor = g,
  615. Kierunek = l,
  616. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  617. N is X-1,
  618. wykonaj_wiele_przemieszczen([[Y, X, x], [Y, N, Z]], B, Bnew).
  619. % zielony prawo
  620. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  621. Kolor = g,
  622. Kierunek = p,
  623. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  624. N is X+1,
  625. wykonaj_wiele_przemieszczen([[Y, X, x], [Y, N, Z]], B, Bnew).
  626. %czerowny dol
  627. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  628. Kolor = r,
  629. Kierunek = d,
  630. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  631. N is Y+1,
  632. M is X+1,
  633. wykonaj_wiele_przemieszczen([[Y, X, x], [Y, M, x], [N,X,Z],[N,M,Z]], B, Bnew).
  634. %czerwony gora
  635. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  636. Kolor = r,
  637. Kierunek = g,
  638. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  639. N is Y-1,
  640. M is X+1,
  641. wykonaj_wiele_przemieszczen([[Y, X, x], [Y, M, x], [N,X,Z],[N,M,Z]], B, Bnew).
  642. %czerwony lewo
  643. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  644. Kolor = r,
  645. Kierunek = l,
  646. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  647. N is X-1,
  648. M is X+1,
  649. wykonaj_wiele_przemieszczen([[Y,M,x], [Y,N,Z]], B, Bnew).
  650. %czerwony prawo
  651. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  652. Kolor = r,
  653. Kierunek = p,
  654. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  655. M is X+2,
  656. wykonaj_wiele_przemieszczen([[Y,X,x],[Y,M,Z]], B, Bnew).
  657. %zolty dol
  658. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  659. Kolor = y,
  660. Kierunek = d,
  661. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  662. M is Y+2,
  663. wykonaj_wiele_przemieszczen([[Y,X,x],[M,X,Z]], B, Bnew).
  664. %zolty gora
  665. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  666. Kolor = y,
  667. Kierunek = g,
  668. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  669. M is Y-1,
  670. N is Y+1,
  671. wykonaj_wiele_przemieszczen([[M,X,Z],[N,X,x]], B, Bnew).
  672. %zolty prawo
  673. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  674. Kolor = y,
  675. Kierunek = p,
  676. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  677. M is X+1,
  678. N is Y+1,
  679. wykonaj_wiele_przemieszczen([[Y,X,x],[N,X,x],[Y,M,Z],[N,M,Z]],B, Bnew).
  680.  
  681. %zolty lewo
  682. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  683. Kolor = y,
  684. Kierunek = l,
  685. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  686. M is X-1,
  687. N is Y+1,
  688. wykonaj_wiele_przemieszczen([[Y,X,x],[N,X,x],[Y,M,Z],[N,M,Z]], B, Bnew).
  689. %niebieski dol
  690. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  691. Kolor = b,
  692. Kierunek = d,
  693. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  694. M is X + 1,
  695. N is Y + 2,
  696. wykonaj_wiele_przemieszczen([[Y,X,x],[Y,M,x],[N,X,Z],[N,M,Z]], B, Bnew).
  697. %niebieski gora
  698. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  699. Kolor = b,
  700. Kierunek = g,
  701. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  702. M is Y + 1,
  703. N is X +1,
  704. Q is Y - 1,
  705. wykonaj_wiele_przemieszczen([[M,X,x],[M,N,x],[Q, X, Z], [Q,N, Z]], B, Bnew).
  706. %niebieski prawo
  707. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  708. Kolor = b,
  709. Kierunek = p,
  710. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  711. M is Y + 1,
  712. N is X + 2,
  713. wykonaj_wiele_przemieszczen([[Y,X,x],[M,X,x],[Y,N,Z],[M,N,Z]], B, Bnew).
  714. %niebieski lewo
  715. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  716. Kolor = b,
  717. Kierunek = l,
  718. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  719. M is X + 1,
  720. N is Y + 1,
  721. Q is X - 1,
  722. wykonaj_wiele_przemieszczen([[Y,M,x],[N,M,x],[Y,Q,Z],[N,Q,Z]], B, Bnew).
  723. %fioletowy gora
  724. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  725. Kolor = p,
  726. Kierunek = g,
  727. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  728. M is X + 1,
  729. N is Y - 1,
  730. Q is Y + 2,
  731. wykonaj_wiele_przemieszczen([[N,X,Z],[N,M,Z],[Q,X,x],[Q,M,x]], B, Bnew).
  732. %fioletowy dol
  733. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  734. Kolor = p,
  735. Kierunek = d,
  736. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  737. M is Y + 3,
  738. N is X + 1,
  739. wykonaj_wiele_przemieszczen([[Y,X,x],[Y,N,x],[M,X,Z],[M,N,Z]], B, Bnew).
  740.  
  741. %%fioletowy lewo
  742. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  743. Kolor = p,
  744. Kierunek = l,
  745. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  746. N is X + 1,
  747. M is Y + 1,
  748. Q is Y + 2,
  749. W is X - 1,
  750. wykonaj_wiele_przemieszczen([[Y,N,x],[M,N,x],[Q,N,x],[Y,W,Z],[M,W,Z],[Q,W,Z]], B, Bnew).
  751.  
  752. %%fioletowy prawo
  753. wykonaj_ruch(R, B, Bnew, Kierunek, Kolor):-
  754. Kolor = p,
  755. Kierunek = p,
  756. rozpakuj_trzy_elementowa_liste(R, Y, X, Z),
  757. M is Y + 1,
  758. N is Y + 2,
  759. Q is X + 2,
  760. wykonaj_wiele_przemieszczen([[Y,X,x],[M,X,x],[N,X,x],[Y,Q,Z],[M,Q,Z],[N,Q,Z]], B, Bnew).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement