Red Squirrel
No Lifer
This is my main function, the classes and such are most likely irrelevant in this case, so I won't post unless requested.
Half way through the program, the numberofplayers looses it's scope completely. Its just some random left over garbage in memory, even though it's global to main, and is set to 0, then changed by the user. Sometimes it's 3, sometimes it's 6, sometimes negative, etc... I've been breaking my head trying to figure out why it looses scope upon entering the while loop. as far as I know, it should keep it's scope even inside a loop, as it was declared before hand.
Half way through the program, the numberofplayers looses it's scope completely. Its just some random left over garbage in memory, even though it's global to main, and is set to 0, then changed by the user. Sometimes it's 3, sometimes it's 6, sometimes negative, etc... I've been breaking my head trying to figure out why it looses scope upon entering the while loop. as far as I know, it should keep it's scope even inside a loop, as it was declared before hand.
Code:
int main()
{
srand(time(0));//randomize seed
player players[7];
players[0].SetName("Dealer");
players[1].SetName("Player 1");
players[2].SetName("Player 2");
players[3].SetName("Player 3");
players[4].SetName("Player 4");
players[5].SetName("Player 5");
players[6].SetName("Player 6");
int numberofplayers=0;
do
{
cout<<"\nEnter number of players[1-6] #";
cin>>numberofplayers;
}while(numberofplayers<1 || numberofplayers>6);
int pot;
for(int i=1;i<=numberofplayers;i++)
{
pot=0;
do
{
cout<<"Enter pot for "<<players[i].GetName()<<"# ";
cin>>pot;
}while(pot<1);
players[i].SetPot(pot);
}
deck mydeck;
card mycard;
char playagain='y';
while(playagain=='y')
{
mydeck.refill();
mydeck.shuffle();
cout<<"players reset";getch(); //------------------debug
//reset players
for(int i=0;i<=numberofplayers;i++)players[i].reset();
cout<<"deal";getch(); //------------------debug
for(int i=0;(!mydeck.isempty() && i<2); i++)//deal 2 cards to each player
{
for(int ii=1;ii<=numberofplayers;ii++)
{
players[ii].ReceiveCard(mydeck.deal(true));
}
}
//dealer is different, as one card is flipped down
players[0].ReceiveCard(mydeck.deal(true));
players[0].ReceiveCard(mydeck.deal(false));
cout<<"\n\ntest:"<<numberofplayers<<"\n\n";
cout<<"bets";getch(); //------------------debug
//place bets
for(int i=1;i<=numberofplayers;i++)
{
if(!players[i].playing)continue;
int bet=0;
do
{
cout<<"Enter bet for "<<players[i].GetName()<<" (max "<<players[i].GetPot()<<")# ";
cin>>bet;
}while((bet<1)||(bet>players[i].GetPot()));
players[i].SetBet(bet);
}
bool gameover=false;
int playershit;
int playersleft=numberofplayers;
while(!gameover)
{
system("cls");
playershit=0;
//show all cards
for(int i=0;i<=numberofplayers;i++)
{
if(!players[i].playing)continue;
cout<<endl<<players[i].ShowHand()<<endl<<"Value: "<<players[i].gethandvalue();
if(players[i].gethandvalue()>21)
{
cout<<" - BUSTED!";
players[i].playing=false;
playersleft--;
}
cout<<"\n\n--------------\n";
}
//hit/stand
for(int i=1;i<=numberofplayers;i++)
{
if(!players[i].playing)continue;
char hs='0';
cout<<"\n"<<players[i].GetName()<<": it or [s]tand?# ";
cin>>hs;
if(hs=='h')
{players[i].ReceiveCard(mydeck.deal(true));
playershit++; }
}
if(playershit==0 || playersleft<=0)gameover=true;
players[0].flipnextcard();
if(players[0].gethandvalue()<15)players[0].ReceiveCard(mydeck.deal(true));
}
//determine winner:
player winner=players[0]; //automaticly assign dealer as winner by default
int winnerid=0;
//loop through players to find the one with highest score below 21
for(int i=1;i<=numberofplayers;i++)
{
if ((players[i].gethandvalue()>winner.gethandvalue()) &&(players[i].gethandvalue()<=21))winner = players[i];
{
winnerid=i;
}
}
cout<<"\n\n---------------------------\n\n"<<winner.GetName()<<" wins!\n"<<winner.ShowHand()<<"\nValue:"<<winner.gethandvalue()<<"\n";
//distribute funds
for(int i=0;i<=numberofplayers;i++)
{
if (i==winnerid)continue;
players[winnerid].WinBet(players[i].LooseBet());
}
cout<<"Would you like to play again(y/n)?";
do
{
playagain=getch();
}while (playagain!='y' && playagain!='n');
cout<<"\n\n\n";
}
system("PAUSE");
return 0;
}