Advertisement
Koelion

gory + wyrzyby

Apr 9th, 2013
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <conio.h>
  4. #include <cmath>
  5. #include <ctime>
  6. #include <windows.h>
  7.  
  8. using namespace std;
  9. // Globalne
  10. int mapa[1500][1500];
  11. // Legenda XD
  12. // 0 - Neutralne Pole ; 1 - Góry Podstawowe , 2- Góry Dorobione , 3-Góry Skosne ; 4 - Krzaki xD; 5 - Wyrzyny Podstawa , 6 - Wyrzyny Skosne , 7 - Wyrzyny dorobione;
  13. //
  14. int rx,ry; // r = ruch
  15. // Wlaczenie funkcji
  16. void uzupelnij_mape();
  17. void rysuj();
  18. // Klasy
  19. class gory
  20. {
  21. public:
  22. int gx;
  23. int gy;
  24. int ilosc_gor;
  25.  
  26. void stworz_gory();
  27. void powieksz_gory();
  28. void wyrzyny_gor();
  29. };
  30.  
  31. class wyrzyny
  32. {
  33. public:
  34. int wx;
  35. int wy;
  36. int ilosc_wyrzyn;
  37.  
  38. void stworz_wyrzyny();
  39. void powieksz_wyrzyny();
  40. };
  41.  
  42. //---------------------
  43. //-------------------
  44. // Main
  45. int main()
  46. {
  47. int kx,ky;
  48. // Rozdzielczosc
  49. SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),{200,80});
  50. // Zmienne
  51. gory gora;
  52. wyrzyny wyrzyna;
  53. rx=ry=5;
  54. //------
  55. srand(time(NULL));
  56. uzupelnij_mape();
  57. gora.ilosc_gor=300;
  58. gora.stworz_gory();
  59. wyrzyna.ilosc_wyrzyn=200;
  60. wyrzyna.stworz_wyrzyny();
  61. rysuj();
  62. // ---
  63. while(true)
  64. {
  65. // Ruch po mapie
  66. if(kbhit())
  67. {
  68. switch(getch())
  69. {
  70. case 'a':
  71. rx-=15;
  72. break;
  73. case 'd':
  74. rx+=15;
  75. break;
  76. case 'w':
  77. ry-=15;
  78. break;
  79. case 's':
  80. ry+=15;
  81. break;
  82. }
  83. rysuj();
  84. }
  85.  
  86. }
  87.  
  88. }
  89. //----------------------------
  90. //------------------------------
  91.  
  92. // Funkcje Klas
  93.  
  94. // Gory !!!
  95. void gory::stworz_gory()
  96. {
  97. double procent;
  98. // Kod funcji gor
  99. for(int i=0;i<ilosc_gor;i++)
  100. {
  101. // Zmienne
  102. int wielkosc_gory;
  103. wielkosc_gory=rand()%150+50;
  104. bool wolne_pole[8];
  105. int wylosowane_pole;
  106. // Losowanie 1 góry
  107. do
  108. {
  109. gx=rand()%1350+30;
  110. gy=rand()%1350+30;
  111. }
  112. while(mapa[gy][gx]!=0);
  113. mapa[gy][gx]=1;
  114. //tworzenie reszty gor -- do poprayw tabowanie narazie nie chce mi sie XD
  115. for(int j=0;j<wielkosc_gory;j++)
  116. {
  117. // Sprawdzanie ktore pola są wolne
  118. //
  119. // 1|2|3 // 1=[y+1][x-1] 2=[y+1][x] 3=[y+1][x+1]
  120. // 4|x|5 // 4=[y][x-1] 5=[y][x+1]
  121. // 6|7|8 // 6=[y-1][x-1] 7=[y-1][x] 8=[y-1][x+1]
  122.  
  123. if(mapa[gy+1][gx-1]==0)
  124. wolne_pole[0]=true;
  125. else
  126. wolne_pole[0]=false;
  127. if(mapa[gy+1][gx]==0)
  128. wolne_pole[1]=true;
  129. else
  130. wolne_pole[1]=false;
  131. if(mapa[gy+1][gx+1]==0)
  132. wolne_pole[2]=true;
  133. else
  134. wolne_pole[2]=false;
  135. if(mapa[gy][gx-1]==0)
  136. wolne_pole[3]=true;
  137. else
  138. wolne_pole[3]=false;
  139. if(mapa[gy][gx+1]==0)
  140. wolne_pole[4]=true;
  141. else
  142. wolne_pole[4]=false;
  143. if(mapa[gy-1][gx-1]==0)
  144. wolne_pole[5]=true;
  145. else
  146. wolne_pole[5]=false;
  147. if(mapa[gy-1][gx]==0)
  148. wolne_pole[6]=true;
  149. else
  150. wolne_pole[6]=false;
  151. if(mapa[gy-1][gx+1]==0)
  152. wolne_pole[7]=true;
  153. else
  154. wolne_pole[7]=false;
  155.  
  156. // Sprawdzanie czy jest jakies wolne pole oraz zliczanie ich jak nie to tworzenie nowych gor
  157. int zlicz_ilosc_wolnych_pol=0;
  158. for(int k=0;k<8;k++)
  159. {
  160. if(wolne_pole[k]==true)
  161. zlicz_ilosc_wolnych_pol++;
  162. }
  163.  
  164. if(zlicz_ilosc_wolnych_pol==0)
  165. {
  166. gx=rand()%1350+30;
  167. gy=rand()%1350+30;
  168.  
  169. while(mapa[gy][gx]!=0)
  170. {
  171. gx=rand()%1350+30;
  172. gy=rand()%1350+30;
  173. }
  174.  
  175. continue;
  176.  
  177. }
  178. // Losowanie pola gory
  179. wylosowane_pole=rand()%8;
  180.  
  181. while(wolne_pole[wylosowane_pole]==false)
  182. wylosowane_pole=rand()%8;
  183.  
  184. switch (wylosowane_pole)
  185. {
  186. case 0:
  187. gy++;
  188. gx--;
  189. break;
  190. case 1:
  191. gy++;
  192. break;
  193. case 2:
  194. gy++;
  195. gx++;
  196. break;
  197. case 3:
  198. gx--;
  199. break;
  200. case 4:
  201. gx++;
  202. break;
  203. case 5:
  204. gy--;
  205. gx--;
  206. break;
  207. case 6:
  208. gy--;
  209. break;
  210. case 7:
  211. gy--;
  212. gx++;
  213. break;
  214. }
  215. mapa[gy][gx]=1;
  216. }
  217. powieksz_gory();
  218. system("cls");
  219. procent = (i*100)/ilosc_gor;
  220. cout<<"Tworzenie gor:" << procent <<"%" <<endl;
  221. cout<<"Mozliwy jest wyciek"<<endl;
  222. }
  223. wyrzyny_gor();
  224. }
  225. //----
  226. void gory::powieksz_gory()
  227. {
  228. int x,y;
  229. int groboscgor;
  230. int groboscskosna;
  231. int zlicz=0;
  232. bool koniec_cofania=true;
  233. for(y=0;y<1500;y++)
  234. for(x=0;x<1500;x++)
  235. {
  236. if(mapa[y][x]==1)
  237. {
  238. if(zlicz<6&&koniec_cofania==true)
  239. zlicz++;
  240. else
  241. {
  242. zlicz--;
  243. koniec_cofania=false;
  244. if(zlicz==0)
  245. koniec_cofania=true;
  246. }
  247. groboscgor=zlicz+1;
  248. for(int i=1;i<groboscgor;i++)
  249. {
  250. if(mapa[y][x+i]==0)
  251. mapa[y][x+i]=2;
  252. if(mapa[y+i][x]==0)
  253. mapa[y+i][x]=2;
  254. if(mapa[y][x-i]==0)
  255. mapa[y][x-i]=2;
  256. if(mapa[y-i][x]==0)
  257. mapa[y-i][x]=2;
  258.  
  259. if(mapa[y+i][x+i]==0)
  260. mapa[y+i][x+i]=3;
  261. if(mapa[y+i][x-i]==0)
  262. mapa[y+i][x-i]=3;
  263. if(mapa[y-i][x-i]==0)
  264. mapa[y-i][x-i]=3;
  265. if(mapa[y-i][x+i]==0)
  266. mapa[y-i][x+i]=3;
  267. }
  268. }
  269. if(mapa[y][x]==3)
  270. {
  271. groboscskosna=rand()%3+1;
  272. for(int i=1;i<groboscskosna;i++)
  273. {
  274. if(mapa[y][x+i]==0)
  275. mapa[y][x+i]=2;
  276. if(mapa[y+i][x]==0)
  277. mapa[y+i][x]=2;
  278. if(mapa[y][x-i]==0)
  279. mapa[y][x-i]=2;
  280. if(mapa[y-i][x]==0)
  281. mapa[y-i][x]=2;
  282. }
  283. }
  284. }
  285. }
  286. //-------
  287. void gory::wyrzyny_gor()
  288. {
  289. int x,y;
  290. int groboscwyzyn;
  291. int groboscskosna;
  292. int zlicz=0;
  293. bool koniec_cofania=true;
  294.  
  295. for(y=0;y<1500;y++)
  296. for(x=0;x<1500;x++)
  297. {
  298. if(mapa[y][x]==1||mapa[y][x]==2||mapa[y][x]==3)
  299. {
  300. if(zlicz<6&&koniec_cofania==true)
  301. zlicz++;
  302. else
  303. {
  304. zlicz--;
  305. koniec_cofania=false;
  306. if(zlicz==0)
  307. koniec_cofania=true;
  308. }
  309. groboscwyzyn=zlicz+1;
  310. for(int i=1;i<groboscwyzyn;i++)
  311. {
  312. if(mapa[y][x+i]==0)
  313. mapa[y][x+i]=5;
  314. if(mapa[y+i][x]==5)
  315. mapa[y+i][x]=5;
  316. if(mapa[y][x-i]==0)
  317. mapa[y][x-i]=5;
  318. if(mapa[y-i][x]==0)
  319. mapa[y-i][x]=5;
  320.  
  321. if(mapa[y+i][x+i]==0)
  322. mapa[y+i][x+i]=6;
  323. if(mapa[y+i][x-i]==0)
  324. mapa[y+i][x-i]=6;
  325. if(mapa[y-i][x-i]==0)
  326. mapa[y-i][x-i]=6;
  327. if(mapa[y-i][x+i]==0)
  328. mapa[y-i][x+i]=6;
  329. }
  330. }
  331.  
  332. if(mapa[y][x]==6)
  333. {
  334. groboscskosna=rand()%3+1;
  335. for(int i=1;i<groboscskosna;i++)
  336. {
  337. if(mapa[y][x+i]==0)
  338. mapa[y][x+i]=5;
  339. if(mapa[y+i][x]==0)
  340. mapa[y+i][x]=5;
  341. if(mapa[y][x-i]==0)
  342. mapa[y][x-i]=5;
  343. if(mapa[y-i][x]==0)
  344. mapa[y-i][x]=5;
  345. }
  346. }
  347. }
  348. }
  349. // Wyrzyny !!!
  350. void wyrzyny::stworz_wyrzyny()
  351. {
  352. double procent;
  353. // Kod funcji wyrzyn
  354. for(int i=0;i<ilosc_wyrzyn;i++)
  355. {
  356. // Zmienne
  357. int wielkosc_wyrzyny;
  358. wielkosc_wyrzyny=rand()%150+50;
  359. bool wolne_pole[8];
  360. int wylosowane_pole;
  361. // Losowanie 1 góry
  362. do
  363. {
  364. wx=rand()%1350+30;
  365. wy=rand()%1350+30;
  366. }
  367. while(mapa[wy][wx]!=0);
  368. mapa[wy][wx]=5;
  369. //tworzenie reszty wyrzyn -- do poprayw tabowanie narazie nie chce mi sie XD
  370. for(int j=0;j<wielkosc_wyrzyny;j++)
  371. {
  372. // Sprawdzanie ktore pola są wolne
  373. //
  374. // 1|2|3 // 1=[y+1][x-1] 2=[y+1][x] 3=[y+1][x+1]
  375. // 4|x|5 // 4=[y][x-1] 5=[y][x+1]
  376. // 6|7|8 // 6=[y-1][x-1] 7=[y-1][x] 8=[y-1][x+1]
  377.  
  378. if(mapa[wy+1][wx-1]==0)
  379. wolne_pole[0]=true;
  380. else
  381. wolne_pole[0]=false;
  382. if(mapa[wy+1][wx]==0)
  383. wolne_pole[1]=true;
  384. else
  385. wolne_pole[1]=false;
  386. if(mapa[wy+1][wx+1]==0)
  387. wolne_pole[2]=true;
  388. else
  389. wolne_pole[2]=false;
  390. if(mapa[wy][wx-1]==0)
  391. wolne_pole[3]=true;
  392. else
  393. wolne_pole[3]=false;
  394. if(mapa[wy][wx+1]==0)
  395. wolne_pole[4]=true;
  396. else
  397. wolne_pole[4]=false;
  398. if(mapa[wy-1][wx-1]==0)
  399. wolne_pole[5]=true;
  400. else
  401. wolne_pole[5]=false;
  402. if(mapa[wy-1][wx]==0)
  403. wolne_pole[6]=true;
  404. else
  405. wolne_pole[6]=false;
  406. if(mapa[wy-1][wx+1]==0)
  407. wolne_pole[7]=true;
  408. else
  409. wolne_pole[7]=false;
  410.  
  411. // Sprawdzanie czy jest jakies wolne pole oraz zliczanie ich jak nie to tworzenie nowych gor
  412. int zlicz_ilosc_wolnych_pol=0;
  413. for(int k=0;k<8;k++)
  414. {
  415. if(wolne_pole[k]==true)
  416. zlicz_ilosc_wolnych_pol++;
  417. }
  418.  
  419. if(zlicz_ilosc_wolnych_pol==0)
  420. {
  421. wx=rand()%1350+30;
  422. wy=rand()%1350+30;
  423.  
  424. while(mapa[wy][wx]!=0)
  425. {
  426. wx=rand()%1350+30;
  427. wy=rand()%1350+30;
  428. }
  429.  
  430. continue;
  431.  
  432. }
  433. // Losowanie pola gory
  434. wylosowane_pole=rand()%8;
  435.  
  436. while(wolne_pole[wylosowane_pole]==false)
  437. wylosowane_pole=rand()%8;
  438.  
  439. switch (wylosowane_pole)
  440. {
  441. case 0:
  442. wy++;
  443. wx--;
  444. break;
  445. case 1:
  446. wy++;
  447. break;
  448. case 2:
  449. wy++;
  450. wx++;
  451. break;
  452. case 3:
  453. wx--;
  454. break;
  455. case 4:
  456. wx++;
  457. break;
  458. case 5:
  459. wy--;
  460. wx--;
  461. break;
  462. case 6:
  463. wy--;
  464. break;
  465. case 7:
  466. wy--;
  467. wx++;
  468. break;
  469. }
  470. mapa[wy][wx]=5;
  471. }
  472. powieksz_wyrzyny();
  473. system("cls");
  474. procent = (i*100)/ilosc_wyrzyn;
  475. cout<<"Tworzenie wyrzyn:" << procent <<"%" <<endl;
  476. cout<<"Mozliwy jest wyciek"<<endl;
  477. }
  478.  
  479. }
  480. //-----
  481. void wyrzyny::powieksz_wyrzyny()
  482. {
  483. int x,y;
  484. int groboscwyrzyn;
  485. int groboscskosna;
  486. int zlicz=0;
  487. bool koniec_cofania=true;
  488. for(y=0;y<1500;y++)
  489. for(x=0;x<1500;x++)
  490. {
  491. if(mapa[y][x]==5)
  492. {
  493. if(zlicz<6&&koniec_cofania==true)
  494. zlicz++;
  495. else
  496. {
  497. zlicz--;
  498. koniec_cofania=false;
  499. if(zlicz==0)
  500. koniec_cofania=true;
  501. }
  502. groboscwyrzyn=zlicz+1;
  503. for(int i=1;i<groboscwyrzyn;i++)
  504. {
  505. if(mapa[y][x+i]==0)
  506. mapa[y][x+i]=7;
  507. if(mapa[y+i][x]==0)
  508. mapa[y+i][x]=7;
  509. if(mapa[y][x-i]==0)
  510. mapa[y][x-i]=7;
  511. if(mapa[y-i][x]==0)
  512. mapa[y-i][x]=7;
  513.  
  514. if(mapa[y+i][x+i]==0)
  515. mapa[y+i][x+i]=6;
  516. if(mapa[y+i][x-i]==0)
  517. mapa[y+i][x-i]=6;
  518. if(mapa[y-i][x-i]==0)
  519. mapa[y-i][x-i]=6;
  520. if(mapa[y-i][x+i]==0)
  521. mapa[y-i][x+i]=6;
  522. }
  523. }
  524. if(mapa[y][x]==6)
  525. {
  526. groboscskosna=rand()%3+1;
  527. for(int i=1;i<groboscskosna;i++)
  528. {
  529. if(mapa[y][x+i]==0)
  530. mapa[y][x+i]=7;
  531. if(mapa[y+i][x]==0)
  532. mapa[y+i][x]=7;
  533. if(mapa[y][x-i]==0)
  534. mapa[y][x-i]=7;
  535. if(mapa[y-i][x]==0)
  536. mapa[y-i][x]=7;
  537. }
  538. }
  539. }
  540. }
  541.  
  542. //-----
  543. // Funkcje
  544. void uzupelnij_mape()
  545. {
  546. int x,y;
  547.  
  548. for(y=0;y<1500;y++)
  549. for(x=0;x<1500;x++)
  550. mapa[y][x]=0;
  551. }
  552.  
  553. void rysuj()
  554. {
  555. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),{0,0});
  556. int x,y;
  557.  
  558. for(y=ry;y<80+ry;y++)
  559. for(x=rx;x<200+rx;x++)
  560. {
  561. if(mapa[y][x]==0)
  562. {
  563. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0A);
  564. cout<<(char)219;
  565. }
  566. else if(mapa[y][x]==1||mapa[y][x]==2||mapa[y][x]==3)
  567. {
  568. if(mapa[y][x]==1)
  569. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x04);
  570. else
  571. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0C);
  572. cout<<(char)30;
  573. }
  574. else if(mapa[y][x]==4)
  575. {
  576. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0D);
  577. cout<<(char)225;
  578. }
  579. else if(mapa[y][x]==5||mapa[y][x]==6||mapa[y][x]==7)
  580. {
  581. if(mapa[y][x]==5)
  582. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x06);
  583. else
  584. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0E);
  585. cout<<(char)127;
  586. }
  587.  
  588. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0F);
  589. }
  590. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement