Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <time.h>
- using namespace std;
- #define END_GAME true
- #define MODE_A 0
- #define MODE_B 1
- #define PLAYER_1_LOSS -1
- #define PLAYER_2_LOSS -2
- #define PLAYERS_OOC 0
- #define ENDLESS_GAME 10000
- #define DISPLAY_GAME 1
- #define NO_DISPLAY_GAME 0
- #define WAR_A_1_WIN 1
- #define WAR_A_2_WIN 2
- #define PLAYER_1_WAR_B_FUELED_WIN_WITH_1 3
- #define PLAYER_2_WAR_B_FUELED_WIN_WITH_1 4
- #define PLAYER_1_WAR_B_FUELED_WIN_WITH_2 5
- #define PLAYER_2_WAR_B_FUELED_WIN_WITH_2 6
- //Struktura karty
- struct card
- {
- int value;
- char suit;
- };
- //Funkcja ktora tworzy talie, a potem ja tasuje
- struct card* create_deck(int deck_size)
- {
- int i, j;
- struct card* deck;
- deck = (struct card*) malloc(deck_size * sizeof(struct card));//Najpierw generacja wybranej talii
- if (deck == NULL)
- {
- cout << "Blad przydzielenia pamieci" << endl;
- }
- else
- {
- for (i = 0, j = 14; i < deck_size / 4; i++)
- {
- deck[i].value = j;
- deck[i].suit = 'S';
- j--;
- }
- for (i = 0, j = 14; i < deck_size / 4; i++)
- {
- deck[i + deck_size / 4].value = j;
- deck[i + deck_size / 4].suit = 'C';
- j--;
- }
- for (i = 0, j = 14; i < deck_size / 4; i++)
- {
- deck[i + deck_size / 2].value = j;
- deck[i + deck_size / 2].suit = 'H';
- j--;
- }
- for (i = 0, j = 14; i < deck_size / 4; i++)
- {
- deck[i + 3 * (deck_size / 4)].value = j;
- deck[i + 3 * (deck_size / 4)].suit = 'D';
- j--;
- }
- }
- struct card temp;
- for (i = deck_size - 1; i >= 0; i--)//przetasowanie stworzonej talii
- {
- j = rand() % (i + 1);
- temp = deck[i];
- deck[i] = deck[j];
- deck[j] = temp;
- }
- return deck;
- }
- //Rangi rąk
- struct ranks
- {
- int high_wins;
- int medium_wins;
- int low_wins;
- };
- //Wygrane, przegrane i remisy graczy
- struct game_results
- {
- int A_wins;
- int B_wins;
- int draws;
- };
- //Funkcja pomocnicza wyswietlajaca potasowana talie
- void display_deck(struct card* deck, int size)
- {
- int k;
- for (k = 0; k < size; k++)
- {
- if (deck[k].value == 14)
- {
- cout << 'A' << deck[k].suit << endl;
- }
- else if (deck[k].value == 13)
- {
- cout << 'K' << deck[k].suit << endl;
- }
- else if (deck[k].value == 12)
- {
- cout << 'Q' << deck[k].suit << endl;
- }
- else if (deck[k].value == 11)
- {
- cout << 'J' << deck[k].suit << endl;
- }
- else
- {
- cout << deck[k].value << deck[k].suit << endl;
- }
- }
- }
- //Funkcja wyswietlajaca karte
- void display_card(struct card card)
- {
- if (card.value == 14)
- cout << 'A' << ' ' << card.suit;
- else if (card.value == 13)
- cout << 'K' << ' ' << card.suit;
- else if (card.value == 12)
- cout << 'Q' << ' ' << card.suit;
- else if (card.value == 11)
- cout << 'J' << ' ' << card.suit;
- else
- cout << card.value << ' ' << card.suit;
- }
- //Struktury i funkcje zwiazane z rekami graczy(kolejka FIFO)*
- struct hand_card {
- struct card card;
- struct hand_card* next;
- };
- struct hand {
- struct hand_card* front;
- struct hand_card* back;
- };
- //*Dodawanie karty do reki gracza
- void add_card_to_hand(struct hand* player_s_hand, struct card card_to_add)
- {
- struct hand_card* temp = (struct hand_card*)malloc(sizeof(struct hand_card));
- if (temp != NULL)
- {
- temp->card = card_to_add;
- temp->next = NULL;
- if ((*player_s_hand).back == NULL && (*player_s_hand).front == NULL)
- {
- (*player_s_hand).front = (*player_s_hand).back = temp;
- }
- if ((*player_s_hand).back != NULL)
- {
- (*player_s_hand).back->next = temp;
- (*player_s_hand).back = temp;
- }
- }
- }
- //*Rozdanie kart
- void deal_cards(struct hand* hand_1, struct hand* hand_2, struct card* deck, int deck_size)
- {
- int i;
- for (i = 0; i < deck_size / 2; i++)
- {
- add_card_to_hand(hand_1, deck[i]);
- }
- for (i; i < deck_size; i++)
- {
- add_card_to_hand(hand_2, deck[i]);
- }
- }
- //*Usuwanie karty z reki gracza
- void remove_card_from_hand(struct hand* player_s_hand)
- {
- struct hand_card* temp = (*player_s_hand).front;
- if ((*player_s_hand).front == NULL)
- {
- }
- else if ((*player_s_hand).front == (*player_s_hand).back)
- {
- (*player_s_hand).front = (*player_s_hand).back = NULL;
- }
- else
- {
- (*player_s_hand).front = (*player_s_hand).front->next;
- free(temp);
- }
- }
- //Pokazanie pierwszej karty gracza(funkcja pomocniczna)
- void display_hand(struct hand* hand)
- {
- if (hand->front != NULL)
- {
- cout << (*hand).front->card.value << (*hand).front->card.suit << endl;
- }
- else
- {
- cout << "Brak kart!" << endl;
- }
- }
- //Pokazanie bitwy
- void display_battle(struct card card_1, struct card card_2)
- {
- display_card(card_1);
- cout << " vs ";
- display_card(card_2);
- cout << endl;
- }
- //Funkcja pokazująca statystyki
- void display_stats(int score_A_wins, int score_B_wins, int score_draws, int move_counter, int simulation, struct ranks ranks_wins)
- {
- cout << "Wygrane gracza 1: " << score_A_wins << endl;
- cout << "Wygrane gracza 2: " << score_B_wins << endl;
- cout << "Remisy: " << score_draws << endl;
- cout << "Srednia ilosc ruchow: " << move_counter / simulation << endl;
- cout << "Wygrane wysokiej reki: " << ranks_wins.high_wins << endl;
- cout << "Wygrane sredniej reki: " << ranks_wins.medium_wins << endl;
- cout << "Wygrane niskiej reki: " << ranks_wins.low_wins << endl;
- }
- //Liczenie rangi ręki
- void count_hand_ranking(struct card* deck, int deck_size, int* hand_1_ranking, int* hand_2_ranking)
- {
- int i;
- for (i = 0; i < deck_size / 2; i++)
- *hand_1_ranking += deck[i].value;
- for (i; i < deck_size; i++)
- *hand_2_ranking += deck[i].value;
- return;
- }
- //Dodawanie wygranych rangom
- void add_rang_wins()
- {
- }
- //Rozwiązanie bitwy
- void resolve_battle(struct hand* hand_1, struct hand* hand_2)
- {
- add_card_to_hand(hand_1, hand_1->front->card);
- add_card_to_hand(hand_1, hand_2->front->card);
- remove_card_from_hand(hand_1);
- remove_card_from_hand(hand_2);
- }
- //Funkcja wojny wariant A
- int war_A(struct hand_card* front_1, struct hand_card* front_2, int* moves, struct card* stack, int* stack_number, bool display, int* game_moves)
- {
- if (front_1 == NULL && front_2 == NULL)
- return PLAYERS_OOC;
- else if (front_1 == NULL || front_2 == NULL)
- return PLAYERS_OOC;
- if (display != NO_DISPLAY_GAME)
- display_battle(front_1->card, front_2->card);
- stack[*stack_number] = front_1->card; (*stack_number)++;
- stack[*stack_number] = front_2->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_1->next == NULL && front_2->next == NULL)
- return PLAYERS_OOC;
- else if (front_1->next == NULL)
- return PLAYER_1_LOSS;
- else if (front_2->next == NULL)
- return PLAYER_2_LOSS;
- else
- {
- if(display != NO_DISPLAY_GAME)
- cout << "Gracze dorzucaja karty na stol" << endl;
- stack[*stack_number] = front_1->next->card; (*stack_number)++;
- stack[*stack_number] = front_2->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_1->next->next == NULL && front_2->next->next == NULL)
- return PLAYERS_OOC;
- else if (front_1->next->next == NULL)
- return PLAYER_1_LOSS;
- else if (front_2->next->next == NULL)
- return PLAYER_2_LOSS;
- else
- {
- if (display != NO_DISPLAY_GAME)
- display_battle(front_1->next->next->card, front_2->next->next->card);
- stack[*stack_number] = front_1->next->next->card; (*stack_number)++;
- stack[*stack_number] = front_2->next->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_1->next->next->card.value > front_2->next->next->card.value)
- return WAR_A_1_WIN;
- else if (front_1->next->next->card.value < front_2->next->next->card.value)
- return WAR_A_2_WIN;
- else
- return war_A(front_1->next->next, front_2->next->next, moves, stack, stack_number,display,game_moves);
- }
- }
- }
- //Funkcja wojny wariant B
- int war_B(struct hand_card* front_1, struct hand_card* front_2, int* moves, struct card* stack, int* stack_number, bool display, int* game_moves, bool* player_1_fueled, bool* player_2_fueled)
- {
- if (front_1 == NULL && front_2 == NULL)
- return PLAYERS_OOC;
- else
- {
- if (display != NO_DISPLAY_GAME)
- display_battle(front_1->card, front_2->card);
- stack[*stack_number] = front_1->card; (*stack_number)++;
- stack[*stack_number] = front_2->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_1->next == NULL && front_2->next == NULL)
- {
- return PLAYERS_OOC;
- }
- else if (front_1->next == NULL && *player_2_fueled == 1)
- return PLAYER_2_LOSS;
- else if (front_2->next == NULL && *player_1_fueled == 1)
- return PLAYER_1_LOSS;
- else if (front_1->next == NULL && *player_1_fueled == 1)
- return PLAYER_1_LOSS;
- else if (front_2->next == NULL && *player_2_fueled == 1)
- return PLAYER_2_LOSS;
- else if (front_1->next == NULL && *player_1_fueled == 0)//gracz 1 zaczyna wojnę z jedną kartą
- {
- if (front_2->next->next != NULL && front_2->next->next->next != NULL && front_2->next->next->next->next != NULL)
- {
- (*player_1_fueled) = 1;
- if (display != NO_DISPLAY_GAME)
- cout << "Gracz 2 zasila gracza 1 czterema kartami" << endl;
- stack[*stack_number] = front_2->next->card; (*stack_number)++;
- stack[*stack_number] = front_2->next->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (display != NO_DISPLAY_GAME)
- display_battle(front_2->next->next->card, front_2->next->next->next->next->card);
- stack[*stack_number] = front_2->next->next->next->card; (*stack_number)++;
- stack[*stack_number] = front_2->next->next->next->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_2->next->next->card.value <= front_2->next->next->next->next->card.value)
- return PLAYER_1_LOSS;
- else
- return PLAYER_1_WAR_B_FUELED_WIN_WITH_1;
- }
- else//Graczowi 2 skończą się karty podczas zasilania
- return PLAYER_1_LOSS;
- }
- else if (front_2->next == NULL && *player_2_fueled == 0)//gracz 2 zaczyna wojnę z jedną kartą
- {
- if (front_1->next->next != NULL && front_1->next->next->next != NULL && front_1->next->next->next->next != NULL)
- {
- (*player_2_fueled) = 1;
- if (display != NO_DISPLAY_GAME)
- cout << "Gracz 1 zasila gracza 2 czterema kartami" << endl;
- stack[*stack_number] = front_1->next->card; (*stack_number)++;
- stack[*stack_number] = front_1->next->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (display != NO_DISPLAY_GAME)
- display_battle(front_1->next->next->card, front_1->next->next->next->next->card);
- stack[*stack_number] = front_1->next->next->next->card; (*stack_number)++;
- stack[*stack_number] = front_1->next->next->next->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_1->next->next->card.value <= front_1->next->next->next->next->card.value)
- return PLAYER_2_LOSS;
- else
- return PLAYER_2_WAR_B_FUELED_WIN_WITH_1;//dodać instrukcję do tego
- }
- else//Graczowi 1 skończą się karty podczas zasilania
- return PLAYER_2_LOSS;
- }
- else
- {
- if (display != NO_DISPLAY_GAME)
- cout << "Gracze dorzucaja karty na stol" << endl;
- stack[*stack_number] = front_1->next->card; (*stack_number)++;
- stack[*stack_number] = front_2->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_1->next->next == NULL && front_2->next->next == NULL)
- return PLAYERS_OOC;
- else if (front_1->next->next == NULL && *player_2_fueled == 1)
- return PLAYER_2_LOSS;
- else if (front_2->next->next == NULL && *player_1_fueled == 1)
- return PLAYER_1_LOSS;
- else if (front_1->next->next == NULL && *player_1_fueled == 1)
- return PLAYER_1_LOSS;
- else if (front_2->next->next == NULL && *player_2_fueled == 1)
- return PLAYER_2_LOSS;
- else if (front_1->next->next == NULL && *player_1_fueled == 0)//Gracz 1 zaczyna wojnę z dwoma kartami; Gracz 2 zasila gracza 1
- {
- if (front_2->next->next->next != NULL && front_2->next->next->next->next != NULL)
- {
- (*player_1_fueled = 1);
- if (display != NO_DISPLAY_GAME)
- display_battle(front_2->next->next->next->card, front_2->next->next->next->next->card);
- stack[*stack_number] = front_2->next->next->next->card; (*stack_number)++;
- stack[*stack_number] = front_2->next->next->next->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_2->next->next->next->card.value <= front_2->next->next->next->next->card.value)
- return PLAYER_1_LOSS;
- else
- return PLAYER_1_WAR_B_FUELED_WIN_WITH_2;//dodać instrukcję do tego
- }
- else
- return PLAYER_1_LOSS;
- }
- else if (front_2->next->next == NULL && *player_2_fueled == 0)//Gracz 2 zaczyna wojnę z dwoma kartami; Gracz 1 zasila gracza 2
- {
- if (front_1->next->next->next != NULL && front_1->next->next->next->next !=NULL)
- {
- (*player_2_fueled = 1);
- if (display != NO_DISPLAY_GAME)
- display_battle(front_1->next->next->next->card, front_1->next->next->next->next->card);
- stack[*stack_number] = front_1->next->next->next->card; (*stack_number)++;
- stack[*stack_number] = front_1->next->next->next->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_1->next->next->next->card.value <= front_1->next->next->next->next->card.value)
- return PLAYER_2_LOSS;
- else
- return PLAYER_2_WAR_B_FUELED_WIN_WITH_2;//dodać instrukcję do tego
- }
- else
- return PLAYER_2_LOSS;
- }
- else
- {
- if (display != NO_DISPLAY_GAME)
- display_battle(front_1->next->next->card, front_2->next->next->card);
- stack[*stack_number] = front_1->next->next->card; (*stack_number)++;
- stack[*stack_number] = front_2->next->next->card; (*stack_number)++;
- (*moves)++;
- (*game_moves)++;
- if (front_1->next->next->card.value > front_2->next->next->card.value)
- return WAR_A_1_WIN;
- else if (front_1->next->next->card.value < front_2->next->next->card.value)
- return WAR_A_2_WIN;
- else
- return war_B(front_1->next->next, front_2->next->next, moves, stack, stack_number, display, game_moves, player_1_fueled, player_2_fueled);
- }
- }
- }
- }
- //Funkcja obsługująca wyniki wojen
- bool result_manager(int result, int stack_number, struct card* stack, struct hand* hand_1, struct hand* hand_2, bool display, int* game_moves, int* A_wins,int* B_wins,int* draws, bool* player_1_fueled, bool* player_2_fueled)
- {
- int i;
- if (result == PLAYERS_OOC)
- {
- if (display != NO_DISPLAY_GAME)
- {
- cout << "Remis" << endl;
- cout << "Liczba ruchow: " << *game_moves << endl;
- }
- (*draws)++;
- free(stack);
- return true;
- }
- else if (result == PLAYER_1_LOSS)
- {
- if (display != NO_DISPLAY_GAME)
- {
- cout << "Wygral gracz Drugi!" << endl;
- cout << "Liczba ruchow: " << *game_moves << endl;
- }
- (*B_wins)++;
- free(stack);
- return true;
- }
- else if (result == PLAYER_2_LOSS)
- {
- if (display != NO_DISPLAY_GAME)
- {
- cout << "Wygral gracz Pierwszy!" << endl;
- cout << "Liczba ruchow: " << *game_moves << endl;
- }
- (*A_wins)++;
- free(stack);
- return true;
- }
- else if (result == WAR_A_1_WIN)//gracz 1 wygrał wojnę
- {
- for (i = 0; i < stack_number; i++)
- {
- if (i % 2 == 0)
- add_card_to_hand(hand_1, stack[i]);
- }
- for (i = 0; i < stack_number; i++)
- {
- if (i % 2 == 1)
- add_card_to_hand(hand_1, stack[i]);
- }
- for (i = 0; i < stack_number / 2; i++)
- remove_card_from_hand(hand_1);
- for (i = 0; i < stack_number / 2; i++)
- remove_card_from_hand(hand_2);
- return false;
- }
- else if (result == WAR_A_2_WIN)//gracz 2 wygrał wojnę
- {
- for (i = 0; i < stack_number; i++)
- {
- if (i % 2 == 1)
- add_card_to_hand(hand_2, stack[i]);
- }
- for (i = 0; i < stack_number; i++)
- {
- if (i % 2 == 0)
- add_card_to_hand(hand_2, stack[i]);
- }
- for (i = 0; i < stack_number / 2; i++)
- remove_card_from_hand(hand_1);
- for (i = 0; i < stack_number / 2; i++)
- remove_card_from_hand(hand_2);
- return false;
- }
- else if (result == PLAYER_1_WAR_B_FUELED_WIN_WITH_1)
- {
- for (i = 0; i < stack_number - 4; i++)
- {
- if (i % 2 == 0)
- add_card_to_hand(hand_1, stack[i]);
- }
- for (i = 0; i < stack_number - 4; i++)
- {
- if (i % 2 == 1)
- add_card_to_hand(hand_1, stack[i]);
- }
- for (i = stack_number - 4; i < stack_number; i++)
- add_card_to_hand(hand_1, stack[i]);
- for (i = 0; i < (stack_number - 4) / 2; i++)
- remove_card_from_hand(hand_1);
- for (i = 0; i < ((stack_number - 4) / 2) + 4; i++)
- remove_card_from_hand(hand_2);
- *player_1_fueled = 0;
- return false;
- }
- else if (result == PLAYER_2_WAR_B_FUELED_WIN_WITH_1)
- {
- for (i = 0; i < stack_number - 4; i++)
- {
- if (i % 2 == 1)
- add_card_to_hand(hand_2, stack[i]);
- }
- for (i = 0; i < stack_number - 4; i++)
- {
- if (i % 2 == 0)
- add_card_to_hand(hand_2, stack[i]);
- }
- for (i = (stack_number - 4); i < stack_number; i++)
- add_card_to_hand(hand_2, stack[i]);
- for (i = 0; i < (stack_number - 4) / 2; i++)
- remove_card_from_hand(hand_2);
- for (i = 0; i < ((stack_number - 4) / 2) + 4; i++)
- remove_card_from_hand(hand_1);
- *player_2_fueled = 0;
- return false;
- }
- else if (result == PLAYER_1_WAR_B_FUELED_WIN_WITH_2)
- {
- for (i = 0; i < stack_number - 2; i++)
- {
- if (i % 2 == 0)
- add_card_to_hand(hand_1, stack[i]);
- }
- for (i = 0; i < stack_number - 2; i++)
- {
- if (i % 2 == 1)
- add_card_to_hand(hand_1, stack[i]);
- }
- for (i = (stack_number - 2); i < stack_number; i++)
- add_card_to_hand(hand_1, stack[i]);
- for (i = 0; i < (stack_number - 2) / 2; i++)
- remove_card_from_hand(hand_1);
- for (i = 0; i < ((stack_number - 2) / 2) + 2; i++)
- remove_card_from_hand(hand_2);
- *player_1_fueled = 0;
- return false;
- }
- else if (result == PLAYER_2_WAR_B_FUELED_WIN_WITH_2)
- {
- for (i = 0; i < stack_number - 2; i++)
- {
- if (i % 2 == 1)
- add_card_to_hand(hand_2, stack[i]);
- }
- for (i = 0; i < stack_number - 2; i++)
- {
- if (i % 2 == 0)
- add_card_to_hand(hand_2, stack[i]);
- }
- for (i = (stack_number - 2); i < stack_number; i++)
- add_card_to_hand(hand_2, stack[i]);
- for (i = 0; i < (stack_number - 2) / 2; i++)
- remove_card_from_hand(hand_2);
- for (i = 0; i < ((stack_number - 2) / 2) + 2; i++)
- remove_card_from_hand(hand_1);
- *player_2_fueled = 0;
- return false;
- }
- }
- //Funkcja prowadzaca gre; wariant A i B
- void game_A(struct hand* hand_1, struct hand* hand_2, int deck_size, int* moves,int* A_wins, int* B_wins,int* draws, bool display , bool mode)
- {
- int i, game_moves = 0;
- struct card* stack;
- stack = (struct card*) malloc(104 * sizeof(struct card));
- bool player_1_fueled = 0;
- bool player_2_fueled = 0;
- while ((*hand_1).front != NULL && (*hand_2).front != NULL)
- {
- if (game_moves >= ENDLESS_GAME)
- {
- if (display != NO_DISPLAY_GAME)
- cout << "Nieskonczona gra - Remis" << endl;
- (*draws)++;
- free(stack);
- return;
- }
- int stack_number = 0;
- if ((*hand_1).front->card.value > (*hand_2).front->card.value)//Jeżeli gracz 1 wygrywa bitwę
- {
- if (display != NO_DISPLAY_GAME)
- display_battle((*hand_1).front->card, (*hand_2).front->card);
- resolve_battle(hand_1, hand_2);
- (*moves)++;
- game_moves++;
- }
- else if ((*hand_1).front->card.value < (*hand_2).front->card.value)//Jeżeli gracz 2 wygrywa bitwę
- {
- if (display != NO_DISPLAY_GAME)
- display_battle((*hand_1).front->card, (*hand_2).front->card);
- resolve_battle(hand_2, hand_1);
- (*moves)++;
- game_moves++;
- }
- else
- {
- int result;
- if (mode == MODE_A)
- result = war_A(hand_1->front, hand_2->front, moves, stack, &stack_number, display, &game_moves);//Jeżeli dochodzi do wojny 'A'
- else
- result = war_B(hand_1->front, hand_2->front, moves, stack, &stack_number, display, &game_moves, &player_1_fueled, &player_2_fueled);//Jeżeli dochodzi do wojny 'B'
- if (result_manager(result, stack_number, stack, hand_1, hand_2, display, &game_moves, A_wins, B_wins, draws, &player_1_fueled, &player_2_fueled) == END_GAME)
- return;
- }
- }
- if ((*hand_1).front == NULL)
- {
- if (display != NO_DISPLAY_GAME)
- {
- cout << "Wygral gracz Drugi!" << endl;
- cout << "Liczba ruchow: " << game_moves << endl;
- }
- (*B_wins)++;
- free(stack);
- return;
- }
- else if ((*hand_2).front == NULL)
- {
- if (display != NO_DISPLAY_GAME)
- {
- cout << "Wygral gracz Pierwszy!" << endl;
- cout << "Liczba ruchow: " << game_moves << endl;
- }
- (*A_wins)++;
- free(stack);
- return;
- }
- }
- int main()
- {
- //Zmienne do wyników
- int score_A_wins, score_B_wins, score_draws, hand_1_ranking, hand_2_ranking;
- int* score_A_wins_ptr = &score_A_wins;
- int* score_B_wins_ptr = &score_B_wins;
- int* score_draws_ptr = &score_draws;
- bool display;
- int move_counter;
- int* move_counter_ptr = &move_counter;
- struct card* deck_ptr;
- struct hand hand_1 = { NULL,NULL };
- struct hand hand_2 = { NULL,NULL };
- struct hand* hand_1_ptr = &hand_1;
- struct hand* hand_2_ptr = &hand_2;
- struct ranks ranks_wins = { 0,0,0 };
- srand(time(NULL));
- int deck_size;
- int k;
- char choice = 0;
- while (choice != 'Q')
- {
- cout << "----------MENU----------" << endl;//wybór rodzaju wojny
- cout << "1. Wojna." << endl;
- cout << "2. Madra wojna." << endl;
- cout << "Q. Wyjdz z programu" << endl;
- cin >> choice;
- switch (choice)
- {
- case '1':
- {
- cout << "A. Wariant A." << endl;//wybór wariantu gry
- cout << "B. Wariant B." << endl;
- cin >> choice;
- switch (choice)
- {
- case 'A':
- {
- cout << "1. Demonstracja gry." << endl;//wybór demonstracji lub symulacji
- cout << "2. Symulacja gier." << endl;
- cin >> choice;
- switch (choice)
- {
- case '1'://Demonstracja gry
- {
- cout << "Podaj rozmiar talii(Karty od Asa w dol, ilosc kart podzielna przez 4" << endl;
- cin >> deck_size;
- if (deck_size % 4 == 0 && deck_size<=52 && deck_size>0)
- {
- display = DISPLAY_GAME;
- score_A_wins = score_B_wins = score_draws = move_counter = hand_1_ranking = hand_2_ranking = 0;
- deck_ptr=create_deck(deck_size);
- display_deck(deck_ptr, deck_size);
- hand_1.front = NULL, hand_1.back = NULL;
- hand_2.front = NULL, hand_2.back = NULL;
- deal_cards(hand_1_ptr, hand_2_ptr, deck_ptr, deck_size);
- cout << "Reka gracza 1:" << endl;
- for (k = 0; k < deck_size / 2; k++)
- {
- display_card(deck_ptr[k]);
- cout << " ";
- }
- cout << endl;
- cout << "Reka gracza 2:" << endl;
- for (k; k < deck_size; k++)
- {
- display_card(deck_ptr[k]);
- cout << " ";
- }
- cout << endl;
- game_A(hand_1_ptr, hand_2_ptr, deck_size, move_counter_ptr, score_A_wins_ptr, score_B_wins_ptr, score_draws_ptr, display, MODE_A);
- }
- else
- cout << "Niepoprawny rozmiar talii" << endl;
- break;
- }
- case '2'://symulacja gier
- {
- cout << "Podaj rozmiar talii(Karty od Asa w dol, ilosc kart podzielna przez 4" << endl;
- cin >> deck_size;
- if (deck_size % 4 == 0 && deck_size <= 52 && deck_size>0)
- {
- int simulation, a;
- display = NO_DISPLAY_GAME;
- score_A_wins = score_B_wins = score_draws = move_counter = 0;
- struct ranks ranks_wins = { 0,0,0 };
- cout << "Podaj ilosc gier, ktore chcesz symulowac" << endl;
- cin >> simulation;
- for (a = 0; a < simulation; a++)
- {
- deck_ptr = create_deck(deck_size);
- hand_1.front = NULL, hand_1.back = NULL;
- hand_2.front = NULL, hand_2.back = NULL;
- hand_1_ranking = hand_2_ranking = 0;
- deal_cards(hand_1_ptr, hand_2_ptr, deck_ptr, deck_size);
- count_hand_ranking(deck_ptr, deck_size, &hand_1_ranking, &hand_2_ranking);
- game_A(hand_1_ptr, hand_2_ptr, deck_size, move_counter_ptr, score_A_wins_ptr, score_B_wins_ptr, score_draws_ptr, display, MODE_A);
- }
- display_stats(score_A_wins, score_B_wins, score_draws, move_counter, simulation, ranks_wins);
- }
- else
- cout << "Niepoprawny rozmiar talii" << endl;
- break;
- }
- }
- break;
- }
- case 'B':
- {
- cout << "1. Demonstracja gry." << endl;//wybór demonstracji lub symulacji
- cout << "2. Symulacja gier." << endl;
- cin >> choice;
- switch (choice)
- {
- case '1':
- {
- cout << "Podaj rozmiar talii(Karty od Asa w dol, ilosc kart podzielna przez 4" << endl;
- cin >> deck_size;
- if (deck_size % 4 == 0 && deck_size <= 52 && deck_size > 0)
- {
- display = DISPLAY_GAME;
- score_A_wins = score_B_wins = score_draws = move_counter = 0;
- deck_ptr = create_deck(deck_size);
- display_deck(deck_ptr, deck_size);
- hand_1.front = NULL, hand_1.back = NULL;
- hand_2.front = NULL, hand_2.back = NULL;
- deal_cards(hand_1_ptr, hand_2_ptr, deck_ptr, deck_size);
- cout << "Reka gracza 1:" << endl;
- for (k = 0; k < deck_size / 2; k++)
- {
- display_card(deck_ptr[k]);
- cout << " ";
- }
- cout << endl;
- cout << "Reka gracza 2:" << endl;
- for (k; k < deck_size; k++)
- {
- display_card(deck_ptr[k]);
- cout << " ";
- }
- cout << endl;
- game_A(hand_1_ptr, hand_2_ptr, deck_size, move_counter_ptr, score_A_wins_ptr, score_B_wins_ptr, score_draws_ptr, display, MODE_B);
- }
- else
- {
- cout << "Niepoprawny rozmiar talii" << endl;
- }
- break;
- }
- case '2':
- {
- cout << "Podaj rozmiar talii(Karty od Asa w dol, ilosc kart podzielna przez 4" << endl;
- cin >> deck_size;
- if (deck_size % 4 == 0 && deck_size <= 52 && deck_size > 0)
- {
- int simulation, a;
- display = NO_DISPLAY_GAME;
- score_A_wins = score_B_wins = score_draws = move_counter = 0;
- struct ranks ranks_wins = { 0,0,0 };
- cout << "Podaj ilosc gier, ktore chcesz symulowac" << endl;
- cin >> simulation;
- for (a = 0; a < simulation; a++)
- {
- deck_ptr = create_deck(deck_size);
- hand_1.front = NULL, hand_1.back = NULL;
- hand_2.front = NULL, hand_2.back = NULL;
- hand_1_ranking = hand_2_ranking = 0;
- deal_cards(hand_1_ptr, hand_2_ptr, deck_ptr, deck_size);
- count_hand_ranking(deck_ptr, deck_size, &hand_1_ranking, &hand_2_ranking);
- game_A(hand_1_ptr, hand_2_ptr, deck_size, move_counter_ptr, score_A_wins_ptr, score_B_wins_ptr, score_draws_ptr, display, MODE_B);
- }
- display_stats(score_A_wins, score_B_wins, score_draws, move_counter, simulation, ranks_wins);
- }
- else
- {
- cout << "Niepoprawny rozmiar talii" << endl;
- }
- break;
- }
- }
- break;
- }
- default:
- {
- break;
- }
- }
- break;
- }
- case '2':
- {
- break;
- }
- default:
- {
- break;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement