Advertisement
Garusek

Runner 23.05.2016

May 23rd, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.74 KB | None | 0 0
  1. β€ͺ#β€Žinclude‬ <iostream>
  2. #include <ctime>
  3. #include <conio.h>
  4. #include "windows.h"
  5. #include "iomanip"
  6. using namespace std;
  7. struct obszar{
  8. int minX, maxX, minY, maxY;
  9. };
  10. void gotoxy(int x, int y)
  11. {
  12. COORD c;
  13. c.X = x - 1;
  14. c.Y = y - 1;
  15. SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
  16. }
  17. enum klawisze
  18. {
  19. gora=72,
  20. dol=80,
  21. lewo=75,
  22. prawo=77,
  23. enter=13,
  24. esc=27,
  25. end=79,
  26. pgup=73,
  27. pgdn=81,
  28. home=71,
  29. insert=82,
  30. klDelete=83,
  31. rog=197,
  32. liniapozioma=196,
  33. liniapionowa=179,
  34. };
  35. int WczytajKlawisz (void)
  36. {
  37. int klawisz = getch();
  38. return klawisz;
  39. }
  40. void wyczyscEkran(void)
  41. {
  42. system("cls");
  43. }
  44. void napiszZnak(int x, int y, char c)
  45. {
  46. gotoxy( x , y );
  47. putch( c );
  48. }
  49. class Runner
  50. {
  51. private:
  52. int x ;
  53. int y ;
  54. char kodZnaku ;
  55. obszar terytorium;
  56. public:
  57. Runner (int jakieX = 40 , int jakieY = 12 , char jakiZnak = '*');
  58. void ustawX (int jakieX);
  59. void ustawY (int jakieY);
  60. void ustawPozycje (int jakieX, int jakieY);
  61. void ustawZnak (char jakiZnak);
  62. void ustawTerytorium (int, int, int, int);
  63. int podajX();
  64. int podajY();
  65. void podajTerytorium(int&,int&,int&,int&);
  66. void podajPozycje (int& jakieX, int& jakieY);
  67. char podajZnak();
  68. void przesunX (int oile);
  69. void przesunY (int oile);
  70. void przesun (int oileX, int oileY);
  71. void narysujSie ( void ) ;
  72. void zmazSie ( void ) ;
  73. void narysujOgrodzenie(void);
  74. };
  75. Runner::Runner(int jakieX,int jakieY,char jakiZnak){
  76. ustawTerytorium(1,80,1,24);
  77. ustawX(jakieX);
  78. ustawY(jakieY);
  79. ustawZnak(jakiZnak);
  80. }
  81. int Runner::podajX()
  82. {
  83. return x;
  84. }
  85. int Runner::podajY()
  86. {
  87. return y;
  88. }
  89. void Runner::podajPozycje ( int& jakieX, int& jakieY )
  90. {
  91. jakieX = x;
  92. jakieY = y;
  93. }
  94. char Runner::podajZnak()
  95. {
  96. return kodZnaku;
  97. }
  98. void Runner::ustawX ( int jakieX )
  99. {
  100. if (jakieX <= terytorium.minX) x = terytorium.minX+1;
  101. else if (jakieX >= terytorium.maxX) x = terytorium.maxX-1;
  102. else x = jakieX;
  103. if (jakieX>100) x = terytorium.minX + (terytorium.maxX - terytorium.minX )/2;
  104. }
  105. void Runner::ustawY ( int jakieY )
  106. {
  107. if (jakieY <= terytorium.minY) y = terytorium.minY+1;
  108. else if (jakieY >= terytorium.maxY) y = terytorium.maxY-1;
  109. else y = jakieY;
  110. if (jakieY>100) y = terytorium.minY + (terytorium.maxY - terytorium.minY )/2;
  111. }
  112. void Runner::ustawPozycje (int jakieX, int jakieY )
  113. {
  114. ustawX(jakieX);
  115. ustawX(jakieY);
  116. }
  117. void Runner::przesunX ( int oile )
  118. {
  119. zmazSie();
  120. x += oile;
  121. if (x <= terytorium.minX) x = terytorium.maxX-1;
  122. else if (x >= terytorium.maxX) x = terytorium.minX+1;
  123. narysujSie();
  124. }
  125. void Runner::przesunY ( int oile )
  126. {
  127. zmazSie();
  128. y += oile;
  129. if (y <= terytorium.minY) y = terytorium.maxY-1;
  130. else if (y >= terytorium.maxY) y = terytorium.minY+1;
  131. narysujSie();
  132. }
  133. void Runner::ustawZnak (char jakiZnak )
  134. {
  135. if((jakiZnak >= 33 && jakiZnak <= 47 ) ||(jakiZnak >= 58 && jakiZnak <= 64 )||
  136. (jakiZnak >= 91 && jakiZnak <= 96 )||(jakiZnak >= 123 && jakiZnak <= 126 ))
  137. kodZnaku=jakiZnak;
  138. else
  139. kodZnaku='*';
  140. }
  141. void Runner::przesun(int oileX, int oileY)
  142. {
  143. przesunX(oileX);
  144. przesunY(oileY);
  145. }
  146. void Runner::narysujSie ( void )
  147. {
  148. gotoxy ( x, y );
  149. putch ( kodZnaku );
  150. }
  151. void Runner::zmazSie ( void )
  152. {
  153. gotoxy ( x, y );
  154. putch ( 0 );
  155. }
  156. void Runner::ustawTerytorium(int jakieMinX, int jakieMaxX, int jakieMinY, int jakieMaxY){
  157. if (jakieMinX<1) terytorium.minX=1;
  158. else if(jakieMinX>75) terytorium.minX=75;
  159. else terytorium.minX=jakieMinX;
  160. if (jakieMaxX<terytorium.minX+5) terytorium.maxX=terytorium.minX+5;
  161. else if(jakieMaxX>150) terytorium.maxX=150;
  162. else terytorium.maxX=jakieMaxX;
  163. if(jakieMinY<1) terytorium.minY=1;
  164. else if (jakieMinY>24)terytorium.minY=24;
  165. else terytorium.minY=jakieMinY;
  166. if(jakieMaxY<terytorium.minY+5) terytorium.maxY=terytorium.minY+5;
  167. else if(jakieMaxY>24) terytorium.maxY=24;
  168. else terytorium.maxY=jakieMaxY;
  169. }
  170. void Runner::podajTerytorium(int& jakieMinX, int& jakieMaxX, int& jakieMinY, int& jakieMaxY){
  171. jakieMinX=terytorium.minX;
  172. jakieMaxX=terytorium.maxX;
  173. jakieMinY=terytorium.minY;
  174. jakieMaxY=terytorium.maxY;
  175. }
  176. void Runner::narysujOgrodzenie(void){
  177. SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED );
  178. for(int i=terytorium.minX;i<terytorium.maxX;i++) {
  179. gotoxy(i,terytorium.minY);
  180. putchar(liniapozioma);
  181. }
  182. for(int i=terytorium.minX;i<terytorium.maxX;i++){
  183. gotoxy(i,terytorium.maxY);
  184. putchar(liniapozioma);
  185. }
  186. for(int i=terytorium.minY;i<terytorium.maxY;i++){
  187. gotoxy(terytorium.minX,i);
  188. putchar(liniapionowa);
  189. }
  190. for(int i=terytorium.minY;i<terytorium.maxY;i++){
  191. gotoxy(terytorium.maxX,i);
  192. putchar(liniapionowa);
  193. }
  194. gotoxy(terytorium.minX,terytorium.minY);
  195. putchar(rog);
  196. gotoxy(terytorium.maxX,terytorium.minY);
  197. putchar(rog);
  198. gotoxy(terytorium.maxX,terytorium.maxY);
  199. putchar(rog);
  200. gotoxy(terytorium.minX,terytorium.maxY);
  201. putchar(rog);
  202. }
  203. int main()
  204. {
  205. int klawisz ;
  206. srand(time(NULL));
  207. Runner R;
  208. cout<<"ustaw terytorium (x1,x2,y1,y2)";
  209. int x1,x2,y1,y2;
  210. cin>>x1>>x2>>y1>>y2;
  211. R.ustawTerytorium(x1,x2,y1,y2);
  212. R.ustawZnak(rand()%126);
  213. R.ustawPozycje(rand()%150, rand()%150);
  214. R.podajTerytorium(x1,x2,y1,y2);
  215. R.narysujOgrodzenie();
  216.  
  217. gotoxy(50,25); cout<<"terytorium:<"<<x1<<"-"<<x2<<";"<<y1<<"-"<<y2<<">";
  218.  
  219. R.narysujSie();
  220. do
  221. {
  222. klawisz = WczytajKlawisz();
  223. switch ( klawisz )
  224. {
  225. case gora : R.przesunY (-1); break ;
  226. case dol : R.przesunY(1); break ;
  227. case lewo : R.przesunX(-1); break ;
  228. case prawo : R.przesunX(1); break ;
  229. case enter : do
  230. R.ustawZnak(rand()%126);
  231. while (R.podajZnak()=='*');
  232. R.narysujSie();
  233. break;
  234. case '7' : R.przesun (-1,-1); break;
  235. case home : R.przesun (-1,-1); break;
  236. case '9' : R.przesun (1,-1); break;
  237. case pgup : R.przesun (1,-1); break;
  238. case '1' : R.przesun (-1,1); break;
  239. case end : R.przesun (-1,1); break;
  240. case '3' : R.przesun (1,1); break;
  241. case pgdn : R.przesun (1,1); break;
  242. }
  243. gotoxy(1,25);
  244. cout<<setw(2)<<R.podajX()<<":"<<setw(2)<<R.podajY();
  245.  
  246. } while ( klawisz != esc ) ;
  247. return 0;
  248. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement