Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <string>
- #include <stdlib.h>
- #include <cstdlib>
- #include <windows.h>
- #include <cstdlib>
- #include <ctime>
- using namespace std;
- static const int n = 20;
- static const int m = 40;
- int macierz[n][m];
- unsigned char znak;
- int start = 1;
- HANDLE hOut;
- //struktura przechowywująca współrzędne
- struct Position
- {
- int x;
- int y;
- };
- /************************************************************/
- //klasa która odpowiada za rysowanie mapy i za funkcję z nią związane
- // to co robi przeciwnik
- class komputer
- {
- int poziom_dziala;
- int poziomUlepszen;
- int szansaZolniza;
- int szansaTrafienia;
- bool czyZolniez;
- bool czyStrzal;
- public:
- komputer();
- void losowanie();
- bool strzal();
- void ulepszenie_dziala();
- int getpoziom_ulepszen();
- int wyslanie_zolnierza();
- void zawrocZolnieza();
- bool czyJestZolniez();
- bool czyJestStrzal();
- void nowyStrzal();
- };
- class mapa
- {
- int xmax,ymax;
- public:
- void czyszczenie_mapy();
- void rysowanie_mapy(komputer a);
- void zerowanie_macierzy();
- void budowanie_scian();
- mapa(int a,int b);
- };
- //metody komputera
- int komputer::getpoziom_ulepszen()
- {
- return poziomUlepszen;
- }
- komputer::komputer()
- {
- this->poziom_dziala = 0;
- this->poziomUlepszen = 0;
- this->szansaZolniza = 0;
- this->szansaTrafienia = 0;
- this->czyZolniez = false;
- this->czyStrzal = false;
- }
- //sprawdzanie czy odjac zycie
- bool komputer::czyJestStrzal()
- {
- return czyStrzal;
- }
- //po strzale zmiana stanu dziala aby moglo znowu ataowac
- void komputer::nowyStrzal()
- {
- czyStrzal = false;
- }
- //sprawdzenie czy zolnierz zostal wysłany
- bool komputer::czyJestZolniez()
- {
- return czyZolniez;
- }
- //odsyłanie z powrotem żołnierza do bazy
- void komputer::zawrocZolnieza()
- {
- czyZolniez = false;
- }
- // tutaj komputer decyduje co zrobi po naszym ruchu
- void komputer::losowanie()
- {
- cout<<"komputer: "<<endl;
- int a=(( rand() % 4 ) + 0 );
- if(a == 0)
- {
- cout<<"wysłanie zolnierza "<<endl;
- cout<<"UWAGA: komputer ulepsza dzialo"<<endl;
- czyZolniez = true;
- ulepszenie_dziala();
- }
- else if(a == 1)
- {
- cout<<"rozbudowa zamku"<<endl;
- poziomUlepszen++;
- }
- else if(a > 1)
- {
- cout<<"strzal z dziala"<<endl;
- czyStrzal = strzal();
- }
- }
- //losuje czy jest strzał, jezeli jest to s=true
- bool komputer::strzal()
- {
- bool s = false;
- for (int i = 0; i < poziom_dziala; i++)
- {
- int a = (( rand() % 10 ) + 0 );
- if (a == 8)
- {
- s = true;
- }
- }
- return s;
- }
- void komputer::ulepszenie_dziala()
- {
- poziom_dziala++;
- }
- int komputer::wyslanie_zolnierza()
- {
- int a =(( rand() % 2 ) + 0 );
- return a;
- }
- void mapa::czyszczenie_mapy()
- {
- HANDLE hStdOut;
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- DWORD count;
- DWORD cellCount;
- COORD homeCoords = { 0, 0 };
- hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
- if (hStdOut == INVALID_HANDLE_VALUE) return;
- /* Get the number of cells in the current buffer */
- if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
- cellCount = csbi.dwSize.X *csbi.dwSize.Y;
- /* Fill the entire buffer with spaces */
- if (!FillConsoleOutputCharacter(
- hStdOut,
- (TCHAR) ' ',
- cellCount,
- homeCoords,
- &count
- )) return;
- /* Fill the entire buffer with the current colors and attributes */
- if (!FillConsoleOutputAttribute(
- hStdOut,
- csbi.wAttributes,
- cellCount,
- homeCoords,
- &count
- )) return;
- /* Move the cursor home */
- SetConsoleCursorPosition( hStdOut, homeCoords );
- }
- void mapa::rysowanie_mapy(komputer a)
- {
- hOut = GetStdHandle( STD_OUTPUT_HANDLE );
- for(int i = 0; i<n; i++)
- {
- for (int j = 0; j<m; j++)
- {
- if(macierz[i][j] == 7)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "#";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(macierz[i][j] == 2)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "G";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if (macierz[i][j] == 3)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "Q";// Tu bedzie dzialo
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- // Fortyfikacje
- else if (macierz[i][j] == 4)
- {
- if(a.getpoziom_ulepszen() == 0)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY );
- cout << "x";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 1)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "x";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 2)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "x";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 3)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY );
- cout << "X";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 4)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "X";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 5)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "X";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 6)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "!";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 7)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "!";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 8)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY );
- cout << "!";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 9)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "!";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 10)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "X";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 11)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "E";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 12)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "E";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 13)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY );
- cout << "E";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 14)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "S";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 15)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "S";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 16)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "S";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 17)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "=";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 18)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY );
- cout << "=";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 19)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "=";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else if(a.getpoziom_ulepszen() == 20)
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY );
- cout << "R";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- else
- {
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY );
- cout << "U";
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED );
- }
- }
- else
- {
- cout << " ";
- }
- }
- cout << endl;
- }
- }
- void mapa::zerowanie_macierzy()
- {
- // zerowanie macierzy
- for(int i = 0; i<xmax; i++)
- {
- for (int j = 0; j<ymax; j++)
- {
- macierz[i][j] = 0;
- }
- }
- }
- void mapa::budowanie_scian()
- {
- // Budowanie scian
- for(int i = 0; i<n; i++)
- {
- for (int j = 0; j<m; j++)
- {
- macierz[i][0] = 7;
- macierz[i][m-1] = 7;
- macierz[0][j] = 7;
- macierz[n-1][j] = 7;
- }
- }
- }
- mapa::mapa(int a,int b)
- {
- this->xmax=a;
- this->ymax=b;
- }
- /************************************************************/
- class Object
- {
- public:
- Position pozycja;
- int getX(); // wyciaganie parametrow
- int getY();
- void setX(int x); // ustawianie parametrow
- void setY(int y);
- };
- int Object::getX()
- {
- return pozycja.x;
- }
- int Object::getY()
- {
- return pozycja.y;
- }
- void Object::setX(int x)
- {
- pozycja.x = x;
- }
- void Object::setY(int y)
- {
- pozycja.y = y;
- }
- /************************************************************/
- class Pokemen : public Object
- {
- int zycie;
- bool czyPrzegrana;
- public:
- bool przegrana();
- Pokemen(int x, int y, int z);
- void rysuj(Pokemen p);
- void ruch();
- int getZycie();
- void zmniejszZycie();
- bool czyJestPrzegrana();
- };
- bool Pokemen::czyJestPrzegrana()
- {
- return czyPrzegrana;
- }
- bool Pokemen::przegrana()
- {
- start = 0;
- czyPrzegrana = true;
- return czyPrzegrana;
- }
- int Pokemen::getZycie()
- {
- return zycie;
- }
- void Pokemen::zmniejszZycie()
- {
- zycie--;
- }
- Pokemen::Pokemen(int x, int y, int z)
- {
- setX(x);
- setY(y);
- this->zycie = z;
- this->czyPrzegrana = false;
- }
- void Pokemen::ruch()
- {
- znak = getch();
- switch( znak )
- {
- case 'w': //strzałka w górę
- if(macierz[pozycja.x-1][pozycja.y] <1 || macierz[pozycja.x-1][pozycja.y] == 10 )
- {
- macierz[pozycja.x][pozycja.y] = 0;
- pozycja.x--;
- macierz[pozycja.x][pozycja.y] = 2;
- Beep(400,100);
- }
- break;
- case 's': //strzałka w dół
- if(macierz[pozycja.x+1][pozycja.y] < 1 || macierz[pozycja.x+1][pozycja.y] == 10)
- {
- macierz[pozycja.x][pozycja.y] = 0;
- pozycja.x++;
- macierz[pozycja.x][pozycja.y] = 2;
- Beep(500,100);
- }
- break;
- case 'a': //strzałka w lewo
- if(macierz[pozycja.x][pozycja.y-1] < 1 || macierz[pozycja.x][pozycja.y-1] == 10)
- {
- macierz[pozycja.x][pozycja.y] = 0;
- pozycja.y--;
- macierz[pozycja.x][pozycja.y] = 2;
- Beep(440,100);
- }
- break;
- case 'd': //strzałka w prawo
- if(macierz[pozycja.x][pozycja.y+1] < 1 || macierz[pozycja.x][pozycja.y+1] == 10)
- {
- macierz[pozycja.x][pozycja.y] = 0;
- pozycja.y++;
- macierz[pozycja.x][pozycja.y] = 2;
- Beep(600,100);
- }
- break;
- case 27: //ESC
- start = 0;
- break;
- }
- }
- void Pokemen::rysuj(Pokemen p)
- {
- macierz[p.getX()][p.getY()] = 2;
- }
- class Zamek : public Object
- {
- int licznik;
- bool czyZwyciestwo;
- friend class Pokemen;
- public:
- Zamek(int x, int y );
- void Zwyciestwo(Pokemen a, komputer b);
- bool czyJestWin();
- int sprawdz_poziom_ulepszen(komputer a);
- };
- int Zamek::sprawdz_poziom_ulepszen(komputer a)
- {
- return a.getpoziom_ulepszen();
- }
- Zamek::Zamek(int x, int y)
- {
- setX(x);
- setY(y);
- licznik = 0;
- czyZwyciestwo = false;
- macierz[getX()][getY()] = 10;
- }
- void Zamek::Zwyciestwo(Pokemen a, komputer b)
- {
- if (a.getX() == getX() && a.getY() == getY())
- {
- licznik++;
- if (licznik == sprawdz_poziom_ulepszen(b))
- {
- licznik = 0;
- start = 0;
- czyZwyciestwo = true;
- }
- }
- }
- bool Zamek::czyJestWin()
- {
- return czyZwyciestwo;
- }
- /************************************************************/
- int main()
- {
- srand( time( NULL ) );
- HANDLE hOut;
- hOut = GetStdHandle( STD_OUTPUT_HANDLE );
- int x = 3;
- int y = 3;
- int z ;
- int licznik=0;
- cout<<"wbierz ilosc punktow zycia"<<endl;
- cin>>z;
- komputer obrona;
- mapa narnia(n,m);
- narnia.zerowanie_macierzy();
- narnia.budowanie_scian();
- Zamek brama((n/2)-1,m/2+1);
- Pokemen gracz(x,y,z);
- gracz.rysuj(gracz);
- // Pozycja dla bazy
- macierz[(n-1)/2][(m-1)/2] = 3;
- // Wspolrzedne dla fortyfikacji
- macierz[n/2][(m-1)/2] = 4;
- macierz[n/2][m/2] = 4;
- macierz[n/2][(m/2)-2] = 4;
- macierz[(n/2)-1][(m/2)-2] = 4;
- macierz[(n/2)-1][m/2] = 4;
- macierz[(n/2)-2][(m-1)/2] = 4;
- macierz[(n/2)-2][m/2] = 4;
- macierz[(n/2)-2][(m/2)-2] = 4;
- while(start)
- {
- cout << "<<<<<<<<<<< ATAK POKEMENOW >>>>>>>>>>>>" << endl;
- cout << "Wcisnij ESC aby wyjsc!";
- cout << endl;
- obrona.losowanie();
- cout<<"liczba ruchow: " << licznik << endl;
- narnia.rysowanie_mapy(obrona);
- cout << "TWOJE PUNKTY ZYCIA: " << gracz.getZycie() << endl;
- cout <<"poziom ulepszenia bazy komputera :"<<obrona.getpoziom_ulepszen();
- if(obrona.czyJestZolniez() == true)
- {
- obrona.zawrocZolnieza();
- if(obrona.wyslanie_zolnierza() > 0)
- {
- cout << obrona.wyslanie_zolnierza() << endl;
- cout << "Zolniez nas nie zatrzymal" << endl;
- gracz.ruch();
- }
- else if(obrona.wyslanie_zolnierza() == 0)
- {
- cout <<endl<< "Blada ruchu przez Zolnieza" << endl;
- Beep(350,1000);
- }
- }
- else
- {
- gracz.ruch();
- }
- if (obrona.czyJestStrzal() == true )
- {
- obrona.nowyStrzal(); // ustawianie starzlu na falsz
- gracz.zmniejszZycie();
- }
- brama.Zwyciestwo(gracz, obrona);
- narnia.czyszczenie_mapy();
- licznik++;
- if (gracz.getZycie() == 0)
- {
- gracz.przegrana();
- }
- }
- if (gracz.czyJestPrzegrana())
- {
- cout << "Przegrałes" << endl;
- }
- if (brama.czyJestWin())
- {
- cout << "ZWYCIESTWO! zdobyłes dzialo i zolnierza" << endl;
- }
- cout << endl;
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement