Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <conio.h>
- #include <cmath>
- #include <ctime>
- #include <windows.h>
- using namespace std;
- // Globalne
- int mapa[1500][1500];
- // Legenda XD
- // 0 - Neutralne Pole ; 1 - Góry Podstawowe , 2- Góry Dorobione , 3-Góry Skosne ; 4 - Krzaki xD; 5 - Wyrzyny Podstawa , 6 - Wyrzyny Skosne , 7 - Wyrzyny dorobione;
- //
- int rx,ry; // r = ruch
- // Wlaczenie funkcji
- void uzupelnij_mape();
- void rysuj();
- // Klasy
- class gory
- {
- public:
- int gx;
- int gy;
- int ilosc_gor;
- void stworz_gory();
- void powieksz_gory();
- void wyrzyny_gor();
- };
- class wyrzyny
- {
- public:
- int wx;
- int wy;
- int ilosc_wyrzyn;
- void stworz_wyrzyny();
- void powieksz_wyrzyny();
- };
- //---------------------
- //-------------------
- // Main
- int main()
- {
- int kx,ky;
- // Rozdzielczosc
- SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),{200,80});
- // Zmienne
- gory gora;
- wyrzyny wyrzyna;
- rx=ry=5;
- //------
- srand(time(NULL));
- uzupelnij_mape();
- gora.ilosc_gor=300;
- gora.stworz_gory();
- wyrzyna.ilosc_wyrzyn=200;
- wyrzyna.stworz_wyrzyny();
- rysuj();
- // ---
- while(true)
- {
- // Ruch po mapie
- if(kbhit())
- {
- switch(getch())
- {
- case 'a':
- rx-=15;
- break;
- case 'd':
- rx+=15;
- break;
- case 'w':
- ry-=15;
- break;
- case 's':
- ry+=15;
- break;
- }
- rysuj();
- }
- }
- }
- //----------------------------
- //------------------------------
- // Funkcje Klas
- // Gory !!!
- void gory::stworz_gory()
- {
- double procent;
- // Kod funcji gor
- for(int i=0;i<ilosc_gor;i++)
- {
- // Zmienne
- int wielkosc_gory;
- wielkosc_gory=rand()%150+50;
- bool wolne_pole[8];
- int wylosowane_pole;
- // Losowanie 1 góry
- do
- {
- gx=rand()%1350+30;
- gy=rand()%1350+30;
- }
- while(mapa[gy][gx]!=0);
- mapa[gy][gx]=1;
- //tworzenie reszty gor -- do poprayw tabowanie narazie nie chce mi sie XD
- for(int j=0;j<wielkosc_gory;j++)
- {
- // Sprawdzanie ktore pola są wolne
- //
- // 1|2|3 // 1=[y+1][x-1] 2=[y+1][x] 3=[y+1][x+1]
- // 4|x|5 // 4=[y][x-1] 5=[y][x+1]
- // 6|7|8 // 6=[y-1][x-1] 7=[y-1][x] 8=[y-1][x+1]
- if(mapa[gy+1][gx-1]==0)
- wolne_pole[0]=true;
- else
- wolne_pole[0]=false;
- if(mapa[gy+1][gx]==0)
- wolne_pole[1]=true;
- else
- wolne_pole[1]=false;
- if(mapa[gy+1][gx+1]==0)
- wolne_pole[2]=true;
- else
- wolne_pole[2]=false;
- if(mapa[gy][gx-1]==0)
- wolne_pole[3]=true;
- else
- wolne_pole[3]=false;
- if(mapa[gy][gx+1]==0)
- wolne_pole[4]=true;
- else
- wolne_pole[4]=false;
- if(mapa[gy-1][gx-1]==0)
- wolne_pole[5]=true;
- else
- wolne_pole[5]=false;
- if(mapa[gy-1][gx]==0)
- wolne_pole[6]=true;
- else
- wolne_pole[6]=false;
- if(mapa[gy-1][gx+1]==0)
- wolne_pole[7]=true;
- else
- wolne_pole[7]=false;
- // Sprawdzanie czy jest jakies wolne pole oraz zliczanie ich jak nie to tworzenie nowych gor
- int zlicz_ilosc_wolnych_pol=0;
- for(int k=0;k<8;k++)
- {
- if(wolne_pole[k]==true)
- zlicz_ilosc_wolnych_pol++;
- }
- if(zlicz_ilosc_wolnych_pol==0)
- {
- gx=rand()%1350+30;
- gy=rand()%1350+30;
- while(mapa[gy][gx]!=0)
- {
- gx=rand()%1350+30;
- gy=rand()%1350+30;
- }
- continue;
- }
- // Losowanie pola gory
- wylosowane_pole=rand()%8;
- while(wolne_pole[wylosowane_pole]==false)
- wylosowane_pole=rand()%8;
- switch (wylosowane_pole)
- {
- case 0:
- gy++;
- gx--;
- break;
- case 1:
- gy++;
- break;
- case 2:
- gy++;
- gx++;
- break;
- case 3:
- gx--;
- break;
- case 4:
- gx++;
- break;
- case 5:
- gy--;
- gx--;
- break;
- case 6:
- gy--;
- break;
- case 7:
- gy--;
- gx++;
- break;
- }
- mapa[gy][gx]=1;
- }
- powieksz_gory();
- system("cls");
- procent = (i*100)/ilosc_gor;
- cout<<"Tworzenie gor:" << procent <<"%" <<endl;
- cout<<"Mozliwy jest wyciek"<<endl;
- }
- wyrzyny_gor();
- }
- //----
- void gory::powieksz_gory()
- {
- int x,y;
- int groboscgor;
- int groboscskosna;
- int zlicz=0;
- bool koniec_cofania=true;
- for(y=0;y<1500;y++)
- for(x=0;x<1500;x++)
- {
- if(mapa[y][x]==1)
- {
- if(zlicz<6&&koniec_cofania==true)
- zlicz++;
- else
- {
- zlicz--;
- koniec_cofania=false;
- if(zlicz==0)
- koniec_cofania=true;
- }
- groboscgor=zlicz+1;
- for(int i=1;i<groboscgor;i++)
- {
- if(mapa[y][x+i]==0)
- mapa[y][x+i]=2;
- if(mapa[y+i][x]==0)
- mapa[y+i][x]=2;
- if(mapa[y][x-i]==0)
- mapa[y][x-i]=2;
- if(mapa[y-i][x]==0)
- mapa[y-i][x]=2;
- if(mapa[y+i][x+i]==0)
- mapa[y+i][x+i]=3;
- if(mapa[y+i][x-i]==0)
- mapa[y+i][x-i]=3;
- if(mapa[y-i][x-i]==0)
- mapa[y-i][x-i]=3;
- if(mapa[y-i][x+i]==0)
- mapa[y-i][x+i]=3;
- }
- }
- if(mapa[y][x]==3)
- {
- groboscskosna=rand()%3+1;
- for(int i=1;i<groboscskosna;i++)
- {
- if(mapa[y][x+i]==0)
- mapa[y][x+i]=2;
- if(mapa[y+i][x]==0)
- mapa[y+i][x]=2;
- if(mapa[y][x-i]==0)
- mapa[y][x-i]=2;
- if(mapa[y-i][x]==0)
- mapa[y-i][x]=2;
- }
- }
- }
- }
- //-------
- void gory::wyrzyny_gor()
- {
- int x,y;
- int groboscwyzyn;
- int groboscskosna;
- int zlicz=0;
- bool koniec_cofania=true;
- for(y=0;y<1500;y++)
- for(x=0;x<1500;x++)
- {
- if(mapa[y][x]==1||mapa[y][x]==2||mapa[y][x]==3)
- {
- if(zlicz<6&&koniec_cofania==true)
- zlicz++;
- else
- {
- zlicz--;
- koniec_cofania=false;
- if(zlicz==0)
- koniec_cofania=true;
- }
- groboscwyzyn=zlicz+1;
- for(int i=1;i<groboscwyzyn;i++)
- {
- if(mapa[y][x+i]==0)
- mapa[y][x+i]=5;
- if(mapa[y+i][x]==5)
- mapa[y+i][x]=5;
- if(mapa[y][x-i]==0)
- mapa[y][x-i]=5;
- if(mapa[y-i][x]==0)
- mapa[y-i][x]=5;
- if(mapa[y+i][x+i]==0)
- mapa[y+i][x+i]=6;
- if(mapa[y+i][x-i]==0)
- mapa[y+i][x-i]=6;
- if(mapa[y-i][x-i]==0)
- mapa[y-i][x-i]=6;
- if(mapa[y-i][x+i]==0)
- mapa[y-i][x+i]=6;
- }
- }
- if(mapa[y][x]==6)
- {
- groboscskosna=rand()%3+1;
- for(int i=1;i<groboscskosna;i++)
- {
- if(mapa[y][x+i]==0)
- mapa[y][x+i]=5;
- if(mapa[y+i][x]==0)
- mapa[y+i][x]=5;
- if(mapa[y][x-i]==0)
- mapa[y][x-i]=5;
- if(mapa[y-i][x]==0)
- mapa[y-i][x]=5;
- }
- }
- }
- }
- // Wyrzyny !!!
- void wyrzyny::stworz_wyrzyny()
- {
- double procent;
- // Kod funcji wyrzyn
- for(int i=0;i<ilosc_wyrzyn;i++)
- {
- // Zmienne
- int wielkosc_wyrzyny;
- wielkosc_wyrzyny=rand()%150+50;
- bool wolne_pole[8];
- int wylosowane_pole;
- // Losowanie 1 góry
- do
- {
- wx=rand()%1350+30;
- wy=rand()%1350+30;
- }
- while(mapa[wy][wx]!=0);
- mapa[wy][wx]=5;
- //tworzenie reszty wyrzyn -- do poprayw tabowanie narazie nie chce mi sie XD
- for(int j=0;j<wielkosc_wyrzyny;j++)
- {
- // Sprawdzanie ktore pola są wolne
- //
- // 1|2|3 // 1=[y+1][x-1] 2=[y+1][x] 3=[y+1][x+1]
- // 4|x|5 // 4=[y][x-1] 5=[y][x+1]
- // 6|7|8 // 6=[y-1][x-1] 7=[y-1][x] 8=[y-1][x+1]
- if(mapa[wy+1][wx-1]==0)
- wolne_pole[0]=true;
- else
- wolne_pole[0]=false;
- if(mapa[wy+1][wx]==0)
- wolne_pole[1]=true;
- else
- wolne_pole[1]=false;
- if(mapa[wy+1][wx+1]==0)
- wolne_pole[2]=true;
- else
- wolne_pole[2]=false;
- if(mapa[wy][wx-1]==0)
- wolne_pole[3]=true;
- else
- wolne_pole[3]=false;
- if(mapa[wy][wx+1]==0)
- wolne_pole[4]=true;
- else
- wolne_pole[4]=false;
- if(mapa[wy-1][wx-1]==0)
- wolne_pole[5]=true;
- else
- wolne_pole[5]=false;
- if(mapa[wy-1][wx]==0)
- wolne_pole[6]=true;
- else
- wolne_pole[6]=false;
- if(mapa[wy-1][wx+1]==0)
- wolne_pole[7]=true;
- else
- wolne_pole[7]=false;
- // Sprawdzanie czy jest jakies wolne pole oraz zliczanie ich jak nie to tworzenie nowych gor
- int zlicz_ilosc_wolnych_pol=0;
- for(int k=0;k<8;k++)
- {
- if(wolne_pole[k]==true)
- zlicz_ilosc_wolnych_pol++;
- }
- if(zlicz_ilosc_wolnych_pol==0)
- {
- wx=rand()%1350+30;
- wy=rand()%1350+30;
- while(mapa[wy][wx]!=0)
- {
- wx=rand()%1350+30;
- wy=rand()%1350+30;
- }
- continue;
- }
- // Losowanie pola gory
- wylosowane_pole=rand()%8;
- while(wolne_pole[wylosowane_pole]==false)
- wylosowane_pole=rand()%8;
- switch (wylosowane_pole)
- {
- case 0:
- wy++;
- wx--;
- break;
- case 1:
- wy++;
- break;
- case 2:
- wy++;
- wx++;
- break;
- case 3:
- wx--;
- break;
- case 4:
- wx++;
- break;
- case 5:
- wy--;
- wx--;
- break;
- case 6:
- wy--;
- break;
- case 7:
- wy--;
- wx++;
- break;
- }
- mapa[wy][wx]=5;
- }
- powieksz_wyrzyny();
- system("cls");
- procent = (i*100)/ilosc_wyrzyn;
- cout<<"Tworzenie wyrzyn:" << procent <<"%" <<endl;
- cout<<"Mozliwy jest wyciek"<<endl;
- }
- }
- //-----
- void wyrzyny::powieksz_wyrzyny()
- {
- int x,y;
- int groboscwyrzyn;
- int groboscskosna;
- int zlicz=0;
- bool koniec_cofania=true;
- for(y=0;y<1500;y++)
- for(x=0;x<1500;x++)
- {
- if(mapa[y][x]==5)
- {
- if(zlicz<6&&koniec_cofania==true)
- zlicz++;
- else
- {
- zlicz--;
- koniec_cofania=false;
- if(zlicz==0)
- koniec_cofania=true;
- }
- groboscwyrzyn=zlicz+1;
- for(int i=1;i<groboscwyrzyn;i++)
- {
- if(mapa[y][x+i]==0)
- mapa[y][x+i]=7;
- if(mapa[y+i][x]==0)
- mapa[y+i][x]=7;
- if(mapa[y][x-i]==0)
- mapa[y][x-i]=7;
- if(mapa[y-i][x]==0)
- mapa[y-i][x]=7;
- if(mapa[y+i][x+i]==0)
- mapa[y+i][x+i]=6;
- if(mapa[y+i][x-i]==0)
- mapa[y+i][x-i]=6;
- if(mapa[y-i][x-i]==0)
- mapa[y-i][x-i]=6;
- if(mapa[y-i][x+i]==0)
- mapa[y-i][x+i]=6;
- }
- }
- if(mapa[y][x]==6)
- {
- groboscskosna=rand()%3+1;
- for(int i=1;i<groboscskosna;i++)
- {
- if(mapa[y][x+i]==0)
- mapa[y][x+i]=7;
- if(mapa[y+i][x]==0)
- mapa[y+i][x]=7;
- if(mapa[y][x-i]==0)
- mapa[y][x-i]=7;
- if(mapa[y-i][x]==0)
- mapa[y-i][x]=7;
- }
- }
- }
- }
- //-----
- // Funkcje
- void uzupelnij_mape()
- {
- int x,y;
- for(y=0;y<1500;y++)
- for(x=0;x<1500;x++)
- mapa[y][x]=0;
- }
- void rysuj()
- {
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),{0,0});
- int x,y;
- for(y=ry;y<80+ry;y++)
- for(x=rx;x<200+rx;x++)
- {
- if(mapa[y][x]==0)
- {
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0A);
- cout<<(char)219;
- }
- else if(mapa[y][x]==1||mapa[y][x]==2||mapa[y][x]==3)
- {
- if(mapa[y][x]==1)
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x04);
- else
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0C);
- cout<<(char)30;
- }
- else if(mapa[y][x]==4)
- {
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0D);
- cout<<(char)225;
- }
- else if(mapa[y][x]==5||mapa[y][x]==6||mapa[y][x]==7)
- {
- if(mapa[y][x]==5)
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x06);
- else
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0E);
- cout<<(char)127;
- }
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0F);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement