From da1a7180edee0f108d15314e493faa2e9e067095 Mon Sep 17 00:00:00 2001 From: Kyle K <kylek389@gmail.com> Date: Sat, 29 Jan 2011 19:46:29 -0600 Subject: do more error checking --- card.cpp | 6 ++++++ game.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++--------- game.h | 1 - main.cpp | 6 +++++- opponent.cpp | 8 +++++++- opponent.h | 2 ++ 6 files changed, 73 insertions(+), 12 deletions(-) diff --git a/card.cpp b/card.cpp index 0f4fc3f..ffcffbd 100644 --- a/card.cpp +++ b/card.cpp @@ -101,6 +101,12 @@ enum Suit Card::getSuit(void) void Card::sortCards(Card **cards) { + if (cards == NULL) + { + PRINT_COLOR(ANSI_COLOR_RED, "\nsortCards(): cards parameter is NULL!\n"); + return; + } + /* reverse bubble sort */ int i, j; Card *tmp; diff --git a/game.cpp b/game.cpp index 385ff2f..8d91427 100644 --- a/game.cpp +++ b/game.cpp @@ -119,6 +119,12 @@ void Game::repeatGame(bool *quit) int Game::howManyCardsOfSameSuit(Card **cards) { + if (cards == NULL) + { + PRINT_COLOR(ANSI_COLOR_RED, "\nhowManyCardsOfSameSuit(): cards parameter is NULL!\n"); + return -1; + } + char c, l; l = cards[0]->getType()[1]; @@ -135,6 +141,12 @@ int Game::howManyCardsOfSameSuit(Card **cards) bool Game::pairOrBetter(Card **cards) { + if (cards == NULL) + { + PRINT_COLOR(ANSI_COLOR_RED, "\npairOrBetter(): cards parameter is NULL!\n"); + return false; + } + char c1, c2; int ret = 0; @@ -160,6 +172,12 @@ bool Game::pairOrBetter(Card **cards) /* returns max number of same cards, returns 0 when all cards are different */ int Game::numOfSameCards(Card **cards) { + if (cards == NULL) + { + PRINT_COLOR(ANSI_COLOR_RED, "\nnumOfSameCards(): cards parameter is NULL!\n"); + return -1; + } + char c1, c2; int same = 0; int max = 0; @@ -193,17 +211,24 @@ int Game::numOfSameCards(Card **cards) struct countAndSuit Game::numOfSameSuit(Card **cards) { - int max = 0; - enum Suit tmpSuit = Undef; - - struct countAndSuit same[4] = + struct countAndSuit same[5] = { { Clubs, 0}, { Diamond, 0 }, { Hearts, 0 }, { Spades, 0 }, + { Undef, -1 }, }; + if (cards == NULL) + { + PRINT_COLOR(ANSI_COLOR_RED, "\nnumOfSameSuit(): cards parameter is NULL!\n"); + return same[4]; + } + + int max = 0; + enum Suit tmpSuit = Undef; + /* go through all cards and count how many there is of each suit */ int i; for (i = 0; i < 5; i++) @@ -243,6 +268,12 @@ struct countAndSuit Game::numOfSameSuit(Card **cards) bool Game::doWeHaveAnAce(Card **cards) { + if (cards == NULL) + { + PRINT_COLOR(ANSI_COLOR_RED, "\ndoWeHaveAnAce(): cards parameter is NULL!\n"); + return false; + } + char c; int i; @@ -263,14 +294,19 @@ void Game::discardAndDraw(Card **cards, int amount, int offset) PRINT_COLOR(ANSI_COLOR_RED, "amount of cards to be discarded is out of bounds!\n"); return; } + else if (cards == NULL) + { + PRINT_COLOR(ANSI_COLOR_RED, "\ndiscardAndDraw(): cards parameter is NULL!\n"); + return; + } int i; /* discard cards starting from offset */ for (i = 0; i < amount; i++) { #ifdef DEBUG - cout << "debug: discarding card " << i+1 << ": " << cards[offset+i]->getType() - << " at cards[" << offset << "]" << endl; + cout << ANSI_COLOR_CYAN << "debug: discarding card " << i+1 << " \"" << cards[offset+i]->getType() + << "\" at cards[" << offset+i << "]" << endl << ANSI_COLOR_RESET; #endif putCardToDiscardPile(cards[offset+i]); } @@ -280,14 +316,20 @@ void Game::discardAndDraw(Card **cards, int amount, int offset) { cards[offset+i] = PopCardFromDeck(); #ifdef DEBUG - cout << "debug: drawing card " << i+1 << ": " << cards[offset+i]->getType() - << " at cards[" << offset << "]" << endl; + cout << ANSI_COLOR_CYAN << "debug: drawing card " << i+1 << " \"" << cards[offset+i]->getType() + << "\" into cards[" << offset+i << "]" << endl << ANSI_COLOR_RESET; #endif } } void Game::opponentAI(Card **cards) { + if (cards == NULL) + { + PRINT_COLOR(ANSI_COLOR_RED, "\ngetopponentAI(): cards parameter is NULL!\n"); + return; + } + struct countAndSuit tmp = numOfSameSuit(cards); if (pairOrBetter(cards)) @@ -316,8 +358,8 @@ void Game::opponentAI(Card **cards) if (cards[i]->getSuit() != tmp.whatSuit) break; } - /* no i should be the index of card that we want to discard */ + /* no i should be the index of card that we want to discard */ discardAndDraw(cards, 1, i); return; @@ -337,5 +379,7 @@ void Game::opponentAI(Card **cards) /* discard 3 cards */ discardAndDraw(cards, 3, 2); } + + PRINT_COLOR(ANSI_COLOR_RED, "\nopponentAI(): cards did not match any of the criterias!\n"); } diff --git a/game.h b/game.h index cb1c528..ec8e8e7 100644 --- a/game.h +++ b/game.h @@ -46,7 +46,6 @@ class Game : virtual public CardPile, public User, public Opponent void opponentAI(Card **); /* variables */ - int numOfOpponents; int handsPlayed; int handsWon; diff --git a/main.cpp b/main.cpp index a01b1fb..1dee3e1 100644 --- a/main.cpp +++ b/main.cpp @@ -62,7 +62,11 @@ int main(int argc, char *argv[]) cout << "Opponents' cards:" << endl; pokerGame->printOpponentCards(pokerGame->numOfOpponents); - //pokerGame->opponentAI +#ifdef DEBUG + cout << "Computer's AI" << endl; + pokerGame->opponentAI(pokerGame->getOpponentsCards(1)); + pokerGame->printOpponentCards(pokerGame->numOfOpponents); +#endif #ifdef DEBUG PRINT_COLOR(ANSI_COLOR_CYAN, "\ndebug: deck after being delt to opponents and user\n"); diff --git a/opponent.cpp b/opponent.cpp index 8c23478..7f8a14b 100644 --- a/opponent.cpp +++ b/opponent.cpp @@ -44,6 +44,12 @@ void Opponent::sortOpponentCards(int opponentsAmount) Card **Opponent::getOpponentsCards(int whichOpponent) { - return opponentCards[whichOpponent]; + if (whichOpponent < 1 || whichOpponent > 3) + { + PRINT_COLOR(ANSI_COLOR_RED, "\ngetOpponentsCards(): opponent number out of bounds!\n"); + return NULL; + } + + return opponentCards[whichOpponent-1]; } diff --git a/opponent.h b/opponent.h index 71dc792..5376ecf 100644 --- a/opponent.h +++ b/opponent.h @@ -17,6 +17,8 @@ class Opponent : virtual public CardPile void printOpponentCards(int); void sortOpponentCards(int); Card **getOpponentsCards(int); + + int numOfOpponents; }; #endif -- cgit v1.2.3