Hi Guys, I'm stressing out over this project. The majority is done. I keep getting an buffer errors. I'm stuck and can't figure it out. I did call stack and it took me to the last parenthesis in main. The closing parenthesis. Also I can't figure out why my card values are not correct. I have to set my random number generator in main so that is it 1234 so my teacher can grade it. When I do that I notice that my card values are not the same the output. The first one is supposed to be 20 it's 23 I think that the misvalues are throwing off the rest of my program. I have been at it for a while please any help is appreciated.
This is my entire code
#include "functions2.h"
int main()
{
int hitL[PLAYERCOUNT]= {0}, cardsT[PLAYERCOUNT] = {0},
index = 0, i = 0;
string playersname[PLAYERCOUNT];
char limit = ' ' ;
ifstream fin("input.txt");
srand((unsigned)(1234));
//Shuffle cards
shuffleCards(index);
//Input
fin >> playersname[i] >> hitL[i];
//Input
while(!fin.eof())
{
i++;
fin >> playersname[i] >> hitL[i];
}
//Game function
game(playersname,hitL,i,cardsT);
system("pause");
return 0;
}
//Class
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <iomanip>
using namespace std;
class cards
{
private:
int face;
char suit;
public:
cards(int = 0, char = ' ');
void display();
void swap(cards&);
void setCards(int, char);
//Getters
int getFace();
char getSuit();
};
//Functions
cards::cards(int f, char s)
{
face = f;
suit = s;
}
//Swap
void cards::swap(cards& c)
{
cards temp;
temp.face = c.face;
temp.suit = c.suit;
c.face = face;
c.suit = suit;
face = temp.face;
suit = temp.suit;
}
//Display
void cards::display()
{
switch(face)
{
case 11: cout <<'J';
break;
case 12: cout << 'Q';
break;
case 13: cout << 'K';
break;
case 1: cout << 'A' ;
break;
default: cout << face;
}
cout << suit;
}
void cards::setCards(int f, char s)
{
face = f;
suit = s;
}
int cards::getFace()
{
return face;
}
char cards::getSuit()
{
return suit;
}
//Functions
#include "cards.h"
//Card array
cards hand[52];
//Constants
const int PLAYERCOUNT = 7;
const int GAMELIMIT = 21;
const int DEALER = 16;
const int TWOCARD = 2;
//Functions
void Dealer(string dName[], int dHit[], int i)
{
i = PLAYERCOUNT;
dName[i+1] = "Dealer";
dHit[i+1] = DEALER;
}
void display()
{
cout << "BlackJack by Jordan Lillie" << endl;
cout << "The shuffled deck is : " << endl;
for(int i = 0; i < 52; i++)
{
if(i % 13 == 0)
{
cout << endl;
}
hand[i].display();
cout <<' ' << ' ';
}
cout << '\n' << endl;
}
void displayHit(string playersName[], int hitLim[])
{
cout << "Player Name" << '\t' << "Hit Limit" << endl;
for(int i = 0; i < PLAYERCOUNT-1; i++)
{
setfill(" ");
cout << right << setw(11) << playersName[i] << " "
<< right << setw(9) << hitLim[i] << endl;
}
cout << endl;
}
void deal(string playersName[],int playerStat[])
{
int counter = 0;
cout << "Deal two cards to everyone" << endl;
for(int i = 0; i < TWOCARD; i++)
{
for( int j = 0; j < PLAYERCOUNT; j++)
{
playerStat[j] += hand[counter++].getFace();
}
}
//Display
for( int k = 0; k < PLAYERCOUNT; k++)
{
cout << "Hand for " << playersName[k] << " is : " ;
hand[k].display();
cout << " and " ;
hand[k + PLAYERCOUNT].display();
cout << " Value for this hand is " << playerStat[k] << endl;
}
cout << endl << endl;
}
void limits(string playersName[], int playersStat[], int hitLim[])
{
int hitCount = PLAYERCOUNT * TWOCARD;
int k = 0;
for( k = 0; k < PLAYERCOUNT; k++)
{
while(playersStat[k] < hitLim[k])
{
playersStat[k] += hand[hitCount].getFace();
cout << "Player " << playersName[k] << " getting another card ";
hand[hitCount].display();
cout << endl;
hitCount++;
}
cout << "Value of hand for " << playersName[k] << " is now " << playersStat[k] << endl;
}
}
void displayEndgame(int playerStat[], string playersName[])
{
cout << endl;
cout << "Results of this game" << endl;
for(int i = 0; i < PLAYERCOUNT - 1; i++)
{
if(playerStat[PLAYERCOUNT-1] == GAMELIMIT)
{
for( int k = 0; k < PLAYERCOUNT - 1; k++)
{
cout << "The deal beats player" << playersName[k] << endl;
}
break;
}
if(playerStat[i] > GAMELIMIT)
{
cout << "Dealer beats player " << playersName[i] << endl;
}
else
{
if(playerStat[PLAYERCOUNT-1] <= GAMELIMIT)
{
if(playerStat[PLAYERCOUNT - 1] >= playerStat[i])
{
cout << "Dealer beats player" << playersName[i] << endl;
}
else
{
cout << "Player " << playersName[i] << " beats the dealer" << endl;
}
}
else
{
cout << "Player " << playersName[i] << " beats the dealer" << endl;
}
}
}
cout << endl;
}
void game(string playersName[],int hitLim[],int i,
int playerStat[])
{
Dealer(playersName,hitLim,i);
display();
displayHit(playersName, hitLim);
deal(playersName, playerStat);
limits(playersName, playerStat, hitLim);
displayEndgame(playerStat, playersName);
}
void shuffleCards(int counter)
{
for(int s = 3; s <= 6; s++)
{
for (int f = 1; f <= 13; f++)
{
hand[counter] = cards(f, char (s));
counter++;
}
}
for(int i = 0; i < 52; i++)
{
hand[i].swap(hand[(rand() % 52)]);
}
cout << endl;
}
//Input
Andy 15
Bob 17
Cathy 16
David 17
Edward 16
Freda 14