Garusek

10.05.2016

May 10th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 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. }
Add Comment
Please, Sign In to add comment