Advertisement
Garusek

runner 10.05.2016

May 10th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.16 KB | None | 0 0
  1. #include "ctime"
  2. #include <conio.h>
  3. #include <iostream>
  4. #include "windows.h"
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8. void gotoxy(int x, int y)
  9.  
  10. {
  11. COORD c;
  12. c.X = x -1;
  13. c.Y = y -1;
  14. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
  15. }
  16. //k - klawisz
  17. enum kodyKlawiszy{kgora=72, kdol=80, klewo=75, kprawo=77, kenter=13, kesc=27};
  18.  
  19. struct Obszar
  20. {
  21. int minX, minY, maxX, maxY;
  22. };
  23.  
  24. int wczytajKlawisz(void)
  25. {
  26. int Klawisz = getch();
  27. return Klawisz;
  28. }
  29.  
  30. void czyscEkran()
  31. {
  32. system("cls");
  33. }
  34.  
  35. void napiszZnak (int x, int y, char c)
  36. {
  37. gotoxy (x,y);
  38. putch(c);
  39. }
  40.  
  41. class Runner
  42. {
  43. private: //atrybuty //WSZYSTKIE PODAJ TO GETER I SETER
  44. int x;
  45. int y;
  46. char kodZnaku; //znak Runnera
  47. Obszar terytorium; //terytorium Runnera, po ktory moze sie porszac
  48. public:
  49. Runner(int jakieX=40, int jakieY=12, char jakiZnak='*');
  50. //metody dostepowe
  51. void ustawX (int jakieX); //ustawiaj¹ca
  52. void ustawY (int jakieY);
  53. void ustawPozycie(int jakieX, int jakieY);
  54. void ustawZnak (char jakiZnak);
  55.  
  56. void ustawTerytorium (int jakieMinX, int jakieMinY, int jakieMaxX, int jakieMaxY);
  57. void podajTerytorium (int& minX, int& minY, int& maxX, int& maxY);
  58.  
  59. int podajX() {return x;} //odczytuj¹ca
  60. int podajY() {return y;}
  61. void podajPozycie(int& jakieX, int& jakieY) {jakieX=x; jakieY=y;}
  62. char podajZnak() {return kodZnaku;}
  63.  
  64. void przesunX(int oIle); //zmieniaj¹ce
  65. void przesunY(int oIle);
  66. void przesun (int oIleX, int oIleY);//jednoczesnie wszystko
  67.  
  68. void rysujsie(void);
  69. void zmazsie(void);
  70. };
  71.  
  72. Runner::Runner(int jakieX, int jakieY, char jakiZnak)
  73. {
  74. ustawTerytorium(1,80,1,24);
  75. ustawX(jakieX);
  76. ustawY(jakieY);
  77. ustawZnak(jakiZnak);
  78. }
  79.  
  80. void Runner::ustawTerytorium(int jakieMinX, int jakieMinY, int jakieMaxX, int jakieMaxY)
  81. {
  82. if (jakieMinX<1) terytorium.minX=1;
  83. else if (jakieMinX>75) terytorium.minX=75;
  84. else terytorium.minX=jakieMinX;
  85.  
  86. if (jakieMaxX<terytorium.minX+5) terytorium.maxX=terytorium.minX+5;
  87. else if (jakieMaxX>80) terytorium.maxX=80;
  88. else terytorium.maxX=jakieMaxX;
  89.  
  90. if (jakieMinY<1) terytorium.minY=1;
  91. else if (jakieMinY>20) terytorium.minY=20;
  92. else terytorium.minY=jakieMinY;
  93.  
  94. if (jakieMaxY<terytorium.minY+4) terytorium.maxY=terytorium.minY+4;
  95. else if (jakieMaxY>24) terytorium.maxY=24;
  96. else terytorium.maxY=jakieMaxY;
  97. }
  98.  
  99. void Runner::podajTerytorium(int& jakieMinX, int& jakieMinY, int& jakieMaxX, int& jakieMaxY)
  100. {
  101. jakieMaxX=terytorium.maxX;
  102. jakieMaxY=terytorium.maxY;
  103. jakieMinX=terytorium.minX;
  104. jakieMinY=terytorium.minY;
  105. }
  106.  
  107. void Runner::ustawX(int jakieX)
  108. {
  109. if (jakieX < terytorium.minX) x = terytorium.minX;
  110. else
  111. if (jakieX>terytorium.maxX) x = terytorium.maxX;
  112. else x = jakieX;
  113.  
  114. if (jakieX > 100) x = terytorium.minX +(terytorium.maxX - terytorium.minX)/2;
  115. }
  116. void Runner::ustawY(int jakieY)
  117. {
  118. if (jakieY < terytorium.minY) y = terytorium.minY;
  119. else
  120. if (jakieY>terytorium.maxY) y = terytorium.maxY;
  121. else y = jakieY;
  122.  
  123. if (jakieY > 100) y = terytorium.minY +(terytorium.maxY - terytorium.minY)/2;
  124. }
  125.  
  126. void Runner::ustawPozycie(int jakieX, int jakieY)
  127. {
  128. ustawX(jakieX);
  129. ustawY(jakieY);
  130. }
  131.  
  132. void Runner::ustawZnak(char jakiZnak)
  133. {
  134. /*jakiZnak = getch();*/
  135. if ((33<=jakiZnak&&jakiZnak<=47) ||
  136. (58<=jakiZnak&&jakiZnak<=64) ||
  137. (91<=jakiZnak&&jakiZnak<=96) ||
  138. (123<=jakiZnak&&jakiZnak<=126))
  139. kodZnaku=jakiZnak;
  140. else kodZnaku = '*';
  141. }
  142. void Runner:: przesunX (int oIle)
  143. {
  144. zmazsie();
  145.  
  146. x+= oIle;
  147.  
  148. if (x<terytorium.minX) x=terytorium.maxX;
  149. else if (x>terytorium.maxX) x=terytorium.minX;
  150.  
  151. rysujsie();
  152. }
  153. void Runner:: przesunY(int oIle)
  154. {
  155. zmazsie();
  156.  
  157. y+= oIle;
  158.  
  159. if (y<terytorium.minY) y=terytorium.maxY;
  160. else if (y>terytorium.maxY) y=terytorium.minY;
  161.  
  162. rysujsie();
  163. }
  164. void Runner::przesun(int oIleX, int oIleY)
  165. {
  166. przesunX(oIleX);
  167. przesunY(oIleY);
  168. }
  169. void Runner::rysujsie(void)
  170. {
  171. gotoxy (x,y);
  172. putch(kodZnaku);
  173. }
  174. void Runner::zmazsie (void)
  175. {
  176. gotoxy (x,y);
  177. putch(' ');
  178. }
  179.  
  180. int main ( int argc, char** argv)
  181. {
  182. int klawisz;
  183.  
  184. srand(time(NULL));
  185.  
  186. Runner R;
  187. R.ustawPozycie(rand()%150,rand()%150);
  188. R.ustawZnak(rand()%126);
  189.  
  190.  
  191.  
  192. char odp;
  193. gotoxy(7,4);
  194. cout<<"Hej, jestem Runner"<<endl
  195. <<"Pokaz mi klawiszami num gdzie mam isc"<<endl
  196. <<"Chcesz postawic ogrodzenie? \t y/n";
  197. cin>>odp;
  198.  
  199. int minX, maxX,
  200. minY, maxY;
  201.  
  202. if ( odp=='y'||odp=='Y' )
  203. {
  204. czyscEkran();
  205. gotoxy (1,26); cout<<"min x: "; cin>> terytoriumR.minX;
  206. gotoxy (16,26); cout<<"max x: "; cin>> terytoriumR.maxX;
  207. gotoxy (31,26); cout<<"min y: "; cin>> terytoriumR.minY;
  208. gotoxy (46,26); cout<<"max y: "; cin>> terytoriumR.maxY;
  209.  
  210. R.ustawTerytorium(minX, maxX, minY, maxY);
  211.  
  212. }
  213.  
  214. czyscEkran();
  215.  
  216. R.rysujsie();
  217. gotoxy(1,26);
  218. cout<<"Jestem tutaj:"<<setw(2)<<R.podajX()<<","<<setw(2)<<R.podajY();
  219. gotoxy(60,26);
  220. cout<<"Rusz mnie!";
  221. do
  222. {
  223. klawisz = wczytajKlawisz();
  224. switch(klawisz){
  225. case kgora: R.przesunY(-1); break;
  226. case kdol: R.przesunY(1); break;
  227. case klewo: R.przesunX(-1); break;
  228. case kprawo: R.przesunX(1); break;
  229. case '7': R.przesun(-1,-1); break;
  230. case '9': R.przesun(1,-1); break;
  231. case '1': R.przesun(-1,1); break;
  232. case '3': R.przesun(1,1); break;
  233. case '8': R.przesun(0,-1); break;
  234. case '2': R.przesun(0,1); break;
  235. case '4': R.przesun(-1,0); break;
  236. case '6': R.przesun(1,0); break;
  237.  
  238. case '5': R.zmazsie();
  239. R.ustawPozycie(10,10);
  240. R.rysujsie();
  241. break;
  242.  
  243. case kenter: do
  244. R.ustawZnak(rand()%126);
  245. while (R.podajZnak()=='*');
  246. R.rysujsie();
  247. break;
  248.  
  249. }
  250. gotoxy(1,26);
  251. cout<<"Jestem tutaj:"<<setw(2)<<R.podajX()<<","<<setw(2)<<R.podajY();
  252. gotoxy(60,26);
  253. cout<<"Rusz mnie!";
  254. }while(klawisz != kesc); //KONIEC
  255. return 0;
  256. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement