summaryrefslogtreecommitdiffstats
path: root/main.cpp
blob: 049a69d7a6e0e876ef10cfc3edcd007fe0db1fc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* Kamil Kaminski
 * NetID: kkamin8
 *
 * CS340
 * Project 1, Poker Game
 *
 *
 */

#include "game.h"

int main(int argc, char *argv[])
{
    /* seed rand() */
    srand((unsigned int ) time(NULL));

    /* pokerGame instance */
    Game *pokerGame = new Game();
    PRINT_COLOR(ANSI_COLOR_GREEN, "\tWelcome to Poker Game\n\n");

    /* number of opponents user input */
    pokerGame->askForNumberOfOpponents();

    /* pokerGame loop */
    bool quit = false;
    while (!quit)
    {
        cout << "\n> The deck is being shuffled" << endl;
        pokerGame->shufflePile();

#ifdef DEBUG
        PRINT_COLOR(ANSI_COLOR_CYAN, "\ndebug: deck after shuffle\n");
        pokerGame->printPile();
        cout << endl;
#endif

        /* all methods assume that cards are sorted, it is our responsibility to
         * to meet that, this results in simpler code */
        cout << "> Dealing cards to opponent(s)" << endl << endl;
        pokerGame->dealOpponentCards();
        pokerGame->sortOpponentCards();

#ifdef DEBUG
        PRINT_COLOR(ANSI_COLOR_CYAN, "debug: opponents' cards before discarding:\n");
        pokerGame->printOpponentCards();
        PRINT_COLOR(ANSI_COLOR_CYAN, "\ndebug: \"Computer's AI\"");
#endif
        /* perform AI for each opponent */
        int i;
        for (i = 0; i < pokerGame->numOfOpponents; i++)
            pokerGame->opponentAI(i+1);
        /* resort the cards after the AI */
        pokerGame->sortOpponentCards();

#ifdef DEBUG
        PRINT_COLOR(ANSI_COLOR_CYAN, "\ndebug: opponents' cards after discarding:\n");
        pokerGame->printOpponentCards();
#endif

        cout << "\n> Dealing cards to the user" << endl;
        pokerGame->dealUserCards();
        pokerGame->sortUserCards();

        cout << "Cards in your hand: ";
        pokerGame->printUserCards();
        pokerGame->userAI(pokerGame->getUserCards());

        pokerGame->evaluateHand(pokerGame->getUserCards(), 0); /* user hand */
        for (i = 0; i < pokerGame->numOfOpponents; i++)        /* opponents hands */
            pokerGame->evaluateHand(pokerGame->getOpponentsCards(i+1), i+1);
        pokerGame->showHands();

        cout << "\nFinal user's cards:" << endl;
        pokerGame->sortUserCards();
        pokerGame->printUserCards();

        cout << "Final opponents' cards:" << endl;
        pokerGame->printOpponentCards();

        pokerGame->determineWinner();

#ifdef DEBUG
        PRINT_COLOR(ANSI_COLOR_CYAN, "\ndebug: deck after being delt to opponents and user\n");
        pokerGame->printPile();
#endif

        /* ask to repeat the game and reset the deck of cards */
        pokerGame->repeatGame(&quit);
        pokerGame->resetDeck();
    }

    cout << "\nThank you for playing\n" << pokerGame->handsPlayed << ": Hands played\n"
         << pokerGame->handsWon << ": Hands won" << endl;

    delete pokerGame;
    PRINT_COLOR(ANSI_COLOR_CYAN, "\tBye!\n");

    return 0;
}