Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- βͺ#βincludeβ¬ <iostream>
- #include <ctime>
- #include <conio.h>
- #include "windows.h"
- #include "iomanip"
- using namespace std;
- struct obszar{
- int minX, maxX, minY, maxY;
- };
- void gotoxy(int x, int y)
- {
- COORD c;
- c.X = x - 1;
- c.Y = y - 1;
- SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
- }
- enum klawisze
- {
- gora=72,
- dol=80,
- lewo=75,
- prawo=77,
- enter=13,
- esc=27,
- end=79,
- pgup=73,
- pgdn=81,
- home=71,
- insert=82,
- klDelete=83,
- rog=197,
- liniapozioma=196,
- liniapionowa=179,
- };
- int WczytajKlawisz (void)
- {
- int klawisz = getch();
- return klawisz;
- }
- void wyczyscEkran(void)
- {
- system("cls");
- }
- void napiszZnak(int x, int y, char c)
- {
- gotoxy( x , y );
- putch( c );
- }
- class Runner
- {
- private:
- int x ;
- int y ;
- char kodZnaku ;
- obszar terytorium;
- public:
- Runner (int jakieX = 40 , int jakieY = 12 , char jakiZnak = '*');
- void ustawX (int jakieX);
- void ustawY (int jakieY);
- void ustawPozycje (int jakieX, int jakieY);
- void ustawZnak (char jakiZnak);
- void ustawTerytorium (int, int, int, int);
- int podajX();
- int podajY();
- void podajTerytorium(int&,int&,int&,int&);
- void podajPozycje (int& jakieX, int& jakieY);
- char podajZnak();
- void przesunX (int oile);
- void przesunY (int oile);
- void przesun (int oileX, int oileY);
- void narysujSie ( void ) ;
- void zmazSie ( void ) ;
- void narysujOgrodzenie(void);
- };
- Runner::Runner(int jakieX,int jakieY,char jakiZnak){
- ustawTerytorium(1,80,1,24);
- ustawX(jakieX);
- ustawY(jakieY);
- ustawZnak(jakiZnak);
- }
- int Runner::podajX()
- {
- return x;
- }
- int Runner::podajY()
- {
- return y;
- }
- void Runner::podajPozycje ( int& jakieX, int& jakieY )
- {
- jakieX = x;
- jakieY = y;
- }
- char Runner::podajZnak()
- {
- return kodZnaku;
- }
- void Runner::ustawX ( int jakieX )
- {
- if (jakieX <= terytorium.minX) x = terytorium.minX+1;
- else if (jakieX >= terytorium.maxX) x = terytorium.maxX-1;
- 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+1;
- else if (jakieY >= terytorium.maxY) y = terytorium.maxY-1;
- else y = jakieY;
- if (jakieY>100) y = terytorium.minY + (terytorium.maxY - terytorium.minY )/2;
- }
- void Runner::ustawPozycje (int jakieX, int jakieY )
- {
- ustawX(jakieX);
- ustawX(jakieY);
- }
- void Runner::przesunX ( int oile )
- {
- zmazSie();
- x += oile;
- if (x <= terytorium.minX) x = terytorium.maxX-1;
- else if (x >= terytorium.maxX) x = terytorium.minX+1;
- narysujSie();
- }
- void Runner::przesunY ( int oile )
- {
- zmazSie();
- y += oile;
- if (y <= terytorium.minY) y = terytorium.maxY-1;
- else if (y >= terytorium.maxY) y = terytorium.minY+1;
- narysujSie();
- }
- void Runner::ustawZnak (char jakiZnak )
- {
- if((jakiZnak >= 33 && jakiZnak <= 47 ) ||(jakiZnak >= 58 && jakiZnak <= 64 )||
- (jakiZnak >= 91 && jakiZnak <= 96 )||(jakiZnak >= 123 && jakiZnak <= 126 ))
- kodZnaku=jakiZnak;
- else
- kodZnaku='*';
- }
- void Runner::przesun(int oileX, int oileY)
- {
- przesunX(oileX);
- przesunY(oileY);
- }
- void Runner::narysujSie ( void )
- {
- gotoxy ( x, y );
- putch ( kodZnaku );
- }
- void Runner::zmazSie ( void )
- {
- gotoxy ( x, y );
- putch ( 0 );
- }
- void Runner::ustawTerytorium(int jakieMinX, int jakieMaxX, int jakieMinY, 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>150) terytorium.maxX=150;
- else terytorium.maxX=jakieMaxX;
- if(jakieMinY<1) terytorium.minY=1;
- else if (jakieMinY>24)terytorium.minY=24;
- else terytorium.minY=jakieMinY;
- if(jakieMaxY<terytorium.minY+5) terytorium.maxY=terytorium.minY+5;
- else if(jakieMaxY>24) terytorium.maxY=24;
- else terytorium.maxY=jakieMaxY;
- }
- void Runner::podajTerytorium(int& jakieMinX, int& jakieMaxX, int& jakieMinY, int& jakieMaxY){
- jakieMinX=terytorium.minX;
- jakieMaxX=terytorium.maxX;
- jakieMinY=terytorium.minY;
- jakieMaxY=terytorium.maxY;
- }
- void Runner::narysujOgrodzenie(void){
- SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED );
- for(int i=terytorium.minX;i<terytorium.maxX;i++) {
- gotoxy(i,terytorium.minY);
- putchar(liniapozioma);
- }
- for(int i=terytorium.minX;i<terytorium.maxX;i++){
- gotoxy(i,terytorium.maxY);
- putchar(liniapozioma);
- }
- for(int i=terytorium.minY;i<terytorium.maxY;i++){
- gotoxy(terytorium.minX,i);
- putchar(liniapionowa);
- }
- for(int i=terytorium.minY;i<terytorium.maxY;i++){
- gotoxy(terytorium.maxX,i);
- putchar(liniapionowa);
- }
- gotoxy(terytorium.minX,terytorium.minY);
- putchar(rog);
- gotoxy(terytorium.maxX,terytorium.minY);
- putchar(rog);
- gotoxy(terytorium.maxX,terytorium.maxY);
- putchar(rog);
- gotoxy(terytorium.minX,terytorium.maxY);
- putchar(rog);
- }
- int main()
- {
- int klawisz ;
- srand(time(NULL));
- Runner R;
- cout<<"ustaw terytorium (x1,x2,y1,y2)";
- int x1,x2,y1,y2;
- cin>>x1>>x2>>y1>>y2;
- R.ustawTerytorium(x1,x2,y1,y2);
- R.ustawZnak(rand()%126);
- R.ustawPozycje(rand()%150, rand()%150);
- R.podajTerytorium(x1,x2,y1,y2);
- R.narysujOgrodzenie();
- gotoxy(50,25); cout<<"terytorium:<"<<x1<<"-"<<x2<<";"<<y1<<"-"<<y2<<">";
- R.narysujSie();
- do
- {
- klawisz = WczytajKlawisz();
- switch ( klawisz )
- {
- case gora : R.przesunY (-1); break ;
- case dol : R.przesunY(1); break ;
- case lewo : R.przesunX(-1); break ;
- case prawo : R.przesunX(1); break ;
- case enter : do
- R.ustawZnak(rand()%126);
- while (R.podajZnak()=='*');
- R.narysujSie();
- break;
- case '7' : R.przesun (-1,-1); break;
- case home : R.przesun (-1,-1); break;
- case '9' : R.przesun (1,-1); break;
- case pgup : R.przesun (1,-1); break;
- case '1' : R.przesun (-1,1); break;
- case end : R.przesun (-1,1); break;
- case '3' : R.przesun (1,1); break;
- case pgdn : R.przesun (1,1); break;
- }
- gotoxy(1,25);
- cout<<setw(2)<<R.podajX()<<":"<<setw(2)<<R.podajY();
- } while ( klawisz != esc ) ;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement