Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <math.h>
  4. #include <time.h>
  5. #include <stdlib.h>
  6. #include <windows.h>
  7.  
  8. #define SIZE 52
  9. #define HALF_SIZE 26
  10.  
  11. using namespace std;
  12.  
  13. typedef enum Suit { Diamonds, Hearts, Spades, Clubs } Suit_t;
  14. typedef enum Power { Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace } Power_t;
  15.  
  16. typedef struct card {
  17. Suit_t suit;
  18. Power_t power;
  19. }cards;
  20.  
  21. typedef struct deck { // alokacja struktury
  22. cards* p_deck;
  23. int size;
  24. }decks;
  25.  
  26. void Deck_Creator(cards* deck) {
  27. for (int i = 0; i < SIZE; i++) {
  28. deck[i].suit = (Suit)(i / 13);
  29. deck[i].power = (Power)(i % 13);
  30. }
  31.  
  32. }
  33.  
  34. void Display_Deck(cards* deck) {
  35. for (int i = 0; i < SIZE; i++) {
  36.  
  37. if (deck[i].suit == Diamonds) {
  38. cout << "Diamond ";
  39. }
  40. else if (deck[i].suit == Hearts) {
  41. cout << "Heart ";
  42. }
  43. else if (deck[i].suit == Spades) {
  44. cout << "Spade ";
  45. }
  46. else {
  47. cout << "Club ";
  48. }
  49. cout << " " << deck[i].power << endl;
  50. cout << endl;
  51. }
  52. }
  53.  
  54. void Deck_Shuffler(cards* deck) {
  55. int changer = 0; // Index of changed card
  56. cards temp = {}; // Temporary holding place for changing
  57. srand(time(NULL)); // Function to get random numbers with current time
  58. for (int i = 0; i < SIZE; i++) {
  59. changer = rand() % SIZE; // Generating random number from 0 to 51
  60. temp = deck[i];
  61. deck[i] = deck[changer]; // if changer = i
  62. deck[changer] = temp;
  63. }
  64. }
  65.  
  66. void Deck1_Creator(cards* deck1, cards* deck, decks* q_deck1) {
  67. for (int i = 0; i < HALF_SIZE; i++) {
  68. memcpy(&deck1[i], &deck[i], sizeof(cards)); // Copying content using memcpy function
  69. }
  70. q_deck1->p_deck = deck1;
  71. q_deck1->size = HALF_SIZE;
  72. }
  73.  
  74. void Deck2_Creator(cards* deck, cards* deck2, decks* q_deck2) {
  75. int i = HALF_SIZE;
  76. for (int i = 26; i < SIZE; i++) {
  77. deck2[i - HALF_SIZE] = deck[i]; // Simple copying struct array content into another array
  78. }
  79. q_deck2->p_deck = deck2;
  80. q_deck2->size = HALF_SIZE;
  81. }
  82.  
  83. void table_creator(decks* q_deck, cards* array) {
  84.  
  85. q_deck->p_deck = array;
  86. q_deck->size = 0;
  87. }
  88.  
  89. void enqueue(decks* q_deck, cards card) {
  90.  
  91. // decks* p_deck = (decks*)malloc(sizeof(*p_deck)); <- Taki malloc nie pomaga
  92. q_deck->p_deck[q_deck->size] = card; // ADDING CARD ON THE TOP
  93. q_deck->size++;
  94. }
  95.  
  96. cards dequeue(decks* q_deck) {
  97. cards tmp_card;
  98. tmp_card = q_deck->p_deck[0];
  99. for (int i = 0; i < q_deck->size - 1; i++) { // TAKING CARD FROM THE BOTTOM
  100. q_deck->p_deck[i] = q_deck->p_deck[i + 1];
  101. }
  102. q_deck->size--;
  103.  
  104. return tmp_card;
  105. }
  106.  
  107. void disp_queue(decks* q_deck) {
  108. for (int i = 0; i < q_deck->size; i++) {
  109. cout << q_deck->p_deck[i].suit <<" ";
  110. cout << q_deck->p_deck[i].power << endl;
  111. }
  112. }
  113.  
  114. void Compare(decks* q_table1, decks* q_table2, decks* q_deck1, decks* q_deck2) {
  115. int i = 0;
  116. int j = 0;
  117. {
  118. if (q_table1->p_deck[i].power > q_table2->p_deck[i].power) {
  119. cards tmp_card = dequeue(q_table2); // One way to take card from table 2 and put it into the deck 1
  120. enqueue(q_deck1, tmp_card);
  121. enqueue(q_deck1, dequeue(q_table1)); // The other way, without temporary card (tmp_card)
  122. }
  123. else if (q_table1->p_deck[i].power < q_table2->p_deck[i].power) {
  124. cards tmp_card = dequeue(q_table1);
  125. enqueue(q_deck2, tmp_card);
  126. enqueue(q_deck2, dequeue(q_table2));
  127. }
  128. else if (q_table1->p_deck[i].power == q_table2->p_deck[i].power) { // sprawdzic czy dodaje na spód, czy górę
  129. int j = 0;
  130. enqueue(q_table1, dequeue(q_deck1));
  131. enqueue(q_table2, dequeue(q_deck2));
  132. enqueue(q_table1, dequeue(q_deck1));
  133. enqueue(q_table2, dequeue(q_deck2));
  134. if (q_table1->p_deck[i + 2].power > q_table2->p_deck[i + 2].power) {
  135. while(q_table2->size != 0){
  136. enqueue(q_deck1, dequeue(q_table2));
  137. }
  138. while (q_table1->size != 0) {
  139. enqueue(q_deck1, dequeue(q_table1));
  140. }
  141. }
  142. else if (q_table1->p_deck[i + 2].power < q_table2->p_deck[i + 2].power) {
  143. while (q_table2->size != 0) {
  144. enqueue(q_deck2, dequeue(q_table1));
  145. }
  146. while (q_table1->size != 0) {
  147. enqueue(q_deck2, dequeue(q_table2));
  148. }
  149. }
  150. else if ((q_table1->p_deck[i + 2].power == q_table2->p_deck[i + 2].power)) {
  151. cout << "2nd draw in the row" << endl;
  152.  
  153. }
  154.  
  155. }
  156. }
  157. enqueue(q_table1, dequeue(q_deck1));
  158. enqueue(q_table2, dequeue(q_deck2));
  159. }
  160.  
  161. int main() {
  162. cards deck[SIZE];
  163. cards deck1[SIZE];
  164. cards deck2[SIZE];
  165. cards table1[SIZE];
  166. cards table2[SIZE];
  167. decks q_deck1; //Queues from struct decks. Containing size, and pointer to cards structure
  168. decks q_deck2;
  169. decks q_table1;
  170. decks q_table2;
  171. cards* p_deck;
  172. char choice;
  173.  
  174. table_creator(&q_table1, table1); //Gives addres for table 1 queue
  175. table_creator(&q_table2, table2); //Gives addres for table 2 queue
  176.  
  177. for(; ;) { //Never ending loop
  178. cin >> choice;
  179. switch (choice) {
  180. case '1':
  181. cout << endl << "Unshuffled deck: " << endl;
  182. Deck_Creator(deck);
  183. Display_Deck(deck);
  184. break;
  185. case '2':
  186. cout << endl << "Shuffled deck: " << endl;
  187. Deck_Shuffler(deck);
  188. Display_Deck(deck);
  189. break;
  190. case '3':
  191. cout << endl << "Hand 1:" << endl;
  192. Deck1_Creator(deck1, deck, &q_deck1);
  193. disp_queue(&q_deck1);
  194. break;
  195. case '4':
  196. cout << endl << "Hand 2:" << endl;
  197. Deck2_Creator(deck, deck2, &q_deck2);
  198. disp_queue(&q_deck2);
  199. break;
  200. case '5':
  201. cards tmp_card = dequeue(&q_deck1); // Returns card taken from deck 1. That card is tmp_card
  202. enqueue(&q_table1, tmp_card); // Gives our tmp_card to the table1
  203. tmp_card = dequeue(&q_deck2); // Returns card taken from deck 2.
  204. enqueue(&q_table2, tmp_card); // Gives tmp_card to the table2
  205. disp_queue(&q_table1); // Shows table1
  206. disp_queue(&q_table2); // Shows table2
  207. break;
  208. case '6':
  209. Compare(&q_table1, &q_table2, &q_deck1, &q_deck2);
  210. break;
  211. case '7':
  212. disp_queue(&q_deck1);
  213. break;
  214. case '8':
  215. disp_queue(&q_deck2);
  216. break;
  217. case '9':
  218. disp_queue(&q_table1); // Shows table1
  219. disp_queue(&q_table2); // table 2
  220. break;
  221. //case '10':
  222. // while (&q_deck1)
  223. }
  224. }
  225. return 0;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement