dimanche 27 janvier 2019

Two different pointer arrays, but they both point to the same address

I'm making a blackjack game and I have a pointer arrays for my dealer's and player's hand. The issue is that when I randomly generate cards to be stored in the array, they both have the same cards. Not sure if it is because they both point to the same address or something I haven't noticed.

#include <iostream>
#include <ctime>
#include <random>
#include <iomanip>
#include <cstdlib>


    using namespace std;


    class Blackjack
{
    public:
    Blackjack();
    void playGame();
    int pbalance;
    int betamount;
    int loop= 1;
    int *playerbalances;
    int pbalan,pbal;
    void firstbalance();
    void clearhand();



    private:
    int dhandSize;
    int phandSize;
    int dhandSum;
    int phandSum;
    int phit;
    int pstand;
    bool playerDone;
    bool dealerDone;
    void addPlayerCard();
    void addDealerCard();
    void printHand();
    void sumHands();
    void playerbalance();
    void playerbet();
    int *dhand[];
    int *phand[];
};

    Blackjack::Blackjack()
{
    srand(time(0));
    dhandSize = 0;
    phandSize = 0;
    dhandSum = 0;
    phandSum = 0;
    playerDone = false;
    dealerDone = false;
}


void Blackjack::playGame()
{

    if (pbal>0)
    {

    // Start the player and dealer with two cards
    playerbet();
    addPlayerCard();
    addPlayerCard();
    addDealerCard();
    addDealerCard();
    sumHands();
    printHand();

    if (dhandSum == 21)
    {
        cout << "Dealer has blackjack. Dealer wins.\n";
        clearhand();
        return;
    }
    else if (phandSum == 21)
    {
        cout << "Player has blackjack. Player wins.\n";
        clearhand();
        return;
    }

    while (dealerDone == false || playerDone == false)
    {
        if (playerDone == false)
        {
            cout << "Would you like to hit? (1 - Yes, 2 - No)\n";
            cin >> phit;

            if (phit == 1)
            {
                addPlayerCard();
                printHand();
                sumHands();

                if (phandSum > 21)
                {
                    cout << "Player's hand exceeded 21. Player loses"<<endl;
                    pbalan =(pbalan - betamount);
               cout <<"[you lose $"<<betamount<<" of money!]"<<endl;
               cout <<"[your current balance is: $"<<pbalan<<"]"<<endl;
               clearhand();
                    return;
                }
            }
        }

        if (playerDone == false)
        {
            cout << "Would you like to stand? (1 - Yes, 2 - No)\n";
            cin >> pstand;
        }

        if (pstand == 1)
        {
            playerDone = true;
        }

        if (dhandSum < 17 && dealerDone != true)
        {
            addDealerCard();
            printHand();
            sumHands();

            if (dhandSum > 21)
            {
                cout << "Dealer hand exceeded 21. Dealer loses.\n";
                return;
            }
        }
        else if (dhandSum >= 17)
        {
            dealerDone = true;
        }

        if (phandSum == 21 && dhandSum == 21)
        {
            cout << "Push, player and dealer reached 21.\n";
            return;
        }
        else if (phandSum == 21)
        {
            cout << "Player reached 21. Player wins.\n";
            return;
        }
        else if (dhandSum == 21)
        {
            cout << "Dealer reached 21. Dealer wins.\n";
            pbalan =(pbalan - betamount);
               cout <<"[you lose $"<<betamount<<" of money!]"<<endl;
               cout <<"[your current balance is: $"<<pbalan<<"]"<<endl;
            return;
        }

        if ((playerDone == true && dealerDone == true) || (phandSize == 5 && phandSize == 5))
        {
            if (dhandSum < phandSum)
            {
                cout << "Sum of your hand exceeds the dealer's sum of " << dhandSum << "! You win!";
                return;
            }
            else if (phandSum == dhandSum)
            {
                cout << "Dealer sum of " << dhandSum << " is equal to the sum of your hand. Tie game.";
                return;
            }
            else if (dhandSum > phandSum)
            {
                cout << "Sum of your hand is lower than the dealer's sum of " << dhandSum << ". You lose!"<<endl;
               pbalan =(pbalan - betamount);
               cout <<"[you lose $"<<betamount<<" of money!]"<<endl;
               cout <<"[your current balance is: $"<<pbalan<<"]"<<endl;
                return;
            }
        }
    }
    }
}


void Blackjack::clearhand()
{
    for (int i = 0; i < dhandSize; i++) { delete dhand[i]; }
    for (int i = 0; i < phandSize; i++) { delete phand[i]; }
        phandSize = 0;
        dhandSize = 0;
}

void Blackjack::firstbalance()
{

    cout << "Welcome to Blackjack" <<endl;
    cout << "please enter a starting balance: " <<endl;
    cin >> pbal;
    playerbalances  = &pbalan;
    *playerbalances  = pbal;

}

void Blackjack::playerbet()
{
    cout << "how much do you want to bet?"<<endl;
    cin >> betamount;
}

void Blackjack::addPlayerCard()
{
    if (phandSize <= 5)
    {

        *phand[phandSize] = 1 + (rand() % 13);
        phandSize++;
    }
    else
    {
        cout << "Sorry. You have reached the maximum number of cards (5)." << endl;
        playerDone = true;
    }
}
void Blackjack::addDealerCard()
{
    if (dhandSize <= 5)
    {
        *dhand[dhandSize] = 1 + (rand() % 13);
        dhandSize++;
    }
    else
    {
        dealerDone = true;
    }
}

void Blackjack::printHand()
{
    cout << "Your current hand is...\n";

    for (int i = 0; i < phandSize; i++)
    {
        cout << "    -" << *phand[i] << "-    \n\n";
    }

    cout << "Dealer's current hand is...\n";

    for (int j = 0; j < dhandSize; j++)
    {
        cout << "    -" << *dhand[j] << "-    \n\n";
    }
}

void Blackjack::sumHands()
{
    dhandSum = 0;
    phandSum = 0;
    for (int i = 0; i < dhandSize; i++)
    {
        dhandSum += *dhand[i];
    }

    for (int j = 0; j < phandSize; j++)
    {
        phandSum += *phand[j];
    }

    cout << "Current player hand sum is: " << phandSum << endl;
}


using namespace std;

int main()
{

    int exitGame = 1;
    int i = 0;

    Blackjack play;

    if (i<1)
    {
    play.firstbalance();
    i++;
    }

do
    {

        play.playGame();
        play.clearhand();
        cout << "\nWould you like to play again? (1 - Yes, 2 - No)\n";
        cin >> exitGame;
    }
    while (exitGame == 1);


    cout << "\nThanks for playing!\n";
    return 0;
}

The dealer cards should be different from the player cards but they are identical when you run the program.

Aucun commentaire:

Enregistrer un commentaire