Esempio n. 1
0
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;
}
Esempio n. 2
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");
}
Esempio n. 3
0
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;
}