void test_round_disitrbuteCard() { struct Round *round = round_createRound(MAX_CARDS); struct Deck *deck = deck_createDeck(MAX_GAME_PLAYERS); struct Player *players[MAX_GAME_PLAYERS]; cut_assert_equal_int(ROUND_NULL, round_distributeCard(NULL, deck)); cut_assert_equal_int(DECK_NULL, round_distributeCard(round, NULL)); cut_assert_equal_int(INSUFFICIENT_PLAYERS, round_distributeCard(round, deck)); for (int i = 0; i < MAX_GAME_PLAYERS; i++) { players[i] = player_createPlayer("A", i); round_addPlayer(round, players[i]); } for (int i = 0; i < MAX_CARDS; i++) { cut_assert_equal_int(FUNCTIOON_NO_ERROR, round_distributeCard(round, deck)); cut_assert_equal_int(DECK_SIZE - (i + 1) * MAX_GAME_PLAYERS, deck_getDeckSize(deck)); for (int j = 0; j < MAX_GAME_PLAYERS; j++) { int cardsNumber = 0; for (int k = 0; k < MAX_CARDS; k++) if (round->players[j]->hand[k] != NULL) cardsNumber++; cut_assert_equal_int(i + 1, cardsNumber); } } for (int i = 0; i < MAX_GAME_PLAYERS; i++) player_deletePlayer(&players[i]); round_deleteRound(&round); deck_deleteDeck(&deck); }
/** * @brief Starts the game, connecting libraries and UI */ int cruceGameLogic() { setlocale(LC_ALL, ""); initscr(); cbreak(); if (has_colors() == FALSE) { endwin(); printf("Your terminal does not support colors!"); return 0; } start_color(); init_pair(1, COLOR_RED, COLOR_BLACK); init_pair(2, COLOR_GREEN, COLOR_BLACK); init_pair(3, COLOR_YELLOW, COLOR_BLACK); init_pair(4, COLOR_BLUE, COLOR_BLACK); init_pair(5, COLOR_MAGENTA, COLOR_BLACK); init_pair(7, COLOR_WHITE, COLOR_BLACK); refresh(); welcomeMessage(); int limitScore = getScoreLimit(); int noOfPlayers = getNoOfPlayers(); struct Game *game = game_createGame(limitScore); for (int i = 0; i < noOfPlayers; i++) { int err; while ((err = game_addPlayer(newPlayer(i + 1), game)) == DUPLICATE_NAME) printw("The player's name have to be unique\n"); if (err != 0) printw("ERROR: game_addPlayer() %d\n", err); } formTeams(game); for (int i = 0; !game_winningTeam(game); i++) { game_arrangePlayersRound(game, i % MAX_GAME_PLAYERS); struct Deck *deck = deck_createDeck(); deck_deckShuffle(deck); round_distributeDeck(deck, game->round); clear(); refresh(); for (int i = 0; i < game->numberPlayers; i++) { getBid(game, i); clear(); refresh(); } displayBids(game, game->numberPlayers); refresh(); sleep(2); clear(); refresh(); struct Player *bidWinner = round_getBidWinner(game->round); int first = round_findPlayerIndexRound(bidWinner, game->round); for (int i = 0; team_hasCards(game->players[0]); i++) { round_arrangePlayersHand(game->round, first); for (int j = 0; j < game->numberPlayers; j++) { WINDOW *scoreTableWindow = newwin(11, 49, 0, 30); #ifdef BORDERS box(scoreTableWindow, 0, 0); #endif printScore(game, game->round, scoreTableWindow); wrefresh(scoreTableWindow); delwin(scoreTableWindow); displayCardsAndPickCard(game, j); clear(); refresh(); } struct Player *handWinner = round_handWinner(game->round->hands[i], game->round); first = round_findPlayerIndexRound(handWinner, game->round); if (deck_cardsNumber(deck) > 0) round_distributeCard(deck, game->round); } int oldScore[MAX_GAME_PLAYERS]; for(int i = 0; i < MAX_GAME_TEAMS; i++) { if(game->teams[i] != NULL) { oldScore[i] = game->teams[i]->score; } } game_updateScore(game, bidWinner); printRoundTerminationMessage(game, oldScore); getch(); deck_deleteDeck(&deck); round_deleteRound(&game->round); } clear(); refresh(); gameEndingMessage(game_winningTeam(game)); for (int i = 0; i < MAX_GAME_PLAYERS; i++) if (game->players[i]) team_deletePlayer(&game->players[i]); for (int i = 0; i < MAX_GAME_TEAMS; i++) if (game->teams[i]) team_deleteTeam(&game->teams[i]); game_deleteGame(&game); getch(); endwin(); return EXIT_SUCCESS; }