Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <algorithm>
- #include<vector>
- #include<cstring>
- #include <string>
- #include<iomanip>
- #include<random>
- using namespace std;
- struct karta
- {
- string nazwa;
- int wartosc;
- char kolor;
- int barwa;
- };
- class Pole
- {
- public:
- Pole();
- karta trefl;
- karta pik;
- karta karo;
- karta kier;
- karta cell_jeden;
- karta cell_dwa;
- karta cell_trzy;
- karta cell_cztery;
- vector <karta> rzad_pierwszy;
- vector <karta> rzad_drugi;
- vector <karta> rzad_trzeci;
- vector <karta> rzad_czwarty;
- vector <karta> rzad_piaty;
- vector <karta> rzad_szosty;
- vector <karta> rzad_siodmy;
- vector <karta> rzad_osmy;
- vector<vector <karta>> rzedy;
- vector<karta> generuj_talie()
- {
- vector <karta> talia;
- for (int i = 0; i < 52; i++)
- {
- karta * nowa = new karta;
- if (i % 13 == 1)
- {
- nowa->nazwa = "2";
- nowa->wartosc = 2;
- }
- else if (i % 13 == 2)
- {
- nowa->nazwa = "3";
- nowa->wartosc = 3;
- }
- else if (i % 13 == 3)
- {
- nowa->nazwa = "4";
- nowa->wartosc = 4;
- }
- else if (i % 13 == 4)
- {
- nowa->nazwa = "5";
- nowa->wartosc = 5;
- }
- else if (i % 13 == 5)
- {
- nowa->nazwa = "6";
- nowa->wartosc = 6;
- }
- else if (i % 13 == 6)
- {
- nowa->nazwa = "7";
- nowa->wartosc = 7;
- }
- else if (i % 13 == 7)
- {
- nowa->nazwa = "8";
- nowa->wartosc = 8;
- }
- else if (i % 13 == 8)
- {
- nowa->nazwa = "9";
- nowa->wartosc = 9;
- }
- else if (i % 13 == 9)
- {
- nowa->nazwa = "10";
- nowa->wartosc = 10;
- }
- else if (i % 13 == 10)
- {
- nowa->nazwa = "Walet";
- nowa->wartosc = 11;
- }
- else if (i % 13 == 11)
- {
- nowa->nazwa = "Dama";
- nowa->wartosc = 12;
- }
- else if (i % 13 == 12)
- {
- nowa->nazwa = "Krol";
- nowa->wartosc = 13;
- }
- else
- {
- nowa->nazwa = "As";
- nowa->wartosc = 1;
- }
- if (i < 13)
- {
- nowa->kolor = 3;
- nowa->barwa = 0;
- }
- else if (i < 26)
- {
- nowa->kolor = 4;
- nowa->barwa = 0;
- }
- else if (i < 39)
- {
- nowa->kolor = 5;
- nowa->barwa = 1;
- }
- else
- {
- nowa->kolor = 6;
- nowa->barwa = 1;
- }
- talia.push_back(*nowa);
- }
- return talia;
- };
- vector <karta>talia = generuj_talie();
- void wypisz_talie(vector <karta> talia)
- {
- vector<karta>::iterator iter;
- for (iter = talia.begin(); iter != talia.end(); iter++)
- {
- cout << iter->nazwa << iter->kolor << endl;
- }
- };
- vector<karta> rozdaj_karty_siedem()
- {
- vector <karta> stosik;
- vector<karta> ::iterator end;
- vector<karta> ::iterator poprzedni;
- for (int i = 0; i < 7; i++)
- {
- end = this->talia.end();
- poprzedni = end--;
- stosik.push_back(*end);
- this->talia.pop_back();
- end = poprzedni;
- }
- return stosik;
- }
- vector<karta> rozdaj_karty_szesc()
- {
- vector <karta> stosik;
- vector<karta> ::iterator end;
- vector<karta> ::iterator poprzedni;
- for (int i = 0; i < 6; i++)
- {
- end = this->talia.end();
- poprzedni = end--;
- stosik.push_back(*end);
- this->talia.pop_back();
- end = poprzedni;
- }
- return stosik;
- }
- void wypisz_rzedy(vector <karta> rzad)
- {
- vector<karta>::iterator iter;
- for (iter = rzad.begin(); iter != rzad.end(); iter++)
- {
- cout << setw(2) << " " << setw(5) << iter->nazwa << iter->kolor;
- }
- cout << endl;
- };
- void wypisz_pole(karta card)
- {
- cout << "+-----------+" << endl;
- cout << "|" << setw(11) << card.kolor + card.nazwa << "|" << endl;
- cout << "+-----------+" << endl;
- }
- void wypisz_pole(Pole plansza)
- {
- cout << setw(4) << "I";
- plansza.wypisz_rzedy(plansza.rzad_pierwszy);
- cout << setw(4) << "II";
- plansza.wypisz_rzedy(plansza.rzad_drugi);
- cout << setw(4) << "III";
- plansza.wypisz_rzedy(plansza.rzad_trzeci);
- cout << setw(4) << "IV";
- plansza.wypisz_rzedy(plansza.rzad_czwarty);
- cout << setw(4) << "V";
- plansza.wypisz_rzedy(plansza.rzad_piaty);
- cout << setw(4) << "VI";
- plansza.wypisz_rzedy(plansza.rzad_szosty);
- cout << setw(4) << "VII";
- plansza.wypisz_rzedy(plansza.rzad_siodmy);
- cout << setw(4) << "VIII";
- plansza.wypisz_rzedy(plansza.rzad_osmy);
- cout << "Cell" << endl;
- plansza.wypisz_pole(plansza.cell_cztery);
- plansza.wypisz_pole(plansza.cell_trzy);
- plansza.wypisz_pole(plansza.cell_dwa);
- plansza.wypisz_pole(plansza.cell_jeden);
- cout << "Wykladane" << endl;
- plansza.wypisz_pole(plansza.pik);
- plansza.wypisz_pole(plansza.karo);
- plansza.wypisz_pole(plansza.trefl);
- plansza.wypisz_pole(plansza.kier);
- }
- void rozdaj()
- {
- this->rzad_pierwszy = this->rozdaj_karty_siedem();
- this->rzad_drugi = this->rozdaj_karty_siedem();
- this->rzad_trzeci = this->rozdaj_karty_siedem();
- this->rzad_czwarty = this->rozdaj_karty_siedem();
- this->rzad_piaty = this->rozdaj_karty_szesc();
- this->rzad_szosty = this->rozdaj_karty_szesc();
- this->rzad_siodmy = this->rozdaj_karty_szesc();
- this->rzad_osmy = this->rozdaj_karty_szesc();
- }
- void przeloz_rzad_rzad(int a,int b)
- {
- if (czy_moge_rzad_rzad(a, b) == true)
- {
- if (b == 1)
- {
- this->rzad_pierwszy.push_back(wez_karte(a));
- }
- else if (b == 2)
- {
- this->rzad_drugi.push_back(wez_karte(a));
- }
- else if (b == 3)
- {
- this->rzad_trzeci.push_back(wez_karte(a));
- }
- else if (b == 4)
- {
- this->rzad_czwarty.push_back(wez_karte(a));
- }
- else if (b == 5)
- {
- this->rzad_piaty.push_back(wez_karte(a));
- }
- else if (b == 6)
- {
- this->rzad_szosty.push_back(wez_karte(a));
- }
- else if (b == 7)
- {
- this->rzad_siodmy.push_back(wez_karte(a));
- }
- else if (b == 8)
- {
- this->rzad_osmy.push_back(wez_karte(a));
- }
- else{}
- usun_rzad(a);
- }
- else{ cout << "nieprawidlowy ruch"<<endl; }
- }
- void przeloz_rzad_cela(int a, int b)
- {
- if (czy_moge_rzad_cela(b) == true)
- {
- if (b == 1)
- this->cell_jeden = wez_karte(a);
- else if (b == 2)
- this->cell_dwa = wez_karte(a);
- else if (b == 3)
- this->cell_trzy = wez_karte(a);
- else if (b == 4)
- this->cell_cztery = wez_karte(a);
- else{}
- usun_rzad(a);
- }
- else
- cout << "nieprawidlowy ruch"<<endl;
- }
- void przeloz_rzad_stos(int a, int b)
- {
- if (czy_moge_rzad_stos(a, b) == true)
- {
- if (b == 1)
- this->pik = wez_karte(a);
- else if (b == 2)
- this->karo = wez_karte(a);
- else if (b==3)
- this->trefl = wez_karte(a);
- else if (b==4)
- this->kier = wez_karte(a);
- else{};
- usun_rzad(a);
- }
- else
- cout << "nieprawidlowy ruch"<<endl;
- }
- void przeloz_cela_rzad(int a, int b)
- {
- if (czy_moge_cela_rzad(a, b) == true)
- {
- if (b == 1)
- {
- this->rzad_pierwszy.push_back(wez_cela(a));
- }
- else if (b == 2)
- {
- this->rzad_drugi.push_back(wez_cela(a));
- }
- else if (b == 3)
- {
- this->rzad_trzeci.push_back(wez_cela(a));
- }
- else if (b == 4)
- {
- this->rzad_czwarty.push_back(wez_cela(a));
- }
- else if (b == 5)
- {
- this->rzad_piaty.push_back(wez_cela(a));
- }
- else if (b == 6)
- {
- this->rzad_szosty.push_back(wez_cela(a));
- }
- else if (b == 7)
- {
- this->rzad_siodmy.push_back(wez_cela(a));
- }
- else if (b == 8)
- {
- this->rzad_osmy.push_back(wez_cela(a));
- }
- else{}
- usun_cela(a);
- }
- else
- cout << "nieprawidlowy ruch"<<endl;
- }
- void przeloz_cela_stos(int a, int b)
- {
- if (czy_moge_cela_stos(a, b) == true)
- {
- if (b == 1)
- this->pik = wez_cela(a);
- else if (b == 2)
- this->karo = wez_cela(a);
- else if (b == 3)
- this->trefl = wez_cela(a);
- else if (b == 4)
- this->kier = wez_cela(a);
- else{};
- usun_cela(a);
- }
- else
- cout << "nieprawidlowy ruch"<<endl;
- }
- void usun_rzad(int a)
- {
- if (a == 1)
- {
- this->rzad_pierwszy.pop_back();
- }
- else if (a == 2)
- {
- this->rzad_drugi.pop_back();
- }
- else if (a == 3)
- {
- this->rzad_trzeci.pop_back();
- }
- else if (a == 4)
- {
- this->rzad_czwarty.pop_back();
- }
- else if (a == 5)
- {
- this->rzad_piaty.pop_back();
- }
- else if (a == 6)
- {
- this->rzad_szosty.pop_back();
- }
- else if (a == 7)
- {
- this->rzad_siodmy.pop_back();
- }
- else if (a == 8)
- {
- this->rzad_osmy.pop_back();
- }
- else{}
- }
- void usun_cela(int a)
- {
- if (a == 1)
- this->cell_jeden.wartosc = 0;
- else if (a == 2)
- this->cell_dwa.wartosc=0;
- else if (a == 3)
- this->cell_trzy.wartosc=0;
- else if (a == 4)
- this->cell_cztery.wartosc=0;
- else{}
- }
- karta wez_karte(int a)
- {
- vector<karta> zrodlo;
- if (a == 1)
- {
- zrodlo = this->rzad_pierwszy;
- }
- else if (a == 2)
- {
- zrodlo = this->rzad_drugi;
- }
- else if (a == 3)
- {
- zrodlo = this->rzad_trzeci;
- }
- else if (a == 4)
- {
- zrodlo = this->rzad_czwarty;
- }
- else if (a == 5)
- {
- zrodlo = this->rzad_piaty;
- }
- else if (a == 6)
- {
- zrodlo = this->rzad_szosty;
- }
- else if (a == 7)
- {
- zrodlo = this->rzad_siodmy;
- }
- else if (a == 8)
- {
- zrodlo = this->rzad_osmy;
- }
- else{}
- karta card = zrodlo.back();
- return card;
- }
- karta wez_stos(int b)
- {
- karta cel;
- if (b == 1)
- cel = this->pik;
- else if (b == 2)
- cel = this->karo;
- else if (b == 3)
- cel = this->trefl;
- else if (b == 4)
- cel = this->karo;
- else;
- return cel;
- }
- karta wez_cela(int a)
- {
- karta cel;
- if (a == 1)
- cel = this->cell_jeden;
- else if (a == 2)
- cel = this->cell_dwa;
- else if (a == 3)
- cel = this->cell_trzy;
- else if (a == 4)
- cel = this->cell_cztery;
- else{}
- return cel;
- }
- bool czy_moge_rzad_rzad(int a, int b)
- {
- karta zrodlo = wez_karte(a);
- karta cel = wez_karte(b);
- if ((zrodlo.barwa != cel.barwa) && (zrodlo.wartosc == (cel.wartosc - 1)))
- {
- cout << "ok";
- return true;
- }
- else
- {
- cout << "nope";
- return false;
- }
- }
- bool czy_moge_rzad_cela(int a)
- {
- karta cel = wez_cela(a);
- if (cel.wartosc == 0)
- return true;
- else
- return false;
- }
- bool czy_moge_rzad_stos(int a, int b)
- {
- karta zrodlo;
- karta cel;
- zrodlo = wez_karte(a);
- cel = wez_stos(b);
- if ((zrodlo.kolor == cel.kolor) && (zrodlo.wartosc == (cel.wartosc +1)))
- return true;
- else return false;
- }
- bool czy_moge_cela_stos(int a, int b)
- {
- karta cela=wez_cela(a);
- karta stos=wez_stos(b);
- if (cela.kolor == stos.kolor && cela.wartosc == (stos.wartosc - 1))
- return true;
- else return false;
- }
- bool czy_moge_cela_rzad(int a, int b)
- {
- karta cela = wez_cela(a);
- karta rzad = wez_karte(b);
- if ((cela.barwa != rzad.barwa) && (cela.wartosc == (rzad.wartosc - 1)))
- return true;
- else return false;
- }
- };
- Pole::Pole()
- {
- trefl.kolor = 5;
- trefl.wartosc = 0;
- trefl.nazwa = " ";
- pik.kolor = 6;
- pik.wartosc = 0;
- pik.nazwa = " ";
- karo.kolor = 4;
- karo.wartosc = 0;
- karo.nazwa = " ";
- kier.kolor = 3;
- kier.wartosc = 0;
- kier.nazwa = " ";
- cell_jeden.kolor = ' ';
- cell_jeden.wartosc = 0;
- cell_jeden.nazwa = " ";
- cell_dwa.kolor = ' ';
- cell_dwa.wartosc = 0;
- cell_dwa.nazwa = " ";
- cell_trzy.kolor = ' ';
- cell_trzy.wartosc = 0;
- cell_trzy.nazwa = " ";
- cell_cztery.kolor = ' ';
- cell_cztery.wartosc = 0;
- cell_cztery.nazwa = " ";
- talia = generuj_talie();
- }
- void pisz_menu()
- {
- cout << "<1. Przeloz rzad->rzad>" << endl;
- cout << "<2. Przeloz rzad->cela>" << endl;
- cout << "<3. Przeloz rzad->stos>" << endl;
- cout << "<4. Przeloz cela->rzad>" << endl;
- cout << "<5. Przeloz cela->stos>" << endl;
- cout << "<0. Koniec programu>" << endl;
- }
- void menu_main(Pole plansza)
- {
- int wybor;
- do {
- pisz_menu();
- cin >> wybor;
- switch (wybor)
- {
- case 1:
- {
- int a, b;
- cout << "z ktorego rzedu" << endl;
- cin >> a;
- cout << "do ktorego rzedu" << endl;
- cin >> b;
- plansza.przeloz_rzad_rzad(a, b);
- plansza.wypisz_pole(plansza);
- }
- break;
- case 2:
- {
- int a, b;
- cout << "z ktorego rzedu" << endl;
- cin >> a;
- cout << "do ktorej celi" << endl;
- cin >> b;
- plansza.przeloz_rzad_cela(a, b);
- plansza.wypisz_pole(plansza);
- }
- break;
- case 3:
- {
- int a, b;
- cout << "z ktorego rzedu" << endl;
- cin >> a;
- cout << "na ktory stos" << endl;
- cin >> b;
- plansza.przeloz_rzad_stos(a, b);
- plansza.wypisz_pole(plansza);
- }
- break;
- case 4:
- {
- int a, b;
- cout << "z ktorej celi" << endl;
- cin >> a;
- cout << "do ktorego rzedu" << endl;
- cin >> b;
- plansza.przeloz_cela_rzad(a, b);
- plansza.wypisz_pole(plansza);
- }
- break;
- case 5:
- {
- int a, b;
- cout << "z ktorej celi" << endl;
- cin >> a;
- cout << "na ktory stos" << endl;
- cin >> b;
- plansza.przeloz_cela_stos(a, b);
- plansza.wypisz_pole(plansza);
- }
- break;
- }
- }
- while (wybor != 0);
- }
- int main()
- {
- cout << "Witaj w grze pasjans FreeCell" << endl;
- Pole plansza;
- random_shuffle(plansza.talia.begin(), plansza.talia.end());
- plansza.rozdaj();
- plansza.wypisz_pole(plansza);
- menu_main(plansza);
- // char a = 3 kier
- // char b = 4 karo
- // char c = 5 trefl
- // char d = 6 pik
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement