Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.30 KB | None | 0 0
  1. //Jonasz Makulak
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. typedef int bool;
  7. #define true 1
  8. #define false 0
  9.  
  10. struct Cel {
  11. int x;
  12. int y;
  13. int z;
  14.  
  15. char znak;
  16. } cel, CelTemp, CelSasiad;
  17.  
  18. typedef struct Wonsz {
  19. int PosX;
  20. int PosY;
  21. int PosZ;
  22.  
  23. struct Wonsz *nast;
  24. } Wonrz;
  25.  
  26. typedef struct Przeszkoda {
  27. int PosX;
  28. int PosY;
  29. int PosZ;
  30.  
  31. char Znak;
  32.  
  33. struct Przeszkoda *nast;
  34. } PrzeSzkoda;
  35.  
  36. typedef struct Zarcie {
  37. int PosX;
  38. int PosY;
  39. int PosZ;
  40.  
  41. int Punkty;
  42.  
  43. char Znak;
  44.  
  45. bool Istnieje;
  46.  
  47. struct Zarcie *nast;
  48. } Jedzonko;
  49.  
  50. void DodajPrzeszkode(PrzeSzkoda * przeszk, int x, int y, int z, char znak) {
  51. PrzeSzkoda *Temp = przeszk;
  52. while (Temp->nast != NULL)
  53. Temp = Temp->nast;
  54.  
  55. Temp->nast = malloc(sizeof(PrzeSzkoda));
  56.  
  57. Temp->nast->PosX = x;
  58. Temp->nast->PosY = y;
  59. Temp->nast->PosZ = z;
  60.  
  61. Temp->nast->Znak = znak;
  62.  
  63. Temp->nast->nast = NULL;
  64. }
  65.  
  66. void DodajZarcie(Jedzonko ** zarlo, int x, int y, int z, char znak) {
  67. Jedzonko * Temp;
  68. Temp = malloc(sizeof(Jedzonko));
  69.  
  70. Temp->PosX = x;
  71. Temp->PosY = y;
  72. Temp->PosZ = z;
  73.  
  74. Temp->Znak = znak;
  75.  
  76. Temp->Istnieje = true;
  77.  
  78. if (znak == '@')
  79. Temp->Punkty = 1;
  80. else if (znak == '%')
  81. Temp->Punkty = 2;
  82. else if (znak == '$')
  83. Temp->Punkty = 3;
  84. else if (znak == '*')
  85. Temp->Punkty = 4;
  86.  
  87. if(*zarlo != NULL)
  88. Temp->nast = *zarlo;
  89.  
  90. *zarlo = Temp;
  91. }
  92.  
  93. void DodajFragmentWeza(Wonrz ** wonsz, int x, int y, int z) {
  94. Wonrz *Temp;
  95. Temp = malloc(sizeof(Wonrz));
  96.  
  97. Temp->PosX = x;
  98. Temp->PosY = y;
  99. Temp->PosZ = z;
  100.  
  101. if (*wonsz != NULL)
  102. Temp->nast = *wonsz;
  103.  
  104. *wonsz = Temp;
  105. }
  106.  
  107. void WypiszZarcie(Jedzonko *zarcie) {
  108. Jedzonko *Temp = zarcie;
  109.  
  110. while (Temp) {
  111. if(Temp->Istnieje)
  112. printf("%c:%i;%i;%i", Temp->Znak, Temp->PosX, Temp->PosY, Temp->PosZ);
  113. Temp = Temp->nast;
  114. }
  115. }
  116.  
  117. void WypiszPrzeszkody(PrzeSzkoda *przeszk) {
  118. PrzeSzkoda *Temp = przeszk;
  119.  
  120. while (Temp) {
  121. printf("%c:%i;%i;%i", Temp->Znak, Temp->PosX, Temp->PosY, Temp->PosZ);
  122. Temp = Temp->nast;
  123. }
  124. }
  125.  
  126. void WypiszWonrza(Wonrz *wonsz) {
  127. Wonrz *Temp = wonsz;
  128.  
  129. if (Temp->nast) {
  130. WypiszWonrza(Temp->nast);
  131. }
  132.  
  133. printf(":%i;%i;%i|", Temp->PosX, Temp->PosY, Temp->PosZ);
  134. }
  135.  
  136. void UsunZarcie(Jedzonko *zarcie, int x, int y, int z) {
  137. Jedzonko *Temp = zarcie;
  138.  
  139. while (Temp->PosX != x && Temp->PosY != y && Temp->PosZ != z)
  140. Temp = Temp->nast;
  141.  
  142. Temp->Istnieje = false;
  143. }
  144.  
  145. float OdlegloscEukidisowa(int x1, int y1, int z1, int x2, int y2, int z2) {
  146. float wynik = (x1-x2)*(x1-x2) + (y1 - y2)*(y1-y2) + (z1 - z2)*(z1-z2);
  147.  
  148. return wynik;
  149. }
  150.  
  151. void ZnajdzNajblizszeZarcie(Jedzonko *zarlo, Wonrz *wonsz) {
  152. Jedzonko *Temp = zarlo;
  153.  
  154. Wonrz *Temp1 = wonsz;
  155.  
  156. while (Temp1->nast)
  157. Temp1 = Temp1->nast;
  158.  
  159. float Curr = 0;
  160. float Min = 1000000;
  161.  
  162. while (Temp) {
  163. Curr = OdlegloscEukidisowa(Temp1->PosX, Temp1->PosY, Temp1->PosZ, Temp->PosX, Temp->PosY, Temp->PosZ);
  164.  
  165. if (Curr <= Min && Temp->Istnieje) {
  166. cel.x = Temp->PosX;
  167. cel.y = Temp->PosY;
  168. cel.z = Temp->PosZ;
  169. cel.znak = Temp->Znak;
  170. }
  171.  
  172. Temp = Temp->nast;
  173. }
  174. }
  175.  
  176. void PrzesunWonrzaOJeden(Wonrz *wonsz, int x, int y, int z) {
  177. Wonrz *Temp = wonsz;
  178.  
  179. if (Temp->nast){
  180. PrzesunWonrzaOJeden(Temp->nast, x, y, z);
  181. }
  182.  
  183. if (Temp->nast == NULL) {
  184. CelTemp.x = Temp->PosX;
  185. CelTemp.y = Temp->PosY;
  186. CelTemp.z = Temp->PosZ;
  187.  
  188. Temp->PosX = Temp->PosX + x;
  189. Temp->PosY = Temp->PosY + y;
  190. Temp->PosZ = Temp->PosZ + z;
  191. }
  192. else {
  193. Temp->PosX = CelTemp.x;
  194. Temp->PosY = CelTemp.y;
  195. Temp->PosZ = CelTemp.z;
  196. }
  197. }
  198.  
  199. bool CzyTrafiNaPrzeszkode(int x, int y, int z, PrzeSzkoda *przeszk, Wonrz *wonsz) {
  200. PrzeSzkoda *Temp = przeszk;
  201. Wonrz *Temp2 = wonsz;
  202.  
  203. while (Temp) {
  204.  
  205. Wonrz *Temp2 = wonsz;
  206.  
  207. if (Temp->PosX == x && Temp->PosY == y && Temp->PosZ == z)
  208. return true;
  209. while (Temp2) {
  210. if (x == Temp2->PosX && y == Temp2->PosY && z == Temp2->PosZ)
  211. return true;
  212. Temp2 = Temp2->nast;
  213. }
  214. Temp = Temp->nast;
  215. }
  216.  
  217. return false;
  218. }
  219.  
  220. bool CzyWyjdziePozaPlansze(int x, int y,int z, int r, int h) {
  221. int wynik = (r - x)*(r - x) + (r - y)*(r - y);
  222.  
  223. if (wynik <= r*r && z <= h && z >= 0)
  224. return false;
  225. else
  226. return true;
  227. }
  228.  
  229. bool CzyJestNaJedzeniu(Wonrz *wonsz) {
  230. Wonrz *Temp = wonsz;
  231.  
  232. while (Temp)
  233. Temp = Temp->nast;
  234.  
  235. if (Temp->PosX == cel.x && Temp->PosY == cel.y && Temp->PosZ == cel.z)
  236. return true;
  237. else
  238. return false;
  239. }
  240.  
  241. void PowiekszWonsza(Wonrz *wonsz, Wonrz **wonsz2, int x, int y, int z, int ile) {
  242. int m = 0;
  243.  
  244. for (m = 0; m < ile; m++) {
  245. DodajFragmentWeza(wonsz2, wonsz->PosX + x*(m+1), wonsz->PosY + y*(m + 1), wonsz->PosZ + z*(m + 1));
  246. }
  247. }
  248.  
  249. int ZnajdzNajblizszyPunkt(Wonrz *wonsz, PrzeSzkoda *przeszk, Jedzonko *zarcie, int r, int h) {
  250. Wonrz *Temp = wonsz;
  251.  
  252. while (Temp->nast)
  253. Temp = Temp->nast;
  254.  
  255. float Wyniki[6];
  256.  
  257. int licznik = 0, i=0;
  258.  
  259. bool DwaTeSame = false;
  260.  
  261. if (!CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY + 1, Temp->PosZ, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY + 1, Temp->PosZ, r, h)) { //polnoc
  262. Wyniki[licznik] = OdlegloscEukidisowa(Temp->PosX, Temp->PosY+ 1, Temp->PosZ, cel.x, cel.y, cel.z);
  263. licznik++;
  264. }
  265. else {
  266. Wyniki[licznik] = 100000;
  267. licznik++;
  268. }
  269. if (!CzyTrafiNaPrzeszkode(Temp->PosX - 1, Temp->PosY, Temp->PosZ, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX - 1, Temp->PosY, Temp->PosZ, r, h)) { //zachod
  270. Wyniki[licznik] = OdlegloscEukidisowa(Temp->PosX-1, Temp->PosY, Temp->PosZ, cel.x, cel.y, cel.z);
  271. licznik++;
  272. }
  273. else {
  274. Wyniki[licznik] = 100000;
  275. licznik++;
  276. }
  277. if (!CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY - 1, Temp->PosZ, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY - 1, Temp->PosZ, r, h)) { //polodnie
  278. Wyniki[licznik] = OdlegloscEukidisowa(Temp->PosX, Temp->PosY -1 , Temp->PosZ, cel.x, cel.y, cel.z);
  279. licznik++;
  280. }
  281. else {
  282. Wyniki[licznik] = 100000;
  283. licznik++;
  284. }
  285. if (!CzyTrafiNaPrzeszkode(Temp->PosX + 1, Temp->PosY, Temp->PosZ, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX + 1, Temp->PosY, Temp->PosZ, r, h)) { //wschod
  286. Wyniki[licznik] = OdlegloscEukidisowa(Temp->PosX+1, Temp->PosY, Temp->PosZ, cel.x, cel.y, cel.z);
  287. licznik++;
  288. }
  289. else {
  290. Wyniki[licznik] = 100000;
  291. licznik++;
  292. }
  293. if (!CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY, Temp->PosZ - 1, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY, Temp->PosZ - 1, r, h)) { //gora
  294. Wyniki[licznik] = OdlegloscEukidisowa(Temp->PosX, Temp->PosY, Temp->PosZ-1, cel.x, cel.y, cel.z);
  295. licznik++;
  296. }
  297. else {
  298. Wyniki[licznik] = 100000;
  299. licznik++;
  300. }
  301. if (!CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY, Temp->PosZ + 1, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY, Temp->PosZ + 1, r, h)) { //dol
  302. Wyniki[licznik] = OdlegloscEukidisowa(Temp->PosX, Temp->PosY, Temp->PosZ+1, cel.x, cel.y, cel.z);
  303. licznik++;
  304. }
  305. else {
  306. Wyniki[licznik] = 100000;
  307. licznik++;
  308. }
  309.  
  310. int min = Wyniki[0];
  311. int temp = 0;
  312.  
  313. for (i = 1; i < 6; i++) {
  314. if (Wyniki[i] < min) {
  315. min = Wyniki[i];
  316. temp = i;
  317. }
  318. if (Wyniki[i] == min)
  319. DwaTeSame = true;
  320. }
  321.  
  322. if (DwaTeSame) {
  323. for (i = 0; i < 6 && temp != min; i++) {
  324. if (Wyniki[i] == min)
  325. temp = i;
  326. }
  327. }
  328. return temp;
  329. }
  330.  
  331. void PrzesunWonrza(Wonrz *wonsz, Wonrz **wonsz2, PrzeSzkoda *przeszk, Jedzonko *zarcie, int r, int h) {
  332. Wonrz *Temp = wonsz;
  333.  
  334. while (Temp->nast)
  335. Temp = Temp->nast;
  336.  
  337. if (Temp->PosY < cel.y && !CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY + 1, Temp->PosZ, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX,Temp->PosY + 1, Temp->PosZ, r,h)) { //polnoc
  338. PrzesunWonrzaOJeden(wonsz, 0, 1, 0);
  339. if (Temp->PosX == cel.x && Temp->PosY == cel.y && Temp->PosZ == cel.z) {
  340. if(cel.znak == '@')
  341. PowiekszWonsza(wonsz, wonsz2,0, -1, 0, 1);
  342. if(cel.znak == '%')
  343. PowiekszWonsza(wonsz, wonsz2, 0, -1, 0, 2);
  344. if(cel.znak == '$')
  345. PowiekszWonsza(wonsz, wonsz2, 0, -1, 0, 3);
  346. if(cel.znak == '*')
  347. PowiekszWonsza(wonsz, wonsz2, 0, -1, 0, 4);
  348.  
  349. UsunZarcie(zarcie, cel.x, cel.y, cel.z);
  350. }
  351. }
  352. else if (Temp->PosX > cel.x && !CzyTrafiNaPrzeszkode(Temp->PosX - 1, Temp->PosY, Temp->PosZ, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX - 1, Temp->PosY, Temp->PosZ, r, h)) { //zachod
  353. PrzesunWonrzaOJeden(wonsz, -1, 0, 0);
  354. if (Temp->PosX == cel.x && Temp->PosY == cel.y && Temp->PosZ == cel.z) {
  355. if (cel.znak == '@')
  356. PowiekszWonsza(wonsz, wonsz2, 1, 0, 0, 1);
  357. if (cel.znak == '%')
  358. PowiekszWonsza(wonsz, wonsz2, 1, 0, 0, 2);
  359. if (cel.znak == '$')
  360. PowiekszWonsza(wonsz, wonsz2, 1, 0, 0, 3);
  361. if (cel.znak == '*')
  362. PowiekszWonsza(wonsz, wonsz2, 1, 0, 0, 4);
  363. UsunZarcie(zarcie, cel.x, cel.y, cel.z);
  364. }
  365. }
  366. else if (Temp->PosY > cel.y && !CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY - 1, Temp->PosZ, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY - 1, Temp->PosZ, r, h)) { //polodnie
  367. PrzesunWonrzaOJeden(wonsz, 0, -1, 0);
  368. if (Temp->PosX == cel.x && Temp->PosY == cel.y && Temp->PosZ == cel.z) {
  369. if (cel.znak == '@')
  370. PowiekszWonsza(wonsz, wonsz2, 0, 1, 0, 1);
  371. if (cel.znak == '%')
  372. PowiekszWonsza(wonsz, wonsz2, 0, 1, 0, 2);
  373. if (cel.znak == '$')
  374. PowiekszWonsza(wonsz, wonsz2, 0, 1, 0, 3);
  375. if (cel.znak == '*')
  376. PowiekszWonsza(wonsz, wonsz2, 0, 1, 0, 4);
  377. UsunZarcie(zarcie, cel.x, cel.y, cel.z);
  378. }
  379. }
  380. else if (Temp->PosX < cel.x && !CzyTrafiNaPrzeszkode(Temp->PosX + 1, Temp->PosY, Temp->PosZ, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX + 1, Temp->PosY, Temp->PosZ, r, h)) { //wschod
  381. PrzesunWonrzaOJeden(wonsz, 1, 0, 0);
  382. if (Temp->PosX == cel.x && Temp->PosY == cel.y && Temp->PosZ == cel.z) {
  383. if (cel.znak == '@')
  384. PowiekszWonsza(wonsz, wonsz2, -1, 0, 0, 1);
  385. if (cel.znak == '%')
  386. PowiekszWonsza(wonsz, wonsz2, -1, 0, 0, 2);
  387. if (cel.znak == '$')
  388. PowiekszWonsza(wonsz, wonsz2, -1, 0, 0, 3);
  389. if (cel.znak == '*')
  390. PowiekszWonsza(wonsz, wonsz2, -1, 0, 0, 4);
  391. UsunZarcie(zarcie, cel.x, cel.y, cel.z);
  392. }
  393. }
  394. else if (Temp->PosZ > cel.z && !CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY, Temp->PosZ - 1, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY, Temp->PosZ - 1, r, h)) { //gora
  395. PrzesunWonrzaOJeden(wonsz, 0, 0, -1);
  396. if (Temp->PosX == cel.x && Temp->PosY == cel.y && Temp->PosZ == cel.z) {
  397. if (cel.znak == '@')
  398. PowiekszWonsza(wonsz, wonsz2, 0, 0, 1, 1);
  399. if (cel.znak == '%')
  400. PowiekszWonsza(wonsz, wonsz2, 0, 0, 1, 2);
  401. if (cel.znak == '$')
  402. PowiekszWonsza(wonsz, wonsz2, 0, 0, 1, 3);
  403. if (cel.znak == '*')
  404. PowiekszWonsza(wonsz, wonsz2, 0, 0, 1, 4);
  405. UsunZarcie(zarcie, cel.x, cel.y, cel.z);
  406. }
  407. }
  408. else if (Temp->PosZ < cel.z && !CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY, Temp->PosZ + 1, przeszk, wonsz) && !CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY, Temp->PosZ + 1, r, h)) { //dol
  409. PrzesunWonrzaOJeden(wonsz, 0, 0, 1);
  410. if (Temp->PosX == cel.x && Temp->PosY == cel.y && Temp->PosZ == cel.z) {
  411. if (cel.znak == '@')
  412. PowiekszWonsza(wonsz, wonsz2, 0, 0, -1, 1);
  413. if (cel.znak == '%')
  414. PowiekszWonsza(wonsz, wonsz2, 0, 0, -1, 2);
  415. if (cel.znak == '$')
  416. PowiekszWonsza(wonsz, wonsz2, 0, 0, -1, 3);
  417. if (cel.znak == '*')
  418. PowiekszWonsza(wonsz, wonsz2, 0, 0, -1, 4);
  419. UsunZarcie(zarcie, cel.x, cel.y, cel.z);
  420. }
  421. }
  422.  
  423. else if (CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY + 1, Temp->PosZ, przeszk, wonsz) || CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY + 1, Temp->PosZ, r, h) ||
  424. CzyTrafiNaPrzeszkode(Temp->PosX - 1, Temp->PosY, Temp->PosZ, przeszk, wonsz) || CzyWyjdziePozaPlansze(Temp->PosX - 1, Temp->PosY, Temp->PosZ, r, h) ||
  425. CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY - 1, Temp->PosZ, przeszk, wonsz) || CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY - 1, Temp->PosZ, r, h) ||
  426. CzyTrafiNaPrzeszkode(Temp->PosX + 1, Temp->PosY, Temp->PosZ, przeszk, wonsz) || CzyWyjdziePozaPlansze(Temp->PosX + 1, Temp->PosY, Temp->PosZ, r, h) ||
  427. CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY, Temp->PosZ - 1, przeszk, wonsz) || CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY, Temp->PosZ - 1, r, h) ||
  428. CzyTrafiNaPrzeszkode(Temp->PosX, Temp->PosY, Temp->PosZ + 1, przeszk, wonsz) || CzyWyjdziePozaPlansze(Temp->PosX, Temp->PosY, Temp->PosZ + 1, r, h))
  429. {
  430. int gdzie = ZnajdzNajblizszyPunkt(wonsz,przeszk,zarcie,r,h);
  431.  
  432. if(gdzie == 0)
  433. PrzesunWonrzaOJeden(wonsz, 0, 1, 0);
  434. if(gdzie == 1)
  435. PrzesunWonrzaOJeden(wonsz, -1, 0, 0);
  436. if (gdzie == 2)
  437. PrzesunWonrzaOJeden(wonsz, 0, -1, 0);
  438. if (gdzie == 3)
  439. PrzesunWonrzaOJeden(wonsz, 1, 0, 0);
  440. if (gdzie == 4)
  441. PrzesunWonrzaOJeden(wonsz, 0, 0, -1);
  442. if (gdzie == 5)
  443. PrzesunWonrzaOJeden(wonsz, 0, 0, 1);
  444.  
  445. ZnajdzNajblizszeZarcie(zarcie, wonsz);
  446. }
  447. }
  448.  
  449. int IleJedzenia(Jedzonko *zarcie) {
  450. Jedzonko *Temp = zarcie;
  451.  
  452. int Ile = 0;
  453.  
  454. while (Temp) {
  455. Temp = Temp->nast;
  456. if (Temp->Istnieje)
  457. Ile++;
  458. }
  459. return Ile;
  460. }
  461.  
  462. void UsunListeZarcie(Jedzonko *zarcie) {
  463.  
  464. Jedzonko *Temp = zarcie;
  465.  
  466. if (Temp->nast)
  467. UsunListeZarcie(Temp->nast);
  468.  
  469. free(Temp);
  470. }
  471. void UsunListePrzeszkody(PrzeSzkoda *przeszk) {
  472.  
  473. PrzeSzkoda *Temp = przeszk;
  474.  
  475. if (Temp->nast)
  476. UsunListePrzeszkody(Temp->nast);
  477.  
  478. free(Temp);
  479. }
  480. void UsunListeWonrza(Wonrz *wonsz) {
  481.  
  482. Wonrz *Temp = wonsz;
  483.  
  484. if (Temp->nast)
  485. UsunListeWonrza(Temp->nast);
  486.  
  487. free(Temp);
  488. }
  489.  
  490. int main() {
  491. char PrzeszkChar = ' ';
  492.  
  493. int IleRozgrywek = 0;
  494. int Wysokosc = 0;
  495. int Promien = 0;
  496. int IleElementow = 0;
  497. int x = 0;
  498. int y = 0;
  499. int z = 0;
  500. int i = 0;
  501. int j = 0;
  502.  
  503. //printf("Wprowadz znak przeszkody: ");
  504. PrzeszkChar = getchar();
  505.  
  506. //printf("\nWprowadz ilosc rozgrywek: ");
  507. scanf("%i", &IleRozgrywek);
  508.  
  509. for (i = 0; i < IleRozgrywek; i++) {
  510.  
  511. Wonrz *Wenszyk = NULL;
  512. Wenszyk = malloc(sizeof(Wonrz));
  513. Wenszyk->nast = NULL;
  514.  
  515. PrzeSzkoda *Przeszkody = NULL;
  516.  
  517. Jedzonko *Zarelko = NULL;
  518.  
  519. //printf("\nWprowadz promien walca: ");
  520. scanf("%i", &Promien);
  521.  
  522. //printf("\nWprowadz wysokosc walca: ");
  523. scanf("%i", &Wysokosc);
  524.  
  525. //printf("\nPosX: ");
  526. scanf("%i", &x);
  527.  
  528. //printf("\nPosY: ");
  529. scanf("%i", &y);
  530.  
  531. //printf("\nPosZ: ");
  532. scanf("%i", &z);
  533.  
  534. Wenszyk->PosX = x;
  535. Wenszyk->PosY = y;
  536. Wenszyk->PosZ = z;
  537.  
  538. //printf("\nPosX: ");
  539. scanf("%i", &x);
  540.  
  541. //printf("\nPosY: ");
  542. scanf("%i", &y);
  543.  
  544. //printf("\nPosZ: ");
  545. scanf("%i", &z);
  546.  
  547. DodajFragmentWeza(&Wenszyk, x, y, z);
  548.  
  549. //printf("\nIle Elementow specjalnych: ");
  550. scanf("%i", &IleElementow);
  551.  
  552. int IlePrzeszkod = 0;
  553. int IleZarcia = 0;
  554.  
  555. for (j = 0; j < IleElementow; j++) {
  556. char t;
  557. char temp;
  558.  
  559. //printf("\nZnak: ");
  560.  
  561. scanf(" %c", &t);
  562.  
  563. //printf("\nPozycja X: ");
  564. scanf("%i", &x);
  565.  
  566. scanf(" %c", &temp);
  567.  
  568. //printf("\nPozycja Y: ");
  569. scanf("%i", &y);
  570.  
  571. scanf(" %c", &temp);
  572.  
  573. //printf("\nPozycja Z: ");
  574. scanf("%i", &z);
  575.  
  576. if (t == PrzeszkChar) {
  577. if (IlePrzeszkod == 0) {
  578. Przeszkody = malloc(sizeof(PrzeSzkoda));
  579. Przeszkody->nast = NULL;
  580.  
  581. Przeszkody->PosX = x;
  582. Przeszkody->PosY = y;
  583. Przeszkody->PosZ = z;
  584.  
  585. Przeszkody->Znak = PrzeszkChar;
  586.  
  587. Przeszkody->nast = NULL;
  588. }
  589. else
  590. DodajPrzeszkode(Przeszkody, x, y, z, PrzeszkChar);
  591.  
  592. IlePrzeszkod++;
  593. }
  594. if (t == '@' || t == '%' || t == '$' || t == '*') {
  595. if (IleZarcia == 0) {
  596. Zarelko = malloc(sizeof(Jedzonko));
  597. Zarelko->nast = NULL;
  598.  
  599. Zarelko->PosX = x;
  600. Zarelko->PosY = y;
  601. Zarelko->PosZ = z;
  602.  
  603. Zarelko->Znak = t;
  604.  
  605. if (t == '@')
  606. Zarelko->Punkty = 1;
  607. else if (t == '%')
  608. Zarelko->Punkty = 2;
  609. else if (t == '$')
  610. Zarelko->Punkty = 3;
  611. else if (t == '*')
  612. Zarelko->Punkty = 4;
  613. }
  614. else
  615. DodajZarcie(&Zarelko, x, y, z, t);
  616.  
  617. IleZarcia++;
  618. }
  619. }
  620.  
  621. while (IleZarcia > 0) {
  622. printf("\n^");
  623. WypiszWonrza(Wenszyk);
  624. printf("\n");
  625. WypiszPrzeszkody(Przeszkody);
  626. printf("\n");
  627. WypiszZarcie(Zarelko);
  628. //printf("\n");
  629.  
  630. ZnajdzNajblizszeZarcie(Zarelko, Wenszyk);
  631. PrzesunWonrza(Wenszyk, &Wenszyk, Przeszkody, Zarelko, Promien, Wysokosc);
  632.  
  633. Jedzonko *Temp = Zarelko;
  634. IleZarcia = 0;
  635.  
  636. if (Temp->Istnieje)
  637. IleZarcia++;
  638.  
  639. while (Temp->nast) {
  640. if (Temp->Istnieje)
  641. IleZarcia++;
  642. }
  643. }
  644.  
  645. printf("\n^");
  646. WypiszWonrza(Wenszyk);
  647. printf("\n");
  648. WypiszPrzeszkody(Przeszkody);
  649. printf("\n");
  650. WypiszZarcie(Zarelko);
  651.  
  652. UsunListeZarcie(Zarelko);
  653. UsunListeWonrza(Wenszyk);
  654. UsunListePrzeszkody(Przeszkody);
  655. }
  656. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement