Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ctime"
- #include <conio.h>
- #include <iostream>
- #include "windows.h"
- #include <iomanip>
- using namespace std;
- void gotoxy(int x, int y)
- {
- COORD c;
- c.X = x -1;
- c.Y = y -1;
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
- }
- //k - klawisz
- enum kodyKlawiszy{kgora=72, kdol=80, klewo=75, kprawo=77, kenter=13, kesc=27};
- struct Obszar
- {
- int minX, minY, maxX, maxY;
- };
- int wczytajKlawisz(void)
- {
- int Klawisz = getch();
- return Klawisz;
- }
- void czyscEkran()
- {
- system("cls");
- }
- void napiszZnak (int x, int y, char c)
- {
- gotoxy (x,y);
- putch(c);
- }
- class Runner
- {
- private: //atrybuty //WSZYSTKIE PODAJ TO GETER I SETER
- int x;
- int y;
- char kodZnaku; //znak Runnera
- Obszar terytorium; //terytorium Runnera, po ktory moze sie porszac
- public:
- Runner(int jakieX=40, int jakieY=12, char jakiZnak='*');
- //metody dostepowe
- void ustawX (int jakieX); //ustawiaj¹ca
- void ustawY (int jakieY);
- void ustawPozycie(int jakieX, int jakieY);
- void ustawZnak (char jakiZnak);
- void ustawTerytorium (int jakieMinX, int jakieMinY, int jakieMaxX, int jakieMaxY);
- void podajTerytorium (int& minX, int& minY, int& maxX, int& maxY);
- int podajX() {return x;} //odczytuj¹ca
- int podajY() {return y;}
- void podajPozycie(int& jakieX, int& jakieY) {jakieX=x; jakieY=y;}
- char podajZnak() {return kodZnaku;}
- void przesunX(int oIle); //zmieniaj¹ce
- void przesunY(int oIle);
- void przesun (int oIleX, int oIleY);//jednoczesnie wszystko
- void rysujsie(void);
- void zmazsie(void);
- };
- Runner::Runner(int jakieX, int jakieY, char jakiZnak)
- {
- ustawTerytorium(1,80,1,24);
- ustawX(jakieX);
- ustawY(jakieY);
- ustawZnak(jakiZnak);
- }
- void Runner::ustawTerytorium(int jakieMinX, int jakieMinY, int jakieMaxX, int jakieMaxY)
- {
- if (jakieMinX<1) terytorium.minX=1;
- else if (jakieMinX>75) terytorium.minX=75;
- else terytorium.minX=jakieMinX;
- if (jakieMaxX<terytorium.minX+5) terytorium.maxX=terytorium.minX+5;
- else if (jakieMaxX>80) terytorium.maxX=80;
- else terytorium.maxX=jakieMaxX;
- if (jakieMinY<1) terytorium.minY=1;
- else if (jakieMinY>20) terytorium.minY=20;
- else terytorium.minY=jakieMinY;
- if (jakieMaxY<terytorium.minY+4) terytorium.maxY=terytorium.minY+4;
- else if (jakieMaxY>24) terytorium.maxY=24;
- else terytorium.maxY=jakieMaxY;
- }
- void Runner::podajTerytorium(int& jakieMinX, int& jakieMinY, int& jakieMaxX, int& jakieMaxY)
- {
- jakieMaxX=terytorium.maxX;
- jakieMaxY=terytorium.maxY;
- jakieMinX=terytorium.minX;
- jakieMinY=terytorium.minY;
- }
- void Runner::ustawX(int jakieX)
- {
- if (jakieX < terytorium.minX) x = terytorium.minX;
- else
- if (jakieX>terytorium.maxX) x = terytorium.maxX;
- else x = jakieX;
- if (jakieX > 100) x = terytorium.minX +(terytorium.maxX - terytorium.minX)/2;
- }
- void Runner::ustawY(int jakieY)
- {
- if (jakieY < terytorium.minY) y = terytorium.minY;
- else
- if (jakieY>terytorium.maxY) y = terytorium.maxY;
- else y = jakieY;
- if (jakieY > 100) y = terytorium.minY +(terytorium.maxY - terytorium.minY)/2;
- }
- void Runner::ustawPozycie(int jakieX, int jakieY)
- {
- ustawX(jakieX);
- ustawY(jakieY);
- }
- void Runner::ustawZnak(char jakiZnak)
- {
- /*jakiZnak = getch();*/
- if ((33<=jakiZnak&&jakiZnak<=47) ||
- (58<=jakiZnak&&jakiZnak<=64) ||
- (91<=jakiZnak&&jakiZnak<=96) ||
- (123<=jakiZnak&&jakiZnak<=126))
- kodZnaku=jakiZnak;
- else kodZnaku = '*';
- }
- void Runner:: przesunX (int oIle)
- {
- zmazsie();
- x+= oIle;
- if (x<terytorium.minX) x=terytorium.maxX;
- else if (x>terytorium.maxX) x=terytorium.minX;
- rysujsie();
- }
- void Runner:: przesunY(int oIle)
- {
- zmazsie();
- y+= oIle;
- if (y<terytorium.minY) y=terytorium.maxY;
- else if (y>terytorium.maxY) y=terytorium.minY;
- rysujsie();
- }
- void Runner::przesun(int oIleX, int oIleY)
- {
- przesunX(oIleX);
- przesunY(oIleY);
- }
- void Runner::rysujsie(void)
- {
- gotoxy (x,y);
- putch(kodZnaku);
- }
- void Runner::zmazsie (void)
- {
- gotoxy (x,y);
- putch(' ');
- }
- int main ( int argc, char** argv)
- {
- int klawisz;
- srand(time(NULL));
- Runner R;
- R.ustawPozycie(rand()%150,rand()%150);
- R.ustawZnak(rand()%126);
- char odp;
- gotoxy(7,4);
- cout<<"Hej, jestem Runner"<<endl
- <<"Pokaz mi klawiszami num gdzie mam isc"<<endl
- <<"Chcesz postawic ogrodzenie? \t y/n";
- cin>>odp;
- int minX, maxX,
- minY, maxY;
- if ( odp=='y'||odp=='Y' )
- {
- czyscEkran();
- gotoxy (1,26); cout<<"min x: "; cin>> terytoriumR.minX;
- gotoxy (16,26); cout<<"max x: "; cin>> terytoriumR.maxX;
- gotoxy (31,26); cout<<"min y: "; cin>> terytoriumR.minY;
- gotoxy (46,26); cout<<"max y: "; cin>> terytoriumR.maxY;
- R.ustawTerytorium(minX, maxX, minY, maxY);
- }
- czyscEkran();
- R.rysujsie();
- gotoxy(1,26);
- cout<<"Jestem tutaj:"<<setw(2)<<R.podajX()<<","<<setw(2)<<R.podajY();
- gotoxy(60,26);
- cout<<"Rusz mnie!";
- do
- {
- klawisz = wczytajKlawisz();
- switch(klawisz){
- case kgora: R.przesunY(-1); break;
- case kdol: R.przesunY(1); break;
- case klewo: R.przesunX(-1); break;
- case kprawo: R.przesunX(1); break;
- case '7': R.przesun(-1,-1); break;
- case '9': R.przesun(1,-1); break;
- case '1': R.przesun(-1,1); break;
- case '3': R.przesun(1,1); break;
- case '8': R.przesun(0,-1); break;
- case '2': R.przesun(0,1); break;
- case '4': R.przesun(-1,0); break;
- case '6': R.przesun(1,0); break;
- case '5': R.zmazsie();
- R.ustawPozycie(10,10);
- R.rysujsie();
- break;
- case kenter: do
- R.ustawZnak(rand()%126);
- while (R.podajZnak()=='*');
- R.rysujsie();
- break;
- }
- gotoxy(1,26);
- cout<<"Jestem tutaj:"<<setw(2)<<R.podajX()<<","<<setw(2)<<R.podajY();
- gotoxy(60,26);
- cout<<"Rusz mnie!";
- }while(klawisz != kesc); //KONIEC
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement