Code:
#include <iostream>
#include <ctime> //used in random card generator
#include <string>
using namespace std;
void rules(void);
void betcheck(int&, int&);
void deckgen(int[4][13]);
void deal(int[4][13], int[4][13], int [52], int, int&, int&, int&, string&, string&, string&, string&);
void dealer (int[4][13], int[4][13], int [52], int, int&, int, string, string, string, string);
void randcard(int[4][13], int[4][13], int [52], int, int&, int&, string&, string&);
void cardcheck(int[4][13], int[52], int);
void settle(int, int, int&, int&);
int main(void)
{
cout << "It's time to play blackjack!\n" << endl << endl;
int bet = 0;
int chips = 1000;
char play = 'Y';
rules(); // Player is shown rules for betting
do
{
betcheck(chips, bet); // Player places bet and it is checked against the rules
srand( (unsigned)time( NULL ) ); //onverts seconds to an unsigned int for random card generator
int deck[4][13];
int card[4][13];
int cardsp[52];
int ddealertot = 0, ddace = 0, pplayertot = 0, carddrawn = 0;
string suittext, cardtext, suittex, cardtex, suitt, cardt;
deckgen(deck);//creates deck and names card values
deal(deck, card, cardsp, carddrawn, ddealertot, pplayertot, ddace, suittex, cardtex, suitt, cardt);
dealer(deck, card, cardsp, carddrawn, ddealertot, ddace, suittex, cardtex, suitt, cardt);
settle (pplayertot, ddealertot, chips, bet);
cout << "Play again?(y/n) ";//Player decides if he wants to play again
cin >> play;
cout << endl;
}while (play == 'y' || play == 'Y');
}
void rules(void)
{
cout << "The rules:\n";
cout << " Bet must be in multiples of five dollars.\n";
cout << " Minimum bet of $5.\n";
cout << " Maximum bet of $100.\n";
cout << " Bet cannot decrease during the same hand.\n";
cout << endl;
cout << endl;
cout << "Your initial chip total is $1000.\n" << endl << endl << endl;
}
void betcheck(int& total_chips, int& final_bet)
{
int bet;
cout << "Bet: ";//Player inputs first bet
cin >> bet;
while (bet < 5)// Player bets less than minimum bet
{
cout << "Your bet must be between 5 and 100.\n";
cout << endl << "Bet: ";
cin >> bet;
}
while (bet > 100)//Player bets more than maximum bet
{
cout << "Your bet must be between 5 and 100.\n";
cout << endl << "Bet: ";
cin >> bet;
}
while (bet % 5 != 0)// Player did not bet in a mulitple of 5
{
cout << "You can only bet in multiples of 5." << endl;
cout << endl << "Bet: ";
cin >> bet;
}
while (bet > total_chips)//Player bet more than he had
{
cout << "You cannot bet more than your chip count." << endl;
cout << endl << "Bet: ";
cin >> bet;
}
while (bet < final_bet)//Player bet less than previous bet
{
cout << "You cannot bet lower than your previous bet." << endl;
cout << endl << "Bet: ";
cin >> bet;
}
final_bet = bet;
total_chips -= final_bet;
cout << endl << "Chips: " << total_chips << endl << endl;
}
void deckgen(int deckdeck[4][13])
{
int num;
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 12; j++)
{
if (j < 9)
num = j+2;
else if (j <12)
num = 10;
else num = 11;
deckdeck[i][j] = num;
}
}
}
void randcard(int deckdeck[4][13], int cardcard[4][13], int cardsplayed[52], int cardd, int& suitrand, int& cardrand, string& suitname, string& cardname)
{
int slow = 0, shigh = 4;
int clow = 0, chigh = 13;
char cardgood = 'n';
char dupcard = 'n';
int ncard = 1;
for (int k = 0; k <= 3; k++)
{
for (int l = 0; l <= 12; l++)
{cardcard[k][l]= ncard;
ncard++;
}}
do
{
suitrand = slow + (double)rand()/(double) RAND_MAX*(shigh - slow);
cardrand = clow + (double)rand()/(double) RAND_MAX*(chigh - clow);
cout << "suit: " << suitrand << " card: " << cardrand << " cardcard: " << cardcard[suitrand][cardrand]<< endl;
for (int i = 0; i < 52; i++)
{
if (cardsplayed[i] == cardcard[suitrand][cardrand])
dupcard = 'y';
if (dupcard == 'y') cout << "DUPLICATE CARD" << endl;
}
if (dupcard == 'n')
{cardsplayed[(cardd)] = cardcard[suitrand][cardrand];
//cout << "in cardcheck, cardd = " << cardd << endl;
//cout << "in cardcheck, cardsplayed " << cardsplayed[cardd] << endl;
cardd = cardd +1;
cardgood = 'y';
//cout << "in cardcheck, cardgood = " << cardgood << endl;
}
}while (cardgood == 'n');
//Naming suits.
switch(suitrand){
case 0:
suitname = "clubs";
break;
case 1:
suitname = "diamonds";
break;
case 2:
suitname = "hearts";
break;
case 3:
suitname = "spades";
break;}
//Naming Cards.
switch(cardrand){
case 0:
cardname = "two";
break;
case 1:
cardname = "three";
break;
case 2:
cardname = "four";
break;
case 3:
cardname = "five";
break;
case 4:
cardname = "six";
break;
case 5:
cardname = "seven";
break;
case 6:
cardname = "eight";
break;
case 7:
cardname = "nine";
break;
case 8:
cardname = "ten";
break;
case 9:
cardname = "jack";
break;
case 10:
cardname = "queen";
break;
case 11:
cardname = "king";
break;
case 12:
cardname = "ace";
break;}
}
void deal(int deckdeck[4][13], int cardcard[4][13], int playedcards[52], int cardd, int& dealertot, int& playertot, int& dace, string& suitte, string& cardte, string& suittexttext, string& cardtexttext)
{
int place = 0; // Player first has zero aces
char hit; //Player decides if he wants to hit his hand
int suitnum;//value from 0-3 of suits, ordered clubs, diamonds, hearts, spades
int cardnum;//value from 0-12 of cards, ordered 2-10 then jack, queen, king, ace
int suitnumber, cardnumber;
string suittext, cardtext;
int deck[4][13];
int card[4][13];
int cardspl[52];
// array storing cards that have been played is re-set
for (int i = 1; i < 52; i++)
{
cardspl[i] = 60;
}
//Player's 1st two cards are randomly generated
randcard(deck, card, cardspl, cardd, suitnum, cardnum, suittext, cardtext);
if (cardnum == 12)
place = place + 1;
playertot = playertot + deckdeck[suitnum][cardnum];
cout << "Your cards: ";
cout << cardtext << " of " << suittext << endl;
randcard(deck, card, cardspl, cardd, suitnum, cardnum, suittext, cardtext);
if (cardnum == 12)
place = place + 1;
playertot = playertot + deckdeck[suitnum][cardnum];
cout << " " << cardtext << " of " << suittext << endl << endl;
//Dealer's first two cards are generated
randcard(deck, card, cardspl, cardd, suitnum, cardnum, suitte, cardte);
dealertot = dealertot + deckdeck[suitnum][cardnum];
cout << "The dealer's cards: ";
cout << cardte << " of " << suitte << endl;
cout << " and ???" << endl << endl;
if (cardnum == 12)
dace = dace + 1;
randcard(deck, card, cardspl, cardd, suitnumber, cardnumber, suittexttext, cardtexttext);
dealertot = dealertot + deckdeck[suitnumber][cardnumber];
if (cardnumber == 12)
dace = dace + 1;
if (playertot == 21)
cout << "Blackjack!!!" << endl << endl;
//Player plays his hand
while (playertot < 21)
{
cout << "Hit/stand (h/s): ";
cin >> hit;
if (hit == 'h' || hit == 'H')
{
randcard(deck, card, cardspl, cardd, suitnum, cardnum, suittext, cardtext);
playertot = playertot + deckdeck[suitnum][cardnum];
cout << " " << cardtext << " of " << suittext << endl << endl;
if (cardnum == 12)
place = place + 1;
if (playertot > 21 && place > 0)
{
playertot = playertot - 10;
place = place - 1;
}
}
else
break;
}
if (playertot > 21)
cout << "Bust: " << playertot << endl << endl;
if (playertot <= 21)
cout << endl << "Your total: " << playertot << endl << endl;
}
void dealer(int deckdeck[4][13], int cardcard[4][13], int playedcards[52], int carddr, int& dealertot, int dace, string suitfirst, string cardfirst, string suittextt, string cardtextt)
{
int suitnum;
int cardnum;
string suittext, cardtext;
int deck[4][13];
int card[4][13];
int cardspl[52];
int cardd;
//Dealer's two cards are shown
cout << "The dealer's hand: " << cardfirst << " of " << suitfirst << endl;
cout << " " << cardtextt << " of " << suittextt << endl;
if (dealertot == 21)
cout << endl << "Dealer blackJack" << endl;
//Dealer's hand is played, hits on anything less than a 17 as per casino rules
while (dealertot < 17)
{
randcard(deck, card, cardspl, cardd, suitnum, cardnum, suittext, cardtext);
cout << " " << cardtext << " of " << suittext << endl;
dealertot = dealertot + deckdeck[suitnum][cardnum];
if (cardnum == 12)
dace = dace + 1;
if (dealertot > 21 && dace > 0)
{
dealertot = dealertot - 10;
dace = dace - 1;
}
}
cout << endl << "Dealer's total: " << dealertot << endl << endl;
}
void settle(int player_total, int dealer_total, int& total_chips, int& final_bet)
{
if (player_total == dealer_total)
{
cout << " Push" << endl << endl;
total_chips += final_bet;
}
if (player_total <= 21 && dealer_total > 21)
{
cout << " You Won" << endl << endl;
total_chips = total_chips + 2 * final_bet;
}
else if (player_total <= 21 && player_total > dealer_total)
{
cout << " You Won" << endl << endl;
total_chips = total_chips + 2 * final_bet;
}
else if (player_total <= 21 && player_total < dealer_total)
cout << " You Lost" << endl << endl;
else if (player_total > 21 && dealer_total <= 21)
cout << " You Lost" << endl << endl;
else if (player_total > 21 && dealer_total > 21 && player_total != dealer_total)
{
cout << " Push" << endl << endl;
total_chips += final_bet;
}
cout << "New Chip Total: " << total_chips << endl << endl;
}
The portion of the code that I am having problems with in in my random card generator randcard().