summaryrefslogtreecommitdiffstats
path: root/cardpile.cpp
blob: 3f1597b8cb09c3e6d63de95ebbb1c2df7606f8e2 (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
/*
 * cardpile.cpp
 *
 * Notes: This class is inherited multiple of times, so virtual keyword will need
 *        to be used to avoid making multiple instances of this class and to avoid
 *        ambiguities.
 *
 */

#include "cardpile.h"

/* generates and ranks a deck of 52 cards */
CardPile::CardPile(void) : deckCurrIndex(51), discardPileCurrIndex(0)
{
    int i, j;
    int k = 0;
    string suit[4] = {"C","D","H","S"};
    string c[13] = {"A","2","3","4","5","6","7","8","9","T","J","Q","K"};
    string tmp;

    for (i = 0; i < 4; i++)
        for (j = 0; j < 13; j++, k++)
        {
            tmp = c[j] + suit[i];
            deck[k] = new Card(tmp);
            deck[k]->rankCard();
        }
}

CardPile::~CardPile(void)
{
    int i;
    for (i = 0; i < 52; i++)
        delete deck[i];
}

Card CardPile::getCard(int index)
{
    if ((index >= 0) && (index < 52))
        return *deck[index];
    else
        return Card();
}

void CardPile::printPile(void)
{
    int i;
    for (i = 1; i <= deckCurrIndex + 1; i++)
    {
        if (deck[i])
            cout << deck[i-1]->getType() << " ";

        if ( (i % 13) == 0  && i != deckCurrIndex+1)
            cout << endl;
    }

    cout << endl;
}

Card *CardPile::getCardFromDeck(int index)
{
    return deck[index];
}

void CardPile::putCardToDeck(int index, Card *card)
{
    deck[index] = card;
}

void CardPile::putCardToDiscardPile(Card *card)
{
    discardPile[discardPileCurrIndex] = card;
    discardPileCurrIndex++;
}

Card *CardPile::PopCardFromDeck(void)
{
    if (deckCurrIndex >= 0)
        return deck[deckCurrIndex--];
    else
    {
        PRINT_COLOR(ANSI_COLOR_RED, "deck is empty!\n");
        return NULL;
    }
}

void CardPile::resetDeck(void)
{
    deckCurrIndex = 51;
    discardPileCurrIndex = 0;

    /* reset cards' rank */
    int i;
    for (i = 0; i < 52; i++)
        deck[i]->rankCard();
}