int main(void) { printf("\npoklib basic test (testing dylib):"); POKLIB_CARD testHand[5]; POKLIB_CARDSET deck; int classCounts[10]; int i,j,k,l,m; int eq; for (i = 0; i < 11; i++) classCounts[i] = 0; printf("\ninitializing deck."); deck = getDeck(); printf("\nshuffling."); shuffle(deck,52,500); printf("\ndeck: \n"); printCardSet(deck,52); printf("\niterating all possible 5 card hands."); for (i = 0; i < 48; i++) { testHand[0] = deck[i]; for (j = i + 1; j < 49; j++) { testHand[1] = deck[j]; for (k = j + 1; k < 50; k++) { testHand[2] = deck[k]; for (l = k + 1; l < 51; l++) { testHand[3] = deck[l]; for (m = l + 1; m < 52; m++) { testHand[4] = deck[m]; eq = getGroupForHand(testHand); classCounts[eq]++; } } } } } printf("\ndone."); printf("\n"); printf("\nHand Type:\t\t\tCount:"); printf("\n=================================================="); for (i = 0; i < 10; i++) printf("\n%-17s(%d)\t\t\t%-10d",groupNames[i],i,classCounts[i]); printf("\n\n"); printf("sorting deck."); sort(deck,52); printf("\n"); printCardSet(deck,52); printf("\n"); free(deck); return 0; }
void testState() { testMove(); state s = newStartingState(0b00010010); if(getPScores(s, PLAYER_ONE) != 0) {fail("getPScores() failed in State module\n");} if(getPScores(s, PLAYER_TWO) != 0) {fail("getPScores() failed in State module\n");} s = addPScore(s, PLAYER_ONE, 16); s = addPScore(s, PLAYER_TWO, 52); if(getPScores(s, PLAYER_ONE) != 16) {fail("addPScore() failed in State module\n");} if(getPScores(s, PLAYER_TWO) != 52) {fail("addPScore() failed in State module\n");} card firstDealt = getNextCard(s); if(numCardsLeft(getDeck(s) & DECK) != 9) {fail("getNextCard() failed in State module\n");} s = removeNextCard(s, firstDealt); if(!equal(s.deckOrder[0], firstDealt)) {fail("getNextCard() failed in State module\n");} if(numCardsLeft(getDeck(s) & DECK) != 8) {fail("removeNextCard() failed in State module\n");} if(((getDeck(s) & ~DECK) >> 28) != 1) {fail("removeNextCard() failed in State module\n");} pile p = newCardRankSuit(KING, CLUBS) | newCardRankSuit(KING, HEARTS) | newCardRankSuit(ACE, CLUBS) | newCardRankSuit(JACK, DIAMONDS); if(numCardsLeft(getPHand(s, PLAYER_ONE)) != 5) {fail("getPHand() failed in State module\n");} s = setPHand(s, PLAYER_ONE, p); if(numCardsLeft(getPHand(s, PLAYER_ONE)) != 4) {fail("setPHand() failed in State module\n");} s = addCardPHand(s, PLAYER_ONE, newCardRankSuit(QUEEN, SPADES)); if(!contains(getPHand(s, PLAYER_ONE), newCardRankSuit(JACK, DIAMONDS))) {fail("addCardPHand() failed in State module\n");} if(!contains(getPHand(s, PLAYER_ONE), newCardRankSuit(QUEEN, SPADES))) {fail("addCardPHand() failed in State module\n");} if(numCardsLeft(getPHand(s, PLAYER_ONE)) != 5) {fail("addCardPHand() failed in State module\n");} s = removePHandCard(s, PLAYER_ONE, newCardRankSuit(KING, HEARTS)); if(!contains(getPHand(s, PLAYER_ONE), newCardRankSuit(JACK, DIAMONDS))) {fail("removePHandCard() failed in State module\n");} if(!contains(getPHand(s, PLAYER_ONE), newCardRankSuit(QUEEN, SPADES))) {fail("removePHandCard() failed in State module\n");} if(!contains(getPHand(s, PLAYER_ONE), newCardRankSuit(KING, CLUBS))) {fail("removePHandCard() failed in State module\n");} if(!contains(getPHand(s, PLAYER_ONE), newCardRankSuit(ACE, CLUBS))) {fail("removePHandCard() failed in State module\n");} if(contains(getPHand(s, PLAYER_ONE), newCardRankSuit(KING, HEARTS))) {fail("removePHandCard() failed in State module\n");} if(numCardsLeft(getPHand(s, PLAYER_ONE)) != 4) {fail("removePHandCard() failed in State module\n");} if(getPType(s, PLAYER_ONE) != MINIMAX_HIGHEST_CLOSE) {fail("getPType() failed in State module\n");} if(getPType(s, PLAYER_TWO) != MINIMAX_LOWEST_CLOSE) {fail("getPType() failed in State module\n");} s = switchPTypes(s); if(getPType(s, PLAYER_ONE) != MINIMAX_LOWEST_CLOSE) {fail("switchPTypes() failed in State module\n");} if(getPType(s, PLAYER_TWO) != MINIMAX_HIGHEST_CLOSE) {fail("switchPTypes() failed in State module\n");} if(getPCurrGamePoints(s, PLAYER_ONE) != 0) {fail("getPCurrGamePoints() failed in State module\n");} if(getPCurrGamePoints(s, PLAYER_TWO) != 0) {fail("getPCurrGamePoints() failed in State module\n");} s = addGamePoints(s, PLAYER_ONE, 4); if(getPCurrGamePoints(s, PLAYER_ONE) != 4) {fail("addGamePoints() failed in State module\n");} if(getPCurrGamePoints(s, PLAYER_TWO) != 0) {fail("addGamePoints() failed in State module\n");} if(numCardsLeft(getPRevCards(s, PLAYER_ONE)) != 0) {fail("getPRevCards() failed in State module\n");} if(numCardsLeft(getPRevCards(s, PLAYER_TWO)) != 0) {fail("getPRevCards() failed in State module\n");} s = addCardPRevCards(s, PLAYER_TWO, newCardRankSuit(JACK, HEARTS)); if(numCardsLeft(getPRevCards(s, PLAYER_ONE)) != 0) {fail("addCardPRevCards() failed in State module\n");} if(numCardsLeft(getPRevCards(s, PLAYER_TWO)) != 1) {fail("addCardPRevCards() failed in State module\n");} s = removePRevCard(s, PLAYER_TWO, newCardRankSuit(QUEEN, HEARTS)); s = removePRevCard(s, PLAYER_TWO, newCardRankSuit(JACK, DIAMONDS)); s = removePRevCard(s, PLAYER_ONE, newCardRankSuit(JACK, DIAMONDS)); if(numCardsLeft(getPRevCards(s, PLAYER_ONE)) != 0) {fail("removePRevCard() failed in State module\n");} if(numCardsLeft(getPRevCards(s, PLAYER_TWO)) != 1) {fail("removePRevCard() failed in State module\n");} s = removePRevCard(s, PLAYER_TWO, newCardRankSuit(JACK, HEARTS)); if(numCardsLeft(getPRevCards(s, PLAYER_TWO)) != 0) {fail("removePRevCard() failed in State module\n");} if(getTrumpSwapped(s)) {fail("getTrumpSwapped() failed in State module\n");} s = setTrumpSwapped(s); if(!getTrumpSwapped(s)) {fail("setTrumpSwapped() failed in State module\n");} if(getP1ClosedTalon(s)) {fail("newStartingState() with getP1ClosedTalon() failed in State module\n");} s = setPClosedTalon(s, PLAYER_ONE); if(!getP1ClosedTalon(s)) {fail("setPClosedTalon() 1failed in State module\n");} s = setPClosedTalon(s, PLAYER_TWO); if(getP1ClosedTalon(s)) {fail("setPClosedTalon() 2failed in State module\n");} if(getDealEnded(s)) {fail("newStartingState() failed in State module\n");} s = setDealEnded(s); if(!getDealEnded(s)) {fail("setDealEnded() failed in State module\n");} bool p1Leading = getP1PlayedFirst(s); if(p1Leading) { if(!getP1LeadTrick(s)) {fail("getP1LeadTrick() failed in State module\n");} s = setP1LeadTrick(s, false); if(getP1LeadTrick(s)) {fail("setP1LeadTrick() failed in State module\n");} } else { if(getP1LeadTrick(s)) {fail("getP1LeadTrick() failed in State module\n");} s = setP1LeadTrick(s, true); if(!getP1LeadTrick(s)) {fail("setP1LeadTrick() failed in State module\n");} } if(numCardsLeft(getAllUnseenCards(s, PLAYER_ONE)) != 13) {fail("getAllUnseenCards() 1failed in State module\n");} s = updatePPossGamePoints(s, PLAYER_ONE); if(getPPossGamePoints(s, PLAYER_ONE) != 3) {fail("updatePPossGamePoints() failed in State module\n");} if(getPPossGamePoints(s, PLAYER_TWO) != 3) {fail("updatePPossGamePoints() failed in State module\n");} s = setPWonATrick(s, PLAYER_TWO); s = updatePPossGamePoints(s, PLAYER_ONE); if(getPPossGamePoints(s, PLAYER_ONE) != 4) {fail("updatePPossGamePoints() failed in State module\n");} if(getPPossGamePoints(s, PLAYER_TWO) != 5) {fail("updatePPossGamePoints() failed in State module\n");} if(strcmp(strPlayerNum(PLAYER_ONE), "Player One") != 0) {fail("strPlayerNum() failed in State module\n");} if(strcmp(strPlayerNum(PLAYER_TWO), "Player Two") != 0) {fail("strPlayerNum() failed in State module\n");} if(strcmp(strPType(MINIMAX_HIGHEST_CLOSE), "Minimax (highest close)") != 0) {fail("strPType() failed in State module\n");} puts("State Module OK\n"); }
int Game::resolveChoice(int choice, GamePlayer& player) { static int index = 0; //index for players current hand switch (choice) { case PLAY_OPTIONS::HIT: { //add card from deck to players hand std::cout << "Player chose to hit to hand of index:" << index << std::endl; player.hit(getDeck().removeLastCard(), index); //should just add card, nothing else! if (DEBUGGING) { std::cout << "DEBUG: Game.resolvechoice: HIT case: After hitting, hand is: " << player.getHand(index); } player.displayHand(); int result = player.getHand(index).calculate(); if (result < 21) { std::cout << player.getName() << " can make more plays: " << std::endl; resolveChoice(player.buildPlayOptionForPlayerAndReturnChoice(), player); } else if (result > 21) { std::cout << player.getName() << " busted!" << std::endl; player.getHand(index).setBustedFlag(true); } else if (result == 21) { //soft 21 std::cout << player.getName() << " has a soft 21! Player will be set to stand!" << std::endl; player.getHand(index).setStandFlag(true); } else { std::cout << "UNKNOWN/FORGOTTEN POSSIBILITY GOES HERE" <<std::endl; } if (DEBUGGING) { std::cout << "END OF PLAY_OPTIONS::HIT" << std::endl; } break; } case PLAY_OPTIONS::STAND: std::cout << "Player chose to stand with " << player.getHand(index) << std::endl; //pause players session player.getHand(index).setStandFlag(true); calculatePlayerResult(player, index); player.stand(); //pause player session? or use hands status to determine session break; case PLAY_OPTIONS::DOUBLE_DOWN: //bet equivalent of another bet and pause players session std::cout << "Player chose to double down." << std::endl; player.doubleDown(getDeck().removeLastCard(), index); //adds a card if there is enough money, removes money = to bet amount std::cout << player.getName() << "'s hand is :" << std::endl << player.getHand(index) << std::endl; if (calculatePlayerResult(player, index) > 21) { player.getHand().setBustedFlag(true); } player.getHand(index).setDoubledFlag(true); player.getHand(index).setStandFlag(true); //Cannot get any new cards after a double //return choice; break; case PLAY_OPTIONS::SPLIT: std::cout << "Player chose to split" << std::endl; for (int i = 0; i < player.getHands().size(); i++) { player.split(i); // player.getHand(i).addCard(_deck.removeLastCard()); //good player.getHand(i).setSplitFlag(true); player.getHand(i).showHandFlags(player.getHand(i)); std::cout << "Players hands after splitting is: " << std::endl; std::cout << player.getHand(i) << " at index " << i << std::endl; std::cout << player.getName() << " has $" << player.getMoney() << " after splitting." << std::endl; index = i; const int EMPTY_CHOICE = 99; int choice = EMPTY_CHOICE; if (choice == EMPTY_CHOICE) { choice = player.buildPlayOptionForPlayerAndReturnChoice(); } resolveChoice(choice, player); } break; default: std::cout << "Unknown error in game.resolveChoice switch(choice)...exiting"; exit(9); break; } if (DEBUGGING) { std::cout << "Game::resolveChoice: returning choice " << choice << std::endl; } return choice; }