Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <vector>
- using std::vector;
- using namespace std;
- class Hetman
- {
- public:
- int x;
- int y;
- int wielkosc;
- bool aktywny;
- vector<vector<bool> > atakowanePola;
- //bool* atakowanePola;
- //bool** atakowanePola2;
- public:
- Hetman()
- {
- x=0;
- y=0;
- aktywny=false;
- // bool atakowanePola2 = new bool*[3];
- // for (int i = 0; i < 3; ++i )
- // {
- // atakowanePola2[i] = new bool[3];
- // }
- }
- Hetman(int wielkosc, int x, int y)
- {
- this->x=x;
- this->y=y;
- this->wielkosc=wielkosc;
- aktywny=true;
- atakowanePola.resize(wielkosc);
- for(int i=0; i<wielkosc; i++)
- atakowanePola[i].resize(wielkosc);
- for(int i=0; i<wielkosc; i++)
- {
- for(int j=0; j<wielkosc; j++)
- {
- if(i==y)
- atakowanePola[i][j]=true;
- if(j==x)
- atakowanePola[i][j]=true;
- if(abs(y-i)==abs(x-j))
- atakowanePola[i][j]=true;
- }
- }
- //pokazAtak();
- // atakowanePola = new bool[wielkosc*wielkosc];
- // for(int i=0; i<wielkosc*wielkosc; i++) atakowanePola[i]=false;
- //
- // for(int i=0; i<wielkosc*wielkosc; i++)
- // {
- // if(x%wielkosc==i%wielkosc) atakowanePola[i]=true;
- //
- // }
- }
- void ustaw(int wielkosc, int x, int y)
- {
- this->x=x;
- this->y=y;
- this->wielkosc=wielkosc;
- aktywny=true;
- atakowanePola.resize(wielkosc);
- for(int i=0; i<wielkosc; i++)
- atakowanePola[i].resize(wielkosc);
- czysc();
- for(int i=0; i<wielkosc; i++)
- {
- for(int j=0; j<wielkosc; j++)
- {
- if(i==y)
- atakowanePola[i][j]=true;
- if(j==x)
- atakowanePola[i][j]=true;
- if(abs(y-i)==abs(x-j))
- atakowanePola[i][j]=true;
- }
- }
- }
- void zdejmij()
- {
- x=0;
- y=0;
- aktywny=false;
- czysc();
- }
- void pokazAtak()
- {
- cout << "Atakowane pola:\n";
- for(int i=0; i<wielkosc; i++)
- {
- for(int j=0; j<wielkosc; j++)
- {
- cout << atakowanePola[i][j];
- if(j!=wielkosc-1) cout << ":";
- }
- cout << endl;
- }
- }
- void czysc()
- {
- for(int i=0; i<wielkosc; i++)
- {
- for(int j=0; j<wielkosc; j++)
- {
- atakowanePola[i][j]=false;
- }
- }
- }
- void wPrawo()
- {
- ustaw(wielkosc, x+1, y);
- }
- };
- class Plansza
- {
- public:
- int rozmiar;
- Hetman *tab;
- int aktualnyHetman;
- vector<vector<bool> > zagrozonePola;
- public:
- Plansza(int wielkosc)
- {
- rozmiar=wielkosc;
- tab = new Hetman[rozmiar];
- zagrozonePola.resize(rozmiar);
- for(int i=0; i<rozmiar; i++)
- zagrozonePola[i].resize(rozmiar);
- }
- ~Plansza()
- {
- delete []tab;
- }
- void aktualizuj(int wyklucz=-1)
- {
- czysc();
- for(int h=0; h<rozmiar; h++)
- if(tab[h].aktywny && h!=wyklucz)
- for(int i=0; i<rozmiar; i++)
- for(int j=0; j<rozmiar; j++)
- if(tab[h].atakowanePola[i][j]) zagrozonePola[i][j]=true;
- }
- void rozwiaz()
- {
- //bool zrobione=false;
- //aktualnyHetman=0;
- //int aktualnyRzad=0;
- //tab[0].ustaw(rozmiar, 0 ,0);
- //aktualizuj();
- //aktualnyHetman++;
- //cout << tab[0].aktywny;
- for(int i=0; i<rozmiar;)
- {
- //cout << i << endl;
- if(i<0){cout << "Glupota\n"; return;}
- if(tab[0].x>=rozmiar)
- {
- cout << "Nie da sie\n";
- return;
- }
- if(tab[i].x>=rozmiar)
- {
- tab[i].zdejmij();
- aktualizuj();
- tab[i-1].wPrawo();
- aktualizuj();
- i--;
- continue;
- }
- if(tab[i].aktywny)
- {
- aktualizuj(i);
- if(zagrozonePola[tab[i].y][tab[i].x])
- {
- if(znajdzWolne(tab[i].x, i)!=-1)
- {
- tab[i].ustaw(rozmiar, znajdzWolne(tab[i].x, i), i);
- aktualizuj();
- }
- else
- {
- tab[i].zdejmij();
- aktualizuj();
- tab[i-1].wPrawo();
- aktualizuj();
- i--;
- continue;
- }
- }
- }
- aktualizuj();
- if(!tab[i].aktywny)
- {
- if(znajdzWolne(tab[i].x, i)!=-1)
- {
- tab[i].ustaw(rozmiar, znajdzWolne(0, i), i);
- aktualizuj();
- }
- else
- {
- tab[i-1].wPrawo();
- aktualizuj();
- i--;
- continue;
- }
- }
- i++;
- }
- pokazWynik();
- }
- void pokazZagrozone()
- {
- cout << "Zagrozone pola:\n";
- for(int i=0; i<rozmiar; i++)
- {
- for(int j=0; j<rozmiar; j++)
- {
- cout << zagrozonePola[i][j];
- if(j!=rozmiar-1) cout << ":";
- }
- cout << endl;
- }
- }
- void czysc()
- {
- for(int i=0; i<rozmiar; i++)
- {
- for(int j=0; j<rozmiar; j++)
- {
- zagrozonePola[i][j]=false;
- }
- }
- }
- int znajdzWolne(int od, int rzad)
- {
- for(int i=od; i<rozmiar; i++)
- {
- if(!zagrozonePola[rzad][i])
- return i;
- }
- return -1;
- }
- void pokazWynik()
- {
- cout << "Dla szachownicy " << rozmiar << "X" << rozmiar << " rozwiazaniem jest uklad:\n";
- for (int i = 0; i < rozmiar; i++)
- {
- cout << "Hetman " << i + 1 << " soti na polu: " << tab[i].x << "," << tab[i].y << endl;
- }
- cout << endl << "Graficznie wyglada to tak:\n";
- narysujWynik();
- cout << endl;
- }
- void narysujWynik()
- {
- for (int i = 0; i < rozmiar; i++)
- {
- for (int j = 0; j < rozmiar; j++)
- {
- bool jest = false;
- for (int h = 0; h < rozmiar; h++)
- {
- if (j == tab[h].x && i == tab[h].y)
- jest = true;
- }
- cout << jest;
- if (j < rozmiar - 1)
- cout << ":";
- }
- cout << endl;
- }
- }
- };
- int main()
- {
- //cout << a.atakowanePola[];
- // vector<vector<int> > tablica2D;
- //tablica2D.resize(3);
- //for(int i=0; i<3; i++)
- // tablica2D[i].resize(2);
- //tablica2D[0][1]=3;
- //for(int i=0; i<3; i++)
- //{
- // for(int j=0; j<2; j++)
- // {
- // cout << tablica2D[i][j];
- // }
- // cout << endl;
- //}
- //cout << "Koniec testu 1\n\n";
- Hetman a(5, 0, 1), b(5, 2, 0);
- a.pokazAtak();
- b.pokazAtak();
- Plansza szachownica(5);
- szachownica.pokazZagrozone();
- szachownica.tab[0] = a;
- szachownica.tab[1] = b;
- szachownica.aktualizuj(0);
- szachownica.pokazZagrozone();
- cout << "Koniec testu 2\n\n";
- Plansza szachownica2(5);
- szachownica2.rozwiaz();
- //szachownica2.narysujWynik();
- //cout << szachownica2.tab[1].x;
- //if(!szachownica.zagrozonePola[szachownica.tab[0].y][szachownica.tab[0].x]) cout << "HEJ!";
- //cout << szachownica.znajdzWolne(2, 2);
- //cout << szachownica.zagrozonePola[0][1];
- // bool x=true, y=true, z=false;
- //
- // cout << (z||z) << endl;
- //cout << a.atakowanePola[1][0];
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement