Advertisement
Koelion

Gory

Apr 8th, 2013
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.44 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;
  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. // Main
  32. int main()
  33. {
  34. int kx,ky;
  35. // Rozdzielczosc
  36. SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),{200,80});
  37. // Zmienne
  38. gory gora;
  39. rx=ry=5;
  40. //------
  41. srand(time(NULL));
  42. uzupelnij_mape();
  43. gora.ilosc_gor=300;
  44. gora.stworz_gory();
  45.  
  46. rysuj();
  47. // ---
  48. while(true)
  49. {
  50. // Ruch po mapie
  51. if(kbhit())
  52. {
  53. switch(getch())
  54. {
  55. case 'a':
  56. rx-=15;
  57. break;
  58. case 'd':
  59. rx+=15;
  60. break;
  61. case 'w':
  62. ry-=15;
  63. break;
  64. case 's':
  65. ry+=15;
  66. break;
  67. }
  68. rysuj();
  69. }
  70.  
  71. }
  72.  
  73. }
  74. // Funkcje Klas
  75.  
  76. // Gory !!!
  77. void gory::stworz_gory()
  78. {
  79. // Kod funcji gor
  80. for(int i=0;i<ilosc_gor;i++)
  81. {
  82. // Zmienne
  83. int wielkosc_gory;
  84. wielkosc_gory=rand()%150+50;
  85. bool wolne_pole[8];
  86. int wylosowane_pole;
  87.  
  88. // Losowanie 1 góry
  89. do
  90. {
  91. gx=rand()%1400+20;
  92. gy=rand()%1400+20;
  93. }
  94. while(mapa[gy][gx]!=0);
  95. mapa[gy][gx]=1;
  96. //tworzenie reszty gor -- do poprayw tabowanie narazie nie chce mi sie XD
  97. for(int j=0;j<wielkosc_gory;j++)
  98. {
  99. // Sprawdzanie ktore pola są wolne
  100. //
  101. // 1|2|3 // 1=[y+1][x-1] 2=[y+1][x] 3=[y+1][x+1]
  102. // 4|x|5 // 4=[y][x-1] 5=[y][x+1]
  103. // 6|7|8 // 6=[y-1][x-1] 7=[y-1][x] 8=[y-1][x+1]
  104.  
  105. if(mapa[gy+1][gx-1]==0)
  106. wolne_pole[0]=true;
  107. else
  108. wolne_pole[0]=false;
  109. if(mapa[gy+1][gx]==0)
  110. wolne_pole[1]=true;
  111. else
  112. wolne_pole[1]=false;
  113. if(mapa[gy+1][gx+1]==0)
  114. wolne_pole[2]=true;
  115. else
  116. wolne_pole[2]=false;
  117. if(mapa[gy][gx-1]==0)
  118. wolne_pole[3]=true;
  119. else
  120. wolne_pole[3]=false;
  121. if(mapa[gy][gx+1]==0)
  122. wolne_pole[4]=true;
  123. else
  124. wolne_pole[4]=false;
  125. if(mapa[gy-1][gx-1]==0)
  126. wolne_pole[5]=true;
  127. else
  128. wolne_pole[5]=false;
  129. if(mapa[gy-1][gx]==0)
  130. wolne_pole[6]=true;
  131. else
  132. wolne_pole[6]=false;
  133. if(mapa[gy-1][gx+1]==0)
  134. wolne_pole[7]=true;
  135. else
  136. wolne_pole[7]=false;
  137.  
  138. // Sprawdzanie czy jest jakies wolne pole oraz zliczanie ich jak nie to tworzenie nowych gor
  139. int zlicz_ilosc_wolnych_pol=0;
  140. for(int k=0;k<8;k++)
  141. {
  142. if(wolne_pole[k]==true)
  143. zlicz_ilosc_wolnych_pol++;
  144. }
  145.  
  146. if(zlicz_ilosc_wolnych_pol==0)
  147. {
  148. gx=rand()%1400+20;
  149. gy=rand()%1400+20;
  150.  
  151. while(mapa[gy][gx]!=0)
  152. {
  153. gx=rand()%1400+20;
  154. gy=rand()%1400+20;
  155. }
  156.  
  157. continue;
  158.  
  159. }
  160. // Losowanie pola gory
  161. wylosowane_pole=rand()%8;
  162.  
  163. while(wolne_pole[wylosowane_pole]==false)
  164. wylosowane_pole=rand()%8;
  165.  
  166. switch (wylosowane_pole)
  167. {
  168. case 0:
  169. gy++;
  170. gx--;
  171. break;
  172. case 1:
  173. gy++;
  174. break;
  175. case 2:
  176. gy++;
  177. gx++;
  178. break;
  179. case 3:
  180. gx--;
  181. break;
  182. case 4:
  183. gx++;
  184. break;
  185. case 5:
  186. gy--;
  187. gx--;
  188. break;
  189. case 6:
  190. gy--;
  191. break;
  192. case 7:
  193. gy--;
  194. gx++;
  195. break;
  196. }
  197. mapa[gy][gx]=1;
  198. }
  199.  
  200.  
  201. powieksz_gory();
  202. }
  203. wyrzyny_gor();
  204.  
  205. }
  206. //----
  207. void gory::powieksz_gory()
  208. {
  209. int x,y;
  210. int groboscgor;
  211. int groboscskosna;
  212. int zlicz=0;
  213. bool koniec_cofania=true;
  214. for(y=0;y<1500;y++)
  215. for(x=0;x<1500;x++)
  216. {
  217. if(mapa[y][x]==1)
  218. {
  219. if(zlicz<6&&koniec_cofania==true)
  220. zlicz++;
  221. else
  222. {
  223. zlicz--;
  224. koniec_cofania=false;
  225. if(zlicz==0)
  226. koniec_cofania=true;
  227. }
  228. groboscgor=zlicz+1;
  229. for(int i=1;i<groboscgor;i++)
  230. {
  231. if(mapa[y][x+i]==0)
  232. mapa[y][x+i]=2;
  233. if(mapa[y+i][x]==0)
  234. mapa[y+i][x]=2;
  235. if(mapa[y][x-i]==0)
  236. mapa[y][x-i]=2;
  237. if(mapa[y-i][x]==0)
  238. mapa[y-i][x]=2;
  239.  
  240. if(mapa[y+i][x+i]==0)
  241. mapa[y+i][x+i]=3;
  242. if(mapa[y+i][x-i]==0)
  243. mapa[y+i][x-i]=3;
  244. if(mapa[y-i][x-i]==0)
  245. mapa[y-i][x-i]=3;
  246. if(mapa[y-i][x+i]==0)
  247. mapa[y-i][x+i]=3;
  248. }
  249. }
  250. if(mapa[y][x]==3)
  251. {
  252. groboscskosna=rand()%3+1;
  253. for(int i=1;i<groboscskosna;i++)
  254. {
  255. if(mapa[y][x+i]==0)
  256. mapa[y][x+i]=2;
  257. if(mapa[y+i][x]==0)
  258. mapa[y+i][x]=2;
  259. if(mapa[y][x-i]==0)
  260. mapa[y][x-i]=2;
  261. if(mapa[y-i][x]==0)
  262. mapa[y-i][x]=2;
  263. }
  264. }
  265. }
  266. }
  267. //-------
  268. void gory::wyrzyny_gor()
  269. {
  270. int x,y;
  271. int groboscwyzyn;
  272. int groboscskosna;
  273. int zlicz=0;
  274. bool koniec_cofania=true;
  275.  
  276. for(y=0;y<1500;y++)
  277. for(x=0;x<1500;x++)
  278. {
  279. if(mapa[y][x]==1||mapa[y][x]==2||mapa[y][x]==3)
  280. {
  281. if(zlicz<6&&koniec_cofania==true)
  282. zlicz++;
  283. else
  284. {
  285. zlicz--;
  286. koniec_cofania=false;
  287. if(zlicz==0)
  288. koniec_cofania=true;
  289. }
  290. groboscwyzyn=zlicz+1;
  291. for(int i=1;i<groboscwyzyn;i++)
  292. {
  293. if(mapa[y][x+i]==0)
  294. mapa[y][x+i]=5;
  295. if(mapa[y+i][x]==5)
  296. mapa[y+i][x]=5;
  297. if(mapa[y][x-i]==0)
  298. mapa[y][x-i]=5;
  299. if(mapa[y-i][x]==0)
  300. mapa[y-i][x]=5;
  301.  
  302. if(mapa[y+i][x+i]==0)
  303. mapa[y+i][x+i]=6;
  304. if(mapa[y+i][x-i]==0)
  305. mapa[y+i][x-i]=6;
  306. if(mapa[y-i][x-i]==0)
  307. mapa[y-i][x-i]=6;
  308. if(mapa[y-i][x+i]==0)
  309. mapa[y-i][x+i]=6;
  310. }
  311. }
  312.  
  313. if(mapa[y][x]==6)
  314. {
  315. groboscskosna=rand()%3+1;
  316. for(int i=1;i<groboscskosna;i++)
  317. {
  318. if(mapa[y][x+i]==0)
  319. mapa[y][x+i]=5;
  320. if(mapa[y+i][x]==0)
  321. mapa[y+i][x]=5;
  322. if(mapa[y][x-i]==0)
  323. mapa[y][x-i]=5;
  324. if(mapa[y-i][x]==0)
  325. mapa[y-i][x]=5;
  326. }
  327. }
  328. }
  329. }
  330. // Funkcje
  331. void uzupelnij_mape()
  332. {
  333. int x,y;
  334.  
  335. for(y=0;y<1500;y++)
  336. for(x=0;x<1500;x++)
  337. mapa[y][x]=0;
  338. }
  339.  
  340. void rysuj()
  341. {
  342. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),{0,0});
  343. int x,y;
  344.  
  345. for(y=ry;y<80+ry;y++)
  346. for(x=rx;x<200+rx;x++)
  347. {
  348. if(mapa[y][x]==0)
  349. {
  350. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0A);
  351. cout<<(char)219;
  352. }
  353. else if(mapa[y][x]==1||mapa[y][x]==2||mapa[y][x]==3)
  354. {
  355. if(mapa[y][x]==1)
  356. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x04);
  357. else
  358. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0C);
  359. cout<<(char)30;
  360. }
  361. else if(mapa[y][x]==4)
  362. {
  363. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0D);
  364. cout<<(char)225;
  365. }
  366. else if(mapa[y][x]==5||mapa[y][x]==6)
  367. {
  368. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0E);
  369. cout<<(char)127;
  370. }
  371.  
  372. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0F);
  373. }
  374. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement