Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.15 KB | None | 0 0
  1. #include<iostream>
  2. #include <algorithm>
  3. #include<vector>
  4. #include<cstring>
  5. #include <string>
  6. #include<iomanip>
  7. #include<random>
  8.  
  9. using namespace std;
  10.  
  11. struct karta
  12. {
  13. string nazwa;
  14. int wartosc;
  15. char kolor;
  16. int barwa;
  17. };
  18.  
  19.  
  20. class Pole
  21. {
  22. public:
  23. Pole();
  24. karta trefl;
  25. karta pik;
  26. karta karo;
  27. karta kier;
  28. karta cell_jeden;
  29. karta cell_dwa;
  30. karta cell_trzy;
  31. karta cell_cztery;
  32. vector <karta> rzad_pierwszy;
  33. vector <karta> rzad_drugi;
  34. vector <karta> rzad_trzeci;
  35. vector <karta> rzad_czwarty;
  36. vector <karta> rzad_piaty;
  37. vector <karta> rzad_szosty;
  38. vector <karta> rzad_siodmy;
  39. vector <karta> rzad_osmy;
  40. vector<vector <karta>> rzedy;
  41.  
  42.  
  43.  
  44. vector<karta> generuj_talie()
  45. {
  46. vector <karta> talia;
  47. for (int i = 0; i < 52; i++)
  48. {
  49. karta * nowa = new karta;
  50. if (i % 13 == 1)
  51. {
  52. nowa->nazwa = "2";
  53. nowa->wartosc = 2;
  54. }
  55. else if (i % 13 == 2)
  56. {
  57. nowa->nazwa = "3";
  58. nowa->wartosc = 3;
  59. }
  60. else if (i % 13 == 3)
  61. {
  62. nowa->nazwa = "4";
  63. nowa->wartosc = 4;
  64. }
  65. else if (i % 13 == 4)
  66. {
  67. nowa->nazwa = "5";
  68. nowa->wartosc = 5;
  69. }
  70. else if (i % 13 == 5)
  71. {
  72. nowa->nazwa = "6";
  73. nowa->wartosc = 6;
  74. }
  75. else if (i % 13 == 6)
  76. {
  77. nowa->nazwa = "7";
  78. nowa->wartosc = 7;
  79. }
  80. else if (i % 13 == 7)
  81. {
  82. nowa->nazwa = "8";
  83. nowa->wartosc = 8;
  84. }
  85. else if (i % 13 == 8)
  86. {
  87. nowa->nazwa = "9";
  88. nowa->wartosc = 9;
  89. }
  90. else if (i % 13 == 9)
  91. {
  92. nowa->nazwa = "10";
  93. nowa->wartosc = 10;
  94. }
  95. else if (i % 13 == 10)
  96. {
  97. nowa->nazwa = "Walet";
  98. nowa->wartosc = 11;
  99. }
  100. else if (i % 13 == 11)
  101. {
  102. nowa->nazwa = "Dama";
  103. nowa->wartosc = 12;
  104. }
  105. else if (i % 13 == 12)
  106. {
  107. nowa->nazwa = "Krol";
  108. nowa->wartosc = 13;
  109. }
  110. else
  111. {
  112. nowa->nazwa = "As";
  113. nowa->wartosc = 1;
  114. }
  115.  
  116.  
  117. if (i < 13)
  118. {
  119. nowa->kolor = 3;
  120. nowa->barwa = 0;
  121. }
  122. else if (i < 26)
  123. {
  124. nowa->kolor = 4;
  125. nowa->barwa = 0;
  126. }
  127. else if (i < 39)
  128. {
  129. nowa->kolor = 5;
  130. nowa->barwa = 1;
  131. }
  132. else
  133. {
  134. nowa->kolor = 6;
  135. nowa->barwa = 1;
  136. }
  137.  
  138. talia.push_back(*nowa);
  139. }
  140. return talia;
  141. };
  142.  
  143. vector <karta>talia = generuj_talie();
  144.  
  145. void wypisz_talie(vector <karta> talia)
  146. {
  147. vector<karta>::iterator iter;
  148. for (iter = talia.begin(); iter != talia.end(); iter++)
  149. {
  150. cout << iter->nazwa << iter->kolor << endl;
  151. }
  152. };
  153.  
  154. vector<karta> rozdaj_karty_siedem()
  155. {
  156. vector <karta> stosik;
  157. vector<karta> ::iterator end;
  158. vector<karta> ::iterator poprzedni;
  159. for (int i = 0; i < 7; i++)
  160. {
  161. end = this->talia.end();
  162. poprzedni = end--;
  163. stosik.push_back(*end);
  164. this->talia.pop_back();
  165. end = poprzedni;
  166. }
  167. return stosik;
  168. }
  169.  
  170. vector<karta> rozdaj_karty_szesc()
  171. {
  172. vector <karta> stosik;
  173. vector<karta> ::iterator end;
  174. vector<karta> ::iterator poprzedni;
  175. for (int i = 0; i < 6; i++)
  176. {
  177. end = this->talia.end();
  178. poprzedni = end--;
  179. stosik.push_back(*end);
  180. this->talia.pop_back();
  181. end = poprzedni;
  182. }
  183. return stosik;
  184. }
  185.  
  186. void wypisz_rzedy(vector <karta> rzad)
  187. {
  188. vector<karta>::iterator iter;
  189. for (iter = rzad.begin(); iter != rzad.end(); iter++)
  190. {
  191. cout << setw(2) << " " << setw(5) << iter->nazwa << iter->kolor;
  192. }
  193. cout << endl;
  194. };
  195.  
  196. void wypisz_pole(karta card)
  197. {
  198. cout << "+-----------+" << endl;
  199. cout << "|" << setw(11) << card.kolor + card.nazwa << "|" << endl;
  200. cout << "+-----------+" << endl;
  201. }
  202.  
  203. void wypisz_pole(Pole plansza)
  204. {
  205. cout << setw(4) << "I";
  206. plansza.wypisz_rzedy(plansza.rzad_pierwszy);
  207. cout << setw(4) << "II";
  208. plansza.wypisz_rzedy(plansza.rzad_drugi);
  209. cout << setw(4) << "III";
  210. plansza.wypisz_rzedy(plansza.rzad_trzeci);
  211. cout << setw(4) << "IV";
  212. plansza.wypisz_rzedy(plansza.rzad_czwarty);
  213. cout << setw(4) << "V";
  214. plansza.wypisz_rzedy(plansza.rzad_piaty);
  215. cout << setw(4) << "VI";
  216. plansza.wypisz_rzedy(plansza.rzad_szosty);
  217. cout << setw(4) << "VII";
  218. plansza.wypisz_rzedy(plansza.rzad_siodmy);
  219. cout << setw(4) << "VIII";
  220. plansza.wypisz_rzedy(plansza.rzad_osmy);
  221.  
  222. cout << "Cell" << endl;
  223. plansza.wypisz_pole(plansza.cell_cztery);
  224. plansza.wypisz_pole(plansza.cell_trzy);
  225. plansza.wypisz_pole(plansza.cell_dwa);
  226. plansza.wypisz_pole(plansza.cell_jeden);
  227.  
  228. cout << "Wykladane" << endl;
  229. plansza.wypisz_pole(plansza.pik);
  230. plansza.wypisz_pole(plansza.karo);
  231. plansza.wypisz_pole(plansza.trefl);
  232. plansza.wypisz_pole(plansza.kier);
  233.  
  234.  
  235. }
  236.  
  237.  
  238. void rozdaj()
  239. {
  240. this->rzad_pierwszy = this->rozdaj_karty_siedem();
  241. this->rzad_drugi = this->rozdaj_karty_siedem();
  242. this->rzad_trzeci = this->rozdaj_karty_siedem();
  243. this->rzad_czwarty = this->rozdaj_karty_siedem();
  244. this->rzad_piaty = this->rozdaj_karty_szesc();
  245. this->rzad_szosty = this->rozdaj_karty_szesc();
  246. this->rzad_siodmy = this->rozdaj_karty_szesc();
  247. this->rzad_osmy = this->rozdaj_karty_szesc();
  248. }
  249.  
  250.  
  251. void przeloz_rzad_rzad(int a,int b)
  252. {
  253. if (czy_moge_rzad_rzad(a, b) == true)
  254. {
  255. if (b == 1)
  256. {
  257. this->rzad_pierwszy.push_back(wez_karte(a));
  258. }
  259. else if (b == 2)
  260. {
  261. this->rzad_drugi.push_back(wez_karte(a));
  262. }
  263. else if (b == 3)
  264. {
  265. this->rzad_trzeci.push_back(wez_karte(a));
  266. }
  267. else if (b == 4)
  268. {
  269. this->rzad_czwarty.push_back(wez_karte(a));
  270. }
  271. else if (b == 5)
  272. {
  273. this->rzad_piaty.push_back(wez_karte(a));
  274. }
  275. else if (b == 6)
  276. {
  277. this->rzad_szosty.push_back(wez_karte(a));
  278. }
  279. else if (b == 7)
  280. {
  281. this->rzad_siodmy.push_back(wez_karte(a));
  282. }
  283. else if (b == 8)
  284. {
  285. this->rzad_osmy.push_back(wez_karte(a));
  286. }
  287. else{}
  288. usun_rzad(a);
  289. }
  290. else{ cout << "nieprawidlowy ruch"<<endl; }
  291. }
  292.  
  293. void przeloz_rzad_cela(int a, int b)
  294. {
  295. if (czy_moge_rzad_cela(b) == true)
  296. {
  297. if (b == 1)
  298. this->cell_jeden = wez_karte(a);
  299. else if (b == 2)
  300. this->cell_dwa = wez_karte(a);
  301. else if (b == 3)
  302. this->cell_trzy = wez_karte(a);
  303. else if (b == 4)
  304. this->cell_cztery = wez_karte(a);
  305. else{}
  306. usun_rzad(a);
  307. }
  308. else
  309. cout << "nieprawidlowy ruch"<<endl;
  310. }
  311.  
  312. void przeloz_rzad_stos(int a, int b)
  313. {
  314. if (czy_moge_rzad_stos(a, b) == true)
  315. {
  316. if (b == 1)
  317. this->pik = wez_karte(a);
  318. else if (b == 2)
  319. this->karo = wez_karte(a);
  320. else if (b==3)
  321. this->trefl = wez_karte(a);
  322. else if (b==4)
  323. this->kier = wez_karte(a);
  324. else{};
  325.  
  326. usun_rzad(a);
  327. }
  328. else
  329. cout << "nieprawidlowy ruch"<<endl;
  330. }
  331.  
  332. void przeloz_cela_rzad(int a, int b)
  333. {
  334. if (czy_moge_cela_rzad(a, b) == true)
  335. {
  336. if (b == 1)
  337. {
  338. this->rzad_pierwszy.push_back(wez_cela(a));
  339. }
  340. else if (b == 2)
  341. {
  342. this->rzad_drugi.push_back(wez_cela(a));
  343. }
  344. else if (b == 3)
  345. {
  346. this->rzad_trzeci.push_back(wez_cela(a));
  347. }
  348. else if (b == 4)
  349. {
  350. this->rzad_czwarty.push_back(wez_cela(a));
  351. }
  352. else if (b == 5)
  353. {
  354. this->rzad_piaty.push_back(wez_cela(a));
  355. }
  356. else if (b == 6)
  357. {
  358. this->rzad_szosty.push_back(wez_cela(a));
  359. }
  360. else if (b == 7)
  361. {
  362. this->rzad_siodmy.push_back(wez_cela(a));
  363. }
  364. else if (b == 8)
  365. {
  366. this->rzad_osmy.push_back(wez_cela(a));
  367. }
  368. else{}
  369.  
  370. usun_cela(a);
  371. }
  372. else
  373. cout << "nieprawidlowy ruch"<<endl;
  374. }
  375.  
  376.  
  377. void przeloz_cela_stos(int a, int b)
  378. {
  379. if (czy_moge_cela_stos(a, b) == true)
  380. {
  381. if (b == 1)
  382. this->pik = wez_cela(a);
  383. else if (b == 2)
  384. this->karo = wez_cela(a);
  385. else if (b == 3)
  386. this->trefl = wez_cela(a);
  387. else if (b == 4)
  388. this->kier = wez_cela(a);
  389. else{};
  390. usun_cela(a);
  391. }
  392. else
  393. cout << "nieprawidlowy ruch"<<endl;
  394. }
  395.  
  396.  
  397.  
  398. void usun_rzad(int a)
  399. {
  400. if (a == 1)
  401. {
  402. this->rzad_pierwszy.pop_back();
  403. }
  404. else if (a == 2)
  405. {
  406. this->rzad_drugi.pop_back();
  407. }
  408. else if (a == 3)
  409. {
  410. this->rzad_trzeci.pop_back();
  411. }
  412. else if (a == 4)
  413. {
  414. this->rzad_czwarty.pop_back();
  415. }
  416. else if (a == 5)
  417. {
  418. this->rzad_piaty.pop_back();
  419. }
  420. else if (a == 6)
  421. {
  422. this->rzad_szosty.pop_back();
  423. }
  424. else if (a == 7)
  425. {
  426. this->rzad_siodmy.pop_back();
  427. }
  428. else if (a == 8)
  429. {
  430. this->rzad_osmy.pop_back();
  431. }
  432. else{}
  433. }
  434.  
  435.  
  436. void usun_cela(int a)
  437. {
  438.  
  439. if (a == 1)
  440. this->cell_jeden.wartosc = 0;
  441. else if (a == 2)
  442. this->cell_dwa.wartosc=0;
  443. else if (a == 3)
  444. this->cell_trzy.wartosc=0;
  445. else if (a == 4)
  446. this->cell_cztery.wartosc=0;
  447. else{}
  448. }
  449.  
  450.  
  451.  
  452. karta wez_karte(int a)
  453. {
  454. vector<karta> zrodlo;
  455.  
  456. if (a == 1)
  457. {
  458. zrodlo = this->rzad_pierwszy;
  459. }
  460. else if (a == 2)
  461. {
  462. zrodlo = this->rzad_drugi;
  463. }
  464. else if (a == 3)
  465. {
  466. zrodlo = this->rzad_trzeci;
  467. }
  468. else if (a == 4)
  469. {
  470. zrodlo = this->rzad_czwarty;
  471. }
  472. else if (a == 5)
  473. {
  474. zrodlo = this->rzad_piaty;
  475. }
  476. else if (a == 6)
  477. {
  478. zrodlo = this->rzad_szosty;
  479. }
  480. else if (a == 7)
  481. {
  482. zrodlo = this->rzad_siodmy;
  483. }
  484. else if (a == 8)
  485. {
  486. zrodlo = this->rzad_osmy;
  487. }
  488. else{}
  489. karta card = zrodlo.back();
  490. return card;
  491. }
  492.  
  493. karta wez_stos(int b)
  494. {
  495. karta cel;
  496. if (b == 1)
  497. cel = this->pik;
  498. else if (b == 2)
  499. cel = this->karo;
  500. else if (b == 3)
  501. cel = this->trefl;
  502. else if (b == 4)
  503. cel = this->karo;
  504. else;
  505. return cel;
  506. }
  507.  
  508. karta wez_cela(int a)
  509. {
  510. karta cel;
  511. if (a == 1)
  512. cel = this->cell_jeden;
  513. else if (a == 2)
  514. cel = this->cell_dwa;
  515. else if (a == 3)
  516. cel = this->cell_trzy;
  517. else if (a == 4)
  518. cel = this->cell_cztery;
  519. else{}
  520. return cel;
  521.  
  522. }
  523.  
  524. bool czy_moge_rzad_rzad(int a, int b)
  525. {
  526.  
  527. karta zrodlo = wez_karte(a);
  528. karta cel = wez_karte(b);
  529.  
  530. if ((zrodlo.barwa != cel.barwa) && (zrodlo.wartosc == (cel.wartosc - 1)))
  531. {
  532. cout << "ok";
  533. return true;
  534. }
  535. else
  536. {
  537. cout << "nope";
  538. return false;
  539. }
  540.  
  541. }
  542.  
  543.  
  544. bool czy_moge_rzad_cela(int a)
  545. {
  546. karta cel = wez_cela(a);
  547. if (cel.wartosc == 0)
  548. return true;
  549. else
  550. return false;
  551. }
  552.  
  553. bool czy_moge_rzad_stos(int a, int b)
  554. {
  555. karta zrodlo;
  556. karta cel;
  557.  
  558. zrodlo = wez_karte(a);
  559. cel = wez_stos(b);
  560.  
  561. if ((zrodlo.kolor == cel.kolor) && (zrodlo.wartosc == (cel.wartosc +1)))
  562. return true;
  563. else return false;
  564. }
  565.  
  566. bool czy_moge_cela_stos(int a, int b)
  567. {
  568. karta cela=wez_cela(a);
  569. karta stos=wez_stos(b);
  570.  
  571. if (cela.kolor == stos.kolor && cela.wartosc == (stos.wartosc - 1))
  572. return true;
  573. else return false;
  574. }
  575.  
  576. bool czy_moge_cela_rzad(int a, int b)
  577. {
  578. karta cela = wez_cela(a);
  579. karta rzad = wez_karte(b);
  580.  
  581. if ((cela.barwa != rzad.barwa) && (cela.wartosc == (rzad.wartosc - 1)))
  582. return true;
  583. else return false;
  584. }
  585.  
  586.  
  587.  
  588.  
  589. };
  590.  
  591.  
  592.  
  593.  
  594. Pole::Pole()
  595. {
  596. trefl.kolor = 5;
  597. trefl.wartosc = 0;
  598. trefl.nazwa = " ";
  599.  
  600. pik.kolor = 6;
  601. pik.wartosc = 0;
  602. pik.nazwa = " ";
  603.  
  604. karo.kolor = 4;
  605. karo.wartosc = 0;
  606. karo.nazwa = " ";
  607.  
  608. kier.kolor = 3;
  609. kier.wartosc = 0;
  610. kier.nazwa = " ";
  611.  
  612. cell_jeden.kolor = ' ';
  613. cell_jeden.wartosc = 0;
  614. cell_jeden.nazwa = " ";
  615.  
  616. cell_dwa.kolor = ' ';
  617. cell_dwa.wartosc = 0;
  618. cell_dwa.nazwa = " ";
  619.  
  620. cell_trzy.kolor = ' ';
  621. cell_trzy.wartosc = 0;
  622. cell_trzy.nazwa = " ";
  623.  
  624. cell_cztery.kolor = ' ';
  625. cell_cztery.wartosc = 0;
  626. cell_cztery.nazwa = " ";
  627.  
  628. talia = generuj_talie();
  629.  
  630.  
  631.  
  632. }
  633.  
  634.  
  635.  
  636. void pisz_menu()
  637. {
  638. cout << "<1. Przeloz rzad->rzad>" << endl;
  639. cout << "<2. Przeloz rzad->cela>" << endl;
  640. cout << "<3. Przeloz rzad->stos>" << endl;
  641. cout << "<4. Przeloz cela->rzad>" << endl;
  642. cout << "<5. Przeloz cela->stos>" << endl;
  643. cout << "<0. Koniec programu>" << endl;
  644. }
  645.  
  646.  
  647. void menu_main(Pole plansza)
  648. {
  649. int wybor;
  650.  
  651. do {
  652. pisz_menu();
  653. cin >> wybor;
  654. switch (wybor)
  655. {
  656. case 1:
  657. {
  658. int a, b;
  659. cout << "z ktorego rzedu" << endl;
  660. cin >> a;
  661. cout << "do ktorego rzedu" << endl;
  662. cin >> b;
  663. plansza.przeloz_rzad_rzad(a, b);
  664. plansza.wypisz_pole(plansza);
  665. }
  666. break;
  667. case 2:
  668. {
  669. int a, b;
  670. cout << "z ktorego rzedu" << endl;
  671. cin >> a;
  672. cout << "do ktorej celi" << endl;
  673. cin >> b;
  674. plansza.przeloz_rzad_cela(a, b);
  675. plansza.wypisz_pole(plansza);
  676. }
  677. break;
  678. case 3:
  679. {
  680. int a, b;
  681. cout << "z ktorego rzedu" << endl;
  682. cin >> a;
  683. cout << "na ktory stos" << endl;
  684. cin >> b;
  685. plansza.przeloz_rzad_stos(a, b);
  686. plansza.wypisz_pole(plansza);
  687. }
  688. break;
  689. case 4:
  690. {
  691. int a, b;
  692. cout << "z ktorej celi" << endl;
  693. cin >> a;
  694. cout << "do ktorego rzedu" << endl;
  695. cin >> b;
  696. plansza.przeloz_cela_rzad(a, b);
  697. plansza.wypisz_pole(plansza);
  698. }
  699. break;
  700. case 5:
  701. {
  702. int a, b;
  703. cout << "z ktorej celi" << endl;
  704. cin >> a;
  705. cout << "na ktory stos" << endl;
  706. cin >> b;
  707. plansza.przeloz_cela_stos(a, b);
  708. plansza.wypisz_pole(plansza);
  709. }
  710. break;
  711. }
  712. }
  713. while (wybor != 0);
  714. }
  715.  
  716.  
  717.  
  718.  
  719.  
  720. int main()
  721. {
  722. cout << "Witaj w grze pasjans FreeCell" << endl;
  723. Pole plansza;
  724. random_shuffle(plansza.talia.begin(), plansza.talia.end());
  725. plansza.rozdaj();
  726. plansza.wypisz_pole(plansza);
  727. menu_main(plansza);
  728.  
  729.  
  730.  
  731. // char a = 3 kier
  732. // char b = 4 karo
  733. // char c = 5 trefl
  734. // char d = 6 pik
  735.  
  736.  
  737. system("PAUSE");
  738. return 0;
  739. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement