Blackjack class is derived from card class ( see attached playingcard.h and blackjack.h)
I have problem with:
void blackjack::DealCards() function.
I want to use function deal_hands from card class to set the value of pcard1 pcard2, dcard1 and dcard2.
How could I do that???
dirs 0 Newbie Poster
class blackjack : public card
{
//friend class card;
private:
int pcard1, pcard2; // player cards
int dcard1,dcard2; // dealers cards
char draw; //draw yes or no?
int drawcard; // draw card
int Ctotal; // card totals
int bet; // bet
char name[20];
public:
void DealCards();
void DrawCard();
void Intro();
void Dealer();
void Ace();
};
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "playingcards.h"
#include "blackjack.h"
int main()
{
card deck[52];
blackjack bj;
card hand[players][cards_pl];
deck[52].init_deck(deck);
cout << "Unshuffled card deck: ";
deck[52].display_deck(deck);
deck[52].shuffle(deck);
cout << endl << "Shuffled card deck: ";
deck[52].display_deck(deck);
deck[52].deal_hands(deck, hand);
deck[52].display_hands(hand);
//srand(time(NULL)); // seed random number
// bj.Intro();
bj.DealCards();
cout << endl;
return 0;
}
// This function prints a single card
void card::display_card(const card* cd)
{
// Check the value of the card, and the 4 special values
// which are for Ace, Jack, Queen or King
switch (cd->value)
{
case 11: cout << "J"; break;
case 12: cout << "Q"; break;
case 13: cout << "K"; break;
case 14: cout <<"A"; break;
default: cout << cd->value;
}
// Check the card's suit
switch (cd->suit)
{
case clubs: cout << char (5); break;
case diamonds: cout << char (4); break;
case hearts: cout << char (3); break;
case spades: cout << char (6); break;
}
cout << " ";
}
// This function initializes a deck of cards
void card::init_deck(card d[])
{
for (int i = 0; i < 52; i++)
{
// First 13 cards are spades, next 13 are diemonds etc...
switch (i / 13)
{
case 0: d[i].suit = clubs; break;
case 1: d[i].suit = diamonds; break;
case 2: d[i].suit = hearts; break;
case 3: d[i].suit = spades; break;
}
// Assign the card value
d[i].value = 2 + i % 13;
}
}
// This function prints the deck
void card::display_deck(const card d[])
{
for (int i = 0; i < 52; i++)
{
// Print a newline after each 13 cards (for a better look)
if (i % 13 == 0)
cout << "\n";
display_card(&d[i]);// Print cards using display_card
}
cout << endl;
}
// This function shuffles the deck
void card::shuffle(card d[])
{
for (int i = 0; i < 52; i++)
{
// Shuffles the cards using a random number generator, each
// card is replaced with some random card from the same deck
int k = rand()%52;
card temp = d[i];
d[i] = d[k];
d[k] = temp;
}
}
// This function deals the cards to the players
card::deal_hands(const card d[], card h[players][cards_pl])
{
int next_player = 0, next_card = 0;
for (int i = 0; i < 52; i++)
{
// Fill the player's hands equally, card by card
h[next_player][next_card] = d[i];
next_player++;
if (next_player > players)
{
next_player = 0;
next_card++;
}
return [next_card];
}
}
// This function prints the hands
void card::display_hands(const card h[players][cards_pl])
{
cout << endl << "The hands are: "<< endl;
// Print the hands of all player, each in separate line
for (int i = 0; i < players; i++)
{
cout << "Player " << i << ": ";
for (int j = 0; j < cards_pl; j++)
{
display_card(&h[i][j]);
}
cout << endl;
}
}
int card::GetCards()
{
int x;
x = 1 + rand() % 11;
return x;
}
//**************
void blackjack::DealCards()
{
Ctotal = 0;
pcard1 = card::deal_hands(0,card [0][0]);
pcard2 = card::deal_hands(0,card [0][1]);
dcard1 = card::deal_hands(0,card [1][0]);
dcard2 = card::deal_hands(0,card [1][1]);
/* cout << "You have " << money << " dollars to play with\n\n";
if (money <= 0)
{
cout << "You are out of money...., GAME OVER!" << endl;
exit(1);
}
cout << "What is your bet? ";
cin >> bet;
if (bet > money)
{
cout << "We do not give credit to the likes of you...\n\n";
DealCards();
}
system("CLS");*/
if (pcard1 == 1 || pcard1 == 11)
{
cout << "\n\n" << "Your first card is an ACE \n";
}
else
{
cout << "\n\nyour first card is " << pcard1 << endl;
}
if (pcard2 == 1 || pcard2 == 11)
{
cout << "Your second card is an ACE\n\n";
}
else
{
cout << "your second card is " << pcard2 << "\n\n";
}
Ctotal = pcard1 + pcard2;
if (dcard1 ==1 || dcard1 == 11)
{
dcard1 = 1;
cout << "The dealer is showing an Ace \n\n";
}
else
{
cout << "The dealer is showing a " << dcard1 << "\n\n";
}
if (pcard1 == 1 || pcard1 == 11)
{
Ace();
}
else if (pcard2 == 1 || pcard2 == 11)
{
Ace();
}
Ctotal = pcard1 + pcard2;
cout << "You have " << Ctotal << " total so far\n\n";
DrawCard();
}
void blackjack::DrawCard()
{
cout << "Would you like to (H)it or (S)tand? ";
cin >> draw;
switch (draw)
{
case 'h':
drawcard = card::GetCards();
cout << "You drew a " << drawcard << "\n\n";
Ctotal += drawcard;
cout << "your total is " << Ctotal << "\n";
if (Ctotal > 21)
{
cout << "BUST! \n\n";
/* money -= bet;
cout << "you lost " << bet << " dollars\n\n";*/
DealCards();
// system("CLS");
}
else
{
system("CLS");
DrawCard();
}
break;
case 's':
Dealer();
break;
default:
cout << "Please use h or s...thank you\n\n";
DrawCard();
}
}
void blackjack::Dealer()
{
int Dtotal; // dealers card total
int Ddraw; // dealer draw card
Dtotal = 0;
system("CLS");
cout << "You have " << Ctotal << "\n\n";
cout << "The dealer turns over his card....\n";
cout << "The dealers first card was a " << dcard1 << "\n";
cout << "The dealers second card is " << dcard2 << "\n\n";
Dtotal = dcard1 + dcard2;
cout << "The dealer has a total of " << Dtotal << "\n";
while (Dtotal <= 17)
{
Ddraw = GetCards();
cout << "the dealer draws again...\n";
cout << "the dealer drew a " << Ddraw << "\n";
Dtotal += Ddraw;
cout << "The dealer now has " << Dtotal << "\n";
}
if (Dtotal > 21)
{
cout << "Dealer busts...you win" << "\n\n";
/*money += bet;*/
DealCards();
}
else
{
cout << "The Dealer stands on " << Dtotal << "\n\n";
cout << "Dealer has " << Dtotal << "\n";
cout << "You have " << Ctotal << "\n\n";
if (Dtotal < Ctotal)
{
cout << "You win " <<"\n\n";
/*bet += money;*/
DealCards();
}
if (Dtotal == Ctotal)
{
cout << "PUSH..No winner\n";
DealCards();
}
else
{
cout << "Dealer wins \n";
/*money -= bet;*/
system("CLS");
DealCards();
}
}
}
void blackjack::Ace()
{
int answer;
if (pcard1 == 1 || pcard1 == 11)
{
cout << "would you like to use your first ace as a 1 or 11\n";
cin >> answer;
switch (answer)
{
case 1:
pcard1 = 1;
break;
case 11:
pcard1 = 11;
break;
default:
cout << "you need to choose 1 or 11\n\n";
Ace();
}
}
if (pcard2 == 1 || pcard2 == 11)
{
cout << "would you like to use your second ace as a 1 or 11\n";
cin >> answer;
switch (answer)
{
case 1:
pcard2 = 1;
break;
case 11:
pcard2 = 11;
break;
default:
cout << "you need to choose 1 or 11\n\n";
Ace();
}
}
if (pcard1 == 11 && pcard2 == 11)
{
cout << "That would be 22! and you would bust\n";
cout << "play again";
Ace();
}
Ctotal = pcard1 + pcard2;
if (Ctotal == 21)
{
system("CLS");
cout << "Blackjack!" << "\n\n";
/* bet *=1.5;*/
cout << "you won "/*<< bet <<*/ "\n";
/* money += bet; */
DealCards();
}
}
/*void blackjack::Intro()
{
cout << "Welcome, who am I dealing to? ";
cin >> name;
cout << "Welcome to the table " << name << "\n\n";
}*/
enum Suit {clubs, diamonds, hearts, spades};
const int players = 2;// Number of players
const int cards_pl = 2;// Number of cards per player
randomize();
class card
{
//friend class blackjack;
private:
Suit suit; // The card's suit: clubs, diamonds, hearts, spades
int value;// The value of the card: 2 - 10, jack, queen ,king, ace
public:
void display_card(const card*);
void init_deck(card []);
void shuffle(card []);
void display_deck(const card []);
int deal_hands(const card [], card [players][cards_pl]);
void display_hands(const card [players][cards_pl]);
int GetCards();
};
BlackDice 4 Light Poster
You should be able to just type in CPlayingCard::deal_hands() (if CPlayingCard is the name of your base class), and that should be all there is to it!!
dirs 0 Newbie Poster
You should be able to just type in CPlayingCard::deal_hands() (if CPlayingCard is the name of your base class), and that should be all there is to it!!
Thanks for the reply!
The problem is that deal_hands function doesnt return anything at the moment.
Could it return an array of cards that could be used in the derrived class to set pcard1 , pcard2 etc.?
Thanks!
BlackDice 4 Light Poster
if there's an array for it in the base class, you should be able to access that array the same way CPlayingCard::array[1] (or whichever element you're looking for). Or you could have it return an array of cards by declaring the function return type as CCard*. Then just return the name of the array from the function as that will be a pointer to the first address, and a count of the cards, if it's possible for it to change. then you can iterate through each one as you need to up until the count returned. Hope this helps!!:mrgreen:
Thanks for the reply!
The problem is that deal_hands function doesnt return anything at the moment.
Could it return an array of cards that could be used in the derrived class to set pcard1 , pcard2 etc.?
Thanks!
dirs 0 Newbie Poster
if there's an array for it in the base class, you should be able to access that array the same way CPlayingCard::array[1] (or whichever element you're looking for). Or you could have it return an array of cards by declaring the function return type as CCard*. Then just return the name of the array from the function as that will be a pointer to the first address, and a count of the cards, if it's possible for it to change. then you can iterate through each one as you need to up until the count returned. Hope this helps!!:mrgreen:
I have tried to do like this CPlayingCard::array[1] but i get error
C:\cardgame\playingcards.cpp(154) : error C2275: 'blackjack::card' : illegal use of this type as an expression.
Thanks for reply!
BlackDice 4 Light Poster
well try sending a pointer back of whatever type the array is then reference that pointer by a subscript
I have tried to do like this CPlayingCard::array[1] but i get error
C:\cardgame\playingcards.cpp(154) : error C2275: 'blackjack::card' : illegal use of this type as an expression.
Thanks for reply!
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.