Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. #include<time.h>
  5. #include <stdlib.h>
  6.  
  7. using namespace std;
  8.  
  9. struct karta{
  10.  
  11. string nazwa;
  12. int wartosc;
  13.  
  14. };
  15.  
  16. struct gracz{
  17.  
  18. string imie;
  19. queue <karta> reka;
  20.  
  21. };
  22.  
  23. void stworz_talie(vector <karta> &talia){
  24.  
  25. string nazwa;
  26. karta tmp;
  27.  
  28. for(int i=0;i<13;i++){
  29.  
  30. switch (i){
  31.  
  32. case 0:
  33. nazwa = "2";
  34. tmp.wartosc = 2;
  35. break;
  36. case 1:
  37. nazwa = "3";
  38. tmp.wartosc = 3;
  39. break;
  40. case 2:
  41. nazwa = "4";
  42. tmp.wartosc = 4;
  43. break;
  44. case 3:
  45. nazwa = "5";
  46. tmp.wartosc = 5;
  47. break;
  48. case 4:
  49. nazwa = "6";
  50. tmp.wartosc = 6;
  51. break;
  52. case 5:
  53. nazwa = "7";
  54. tmp.wartosc = 7;
  55. break;
  56. case 6:
  57. nazwa = "8";
  58. tmp.wartosc = 8;
  59. break;
  60. case 7:
  61. nazwa = "9";
  62. tmp.wartosc = 9;
  63. break;
  64. case 8:
  65. nazwa = "10";
  66. tmp.wartosc = 10;
  67. break;
  68. case 9:
  69. nazwa = "Walet";
  70. tmp.wartosc = 11;
  71. break;
  72. case 10:
  73. nazwa = "Dama";
  74. tmp.wartosc = 12;
  75. break;
  76. case 11:
  77. nazwa = "krol";
  78. tmp.wartosc = 13;
  79. break;
  80. case 12:
  81. nazwa = "As";
  82. tmp.wartosc = 14;
  83. break;
  84.  
  85. }
  86.  
  87. for(int j=0;j<4;j++){
  88.  
  89. switch (j){
  90.  
  91. case 0:
  92. tmp.nazwa = nazwa + " Serce";
  93. break;
  94. case 1:
  95. tmp.nazwa = nazwa + " Pik";
  96. break;
  97. case 2:
  98. tmp.nazwa = nazwa + " Karo";
  99. break;
  100. case 3:
  101. tmp.nazwa = nazwa + " Trefl";
  102. break;
  103.  
  104. }
  105.  
  106. talia.push_back(tmp);
  107.  
  108. }
  109.  
  110. }
  111.  
  112. tmp = {"Joker", 15};
  113. talia.push_back(tmp);
  114. talia.push_back(tmp);
  115.  
  116. }
  117.  
  118. void dodaj_graczy(vector <gracz> &gracze, int *liczba_graczy){
  119.  
  120. *liczba_graczy = 0;
  121. gracz tmp;
  122.  
  123. cout<<"podaj liczbe graczy: ";
  124. do{
  125. cin>>*liczba_graczy;
  126. }while(*liczba_graczy<2);
  127.  
  128. for(int i=0;i<*liczba_graczy;i++){
  129. cout<<"podaj nazwe gracza "<<i+1<<": ";
  130. cin>>tmp.imie;
  131. cout<<"\n";
  132. gracze.push_back(tmp);
  133. }
  134.  
  135. }
  136.  
  137. void rozdaj_karty(vector <gracz> &gracze, int *liczba_graczy){
  138.  
  139. int los;
  140.  
  141. vector <karta> talia;
  142. stworz_talie(talia);
  143.  
  144. while(talia.size() > 0){
  145.  
  146. los = rand()%(talia.size());
  147. gracze[talia.size()%gracze.size()].reka.push(talia[los]);
  148. talia.erase(talia.begin()+los);
  149.  
  150. }
  151.  
  152. }
  153.  
  154. int max_na_stole(vector <karta> &stol){
  155.  
  156. int max = 0;
  157.  
  158. for(int i=0; i<stol.size(); i++){
  159.  
  160. if(stol[i].wartosc > max){
  161.  
  162. max = stol[i].wartosc;
  163.  
  164. }
  165.  
  166. }
  167.  
  168. return max;
  169.  
  170. }
  171.  
  172. void usun_graczy(vector <gracz> &gracze){
  173.  
  174. for(int i = 0; i < gracze.size();){
  175.  
  176. if(gracze[i].reka.size() == 0){
  177.  
  178. gracze.erase(gracze.begin()+i);
  179.  
  180. }
  181. else{
  182. i++;
  183. }
  184.  
  185. }
  186.  
  187. }
  188.  
  189. void oproznij_stol(vector <karta> &stol, queue <karta> &sterta){
  190.  
  191. while(stol.size() != 0 ){
  192.  
  193. sterta.push(stol.back());
  194. stol.pop_back();
  195.  
  196. }
  197.  
  198. }
  199.  
  200. void zagranie(vector <gracz> &gracze, vector <karta> &stol, queue <karta> &sterta, queue <gracz> &kolejka_przegranych){
  201.  
  202. int max;
  203.  
  204. for(int i = 0; i < gracze.size(); i++){ //wyrzucenie kart na stół
  205.  
  206. cout<<gracze[i].imie<<" ma "<<gracze[i].reka.size()<<" kart\n";
  207.  
  208. }
  209.  
  210. cout<<"\nna stercie jest "<<sterta.size()<<" kart\n\n";
  211.  
  212. for(int i = 0; i < gracze.size(); i++){ //wyrzucenie kart na stół
  213. stol.push_back(gracze[i].reka.front());
  214.  
  215. cout<<gracze[i].imie<<" gra "<<gracze[i].reka.front().nazwa<<"\n";
  216.  
  217. gracze[i].reka.pop();
  218. }
  219.  
  220. max = max_na_stole(stol);
  221.  
  222. for(int i = 0; i < stol.size();){ //usunięcie graczy którzy nie mają maxa
  223.  
  224. if(stol[i].wartosc != max){
  225.  
  226. kolejka_przegranych.push(gracze[i]);
  227. gracze.erase(gracze.begin()+i);
  228. sterta.push(stol[i]);
  229. stol.erase(stol.begin()+i);
  230.  
  231. }
  232. else{
  233.  
  234. i++;
  235.  
  236. }
  237.  
  238. }
  239.  
  240. cout<<"\n";
  241.  
  242. oproznij_stol(stol, sterta);
  243.  
  244. if(gracze.size() > 1){ // > 1 graczy ma max, rozpetuje sie wojna
  245.  
  246. usun_graczy(gracze); // zakładam że ci co nie mogą dalej brać udziału w wojnie dopadają
  247. // 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
  248. if(gracze.size() > 1){
  249.  
  250. for(int i = 0; i < gracze.size(); i++){ //wyrzucenie odwróconych kart na sterte
  251. sterta.push(gracze[i].reka.front());
  252. gracze[i].reka.pop();
  253. }
  254.  
  255. usun_graczy(gracze);
  256.  
  257. if(gracze.size() > 1){ // jak się nie wystrzelili z kart to w końcu wojna jest
  258. cout<<"\nWojna!\n";
  259. zagranie(gracze, stol, sterta, kolejka_przegranych);
  260.  
  261. }
  262.  
  263. }
  264.  
  265. }
  266.  
  267. if(gracze.size() == 1){ //jak nikt nie wygrał to nikt nie zgarnia kart
  268.  
  269. while(sterta.size() > 0){ //wygrany zgarnia karty
  270.  
  271. gracze[0].reka.push(sterta.front());
  272. sterta.pop();
  273.  
  274. }
  275.  
  276. }
  277.  
  278. while(kolejka_przegranych.size() > 0){ //gracze wracaja od przegranych vectora z graczami
  279.  
  280. gracze.push_back(kolejka_przegranych.front());
  281. kolejka_przegranych.pop();
  282.  
  283. }
  284.  
  285. usun_graczy(gracze);
  286.  
  287. }
  288.  
  289. void gra(){
  290.  
  291. vector <gracz> gracze;
  292.  
  293. vector <karta> stol; //na stół rzuca się karty do porównania
  294. queue <karta> sterta; //sterta kart które zgarnie wygrany
  295. queue <gracz> kolejka_przegranych; //jak ktoś nie ma max to idzie tutaj
  296.  
  297. int *liczba_graczy;
  298. liczba_graczy = new int;
  299.  
  300. dodaj_graczy(gracze, liczba_graczy);
  301.  
  302. rozdaj_karty(gracze, liczba_graczy);
  303.  
  304. delete liczba_graczy; // trzeba oszczedzac na pamieci xd
  305.  
  306. int liczba_tur = 0;
  307.  
  308. while(gracze.size() > 1){
  309.  
  310. zagranie(gracze, stol, sterta, kolejka_przegranych);
  311. cout<<"pozostalo "<<gracze.size()<<" graczy\n";
  312. cout<<"----------------------------------------------------\n\n";
  313. liczba_tur++;
  314. }
  315.  
  316. cout<<"\n------------------------\n\n Wygrywa "<<gracze[0].imie<<" po "<<liczba_tur<<" turach !";
  317.  
  318. }
  319.  
  320. int main(){
  321.  
  322. srand(time(NULL));
  323. gra();
  324.  
  325. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement