Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<queue>
- #include<time.h>
- #include <stdlib.h>
- using namespace std;
- struct karta{
- string nazwa;
- int wartosc;
- };
- struct gracz{
- string imie;
- queue <karta> reka;
- };
- void stworz_talie(vector <karta> &talia){
- string nazwa;
- karta tmp;
- for(int i=0;i<13;i++){
- switch (i){
- case 0:
- nazwa = "2";
- tmp.wartosc = 2;
- break;
- case 1:
- nazwa = "3";
- tmp.wartosc = 3;
- break;
- case 2:
- nazwa = "4";
- tmp.wartosc = 4;
- break;
- case 3:
- nazwa = "5";
- tmp.wartosc = 5;
- break;
- case 4:
- nazwa = "6";
- tmp.wartosc = 6;
- break;
- case 5:
- nazwa = "7";
- tmp.wartosc = 7;
- break;
- case 6:
- nazwa = "8";
- tmp.wartosc = 8;
- break;
- case 7:
- nazwa = "9";
- tmp.wartosc = 9;
- break;
- case 8:
- nazwa = "10";
- tmp.wartosc = 10;
- break;
- case 9:
- nazwa = "Walet";
- tmp.wartosc = 11;
- break;
- case 10:
- nazwa = "Dama";
- tmp.wartosc = 12;
- break;
- case 11:
- nazwa = "krol";
- tmp.wartosc = 13;
- break;
- case 12:
- nazwa = "As";
- tmp.wartosc = 14;
- break;
- }
- for(int j=0;j<4;j++){
- switch (j){
- case 0:
- tmp.nazwa = nazwa + " Serce";
- break;
- case 1:
- tmp.nazwa = nazwa + " Pik";
- break;
- case 2:
- tmp.nazwa = nazwa + " Karo";
- break;
- case 3:
- tmp.nazwa = nazwa + " Trefl";
- break;
- }
- talia.push_back(tmp);
- }
- }
- tmp = {"Joker", 15};
- talia.push_back(tmp);
- talia.push_back(tmp);
- }
- void dodaj_graczy(vector <gracz> &gracze, int *liczba_graczy){
- *liczba_graczy = 0;
- gracz tmp;
- cout<<"podaj liczbe graczy: ";
- do{
- cin>>*liczba_graczy;
- }while(*liczba_graczy<2);
- for(int i=0;i<*liczba_graczy;i++){
- cout<<"podaj nazwe gracza "<<i+1<<": ";
- cin>>tmp.imie;
- cout<<"\n";
- gracze.push_back(tmp);
- }
- }
- void rozdaj_karty(vector <gracz> &gracze, int *liczba_graczy){
- int los;
- vector <karta> talia;
- stworz_talie(talia);
- while(talia.size() > 0){
- los = rand()%(talia.size());
- gracze[talia.size()%gracze.size()].reka.push(talia[los]);
- talia.erase(talia.begin()+los);
- }
- }
- int max_na_stole(vector <karta> &stol){
- int max = 0;
- for(int i=0; i<stol.size(); i++){
- if(stol[i].wartosc > max){
- max = stol[i].wartosc;
- }
- }
- return max;
- }
- void usun_graczy(vector <gracz> &gracze){
- for(int i = 0; i < gracze.size();){
- if(gracze[i].reka.size() == 0){
- gracze.erase(gracze.begin()+i);
- }
- else{
- i++;
- }
- }
- }
- void oproznij_stol(vector <karta> &stol, queue <karta> &sterta){
- while(stol.size() != 0 ){
- sterta.push(stol.back());
- stol.pop_back();
- }
- }
- void zagranie(vector <gracz> &gracze, vector <karta> &stol, queue <karta> &sterta, queue <gracz> &kolejka_przegranych){
- int max;
- for(int i = 0; i < gracze.size(); i++){ //wyrzucenie kart na stół
- cout<<gracze[i].imie<<" ma "<<gracze[i].reka.size()<<" kart\n";
- }
- cout<<"\nna stercie jest "<<sterta.size()<<" kart\n\n";
- for(int i = 0; i < gracze.size(); i++){ //wyrzucenie kart na stół
- stol.push_back(gracze[i].reka.front());
- cout<<gracze[i].imie<<" gra "<<gracze[i].reka.front().nazwa<<"\n";
- gracze[i].reka.pop();
- }
- max = max_na_stole(stol);
- for(int i = 0; i < stol.size();){ //usunięcie graczy którzy nie mają maxa
- if(stol[i].wartosc != max){
- kolejka_przegranych.push(gracze[i]);
- gracze.erase(gracze.begin()+i);
- sterta.push(stol[i]);
- stol.erase(stol.begin()+i);
- }
- else{
- i++;
- }
- }
- cout<<"\n";
- oproznij_stol(stol, sterta);
- if(gracze.size() > 1){ // > 1 graczy ma max, rozpetuje sie wojna
- usun_graczy(gracze); // zakładam że ci co nie mogą dalej brać udziału w wojnie dopadają
- // czyli jak było 9,9,3,4 ale dziewiątki rzyciły ostatną kartę to przegrywają, karty ze sterty idą do następnej tury
- if(gracze.size() > 1){
- for(int i = 0; i < gracze.size(); i++){ //wyrzucenie odwróconych kart na sterte
- sterta.push(gracze[i].reka.front());
- gracze[i].reka.pop();
- }
- usun_graczy(gracze);
- if(gracze.size() > 1){ // jak się nie wystrzelili z kart to w końcu wojna jest
- cout<<"\nWojna!\n";
- zagranie(gracze, stol, sterta, kolejka_przegranych);
- }
- }
- }
- if(gracze.size() == 1){ //jak nikt nie wygrał to nikt nie zgarnia kart
- while(sterta.size() > 0){ //wygrany zgarnia karty
- gracze[0].reka.push(sterta.front());
- sterta.pop();
- }
- }
- while(kolejka_przegranych.size() > 0){ //gracze wracaja od przegranych vectora z graczami
- gracze.push_back(kolejka_przegranych.front());
- kolejka_przegranych.pop();
- }
- usun_graczy(gracze);
- }
- void gra(){
- vector <gracz> gracze;
- vector <karta> stol; //na stół rzuca się karty do porównania
- queue <karta> sterta; //sterta kart które zgarnie wygrany
- queue <gracz> kolejka_przegranych; //jak ktoś nie ma max to idzie tutaj
- int *liczba_graczy;
- liczba_graczy = new int;
- dodaj_graczy(gracze, liczba_graczy);
- rozdaj_karty(gracze, liczba_graczy);
- delete liczba_graczy; // trzeba oszczedzac na pamieci xd
- int liczba_tur = 0;
- while(gracze.size() > 1){
- zagranie(gracze, stol, sterta, kolejka_przegranych);
- cout<<"pozostalo "<<gracze.size()<<" graczy\n";
- cout<<"----------------------------------------------------\n\n";
- liczba_tur++;
- }
- cout<<"\n------------------------\n\n Wygrywa "<<gracze[0].imie<<" po "<<liczba_tur<<" turach !";
- }
- int main(){
- srand(time(NULL));
- gra();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement