#include <iostream>
#include <ctime>
#include <string>
using namespace std;
struct Blackjack
{
int player, card, cardDraw, currCount, p1Count, p2Count;
bool bust, p1Bust, p2Bust, autoWin, pvpDone;
};
void displayPlayer(Blackjack &);
void drawCard(Blackjack &);
void getCard(Blackjack &);
void displayCard(Blackjack &, string);
void endGame(Blackjack &);
void findWinner(Blackjack);
const int BUST = 22;
int main()
{
srand((unsigned int)time(NULL));
cout << "\n\n ===================\n";
cout << " *** Blackjack ***\n";
cout << " ===================\n\n";
Blackjack b = {0, 0, 0, 0, false, false, false, false};
displayPlayer(b);
return 0;
}
void displayPlayer(Blackjack & b)
{
b.player++;
b.card = 0;
cout << "\nPlayer " << b.player << "'s Turn!";
cout << "\n----------------\n\n";
drawCard(b);
}
void drawCard(Blackjack & b)
{
b.cardDraw = 1 + rand() % 13;
getCard(b);
}
void getCard(Blackjack & b)
{
string cardName = " ";
if (b.cardDraw == 1)
{
char aceVal = ' ';
cout << " Ace: (L/H)? ";
cin >> aceVal;
aceVal = toupper(aceVal);
cout << endl;
if (aceVal == 'L')
{
b.card++;
cardName = "Low Ace";
b.currCount += 1;
displayCard(b, cardName);
}
else if (aceVal == 'H')
{
b.card++;
cardName = "High Ace";
b.currCount += 11;
displayCard(b, cardName);
}
}
else if (b.cardDraw == 2)
{
b.card++;
cardName = "Two";
b.currCount += 2;
displayCard(b, cardName);
}
else if (b.cardDraw == 3)
{
b.card++;
cardName = "Three";
b.currCount += 3;
displayCard(b, cardName);
}
else if (b.cardDraw == 4)
{
b.card++;
cardName = "Four";
b.currCount += 4;
displayCard(b, cardName);
}
else if (b.cardDraw == 5)
{
b.card++;
cardName = "Five";
b.currCount += 5;
displayCard(b, cardName);
}
else if (b.cardDraw == 6)
{
b.card++;
cardName = "Six";
b.currCount += 6;
displayCard(b, cardName);
}
else if (b.cardDraw == 7)
{
b.card++;
cardName = "Seven";
b.currCount += 7;
displayCard(b, cardName);
}
else if (b.cardDraw == 8)
{
b.card++;
cardName = "Eight";
b.currCount += 8;
displayCard(b, cardName);
}
else if (b.cardDraw == 9)
{
b.card++;
cardName = "Nine";
b.currCount += 9;
displayCard(b, cardName);
}
else if (b.cardDraw == 10)
{
b.card++;
cardName = "Ten";
b.currCount += 10;
displayCard(b, cardName);
}
else if (b.cardDraw == 11)
{
b.card++;
cardName = "Jack";
b.currCount += 10;
displayCard(b, cardName);
}
else if (b.cardDraw == 12)
{
b.card++;
cardName = "Queen";
b.currCount += 10;
displayCard(b, cardName);
}
else if (b.cardDraw == 13)
{
b.card++;
cardName = "King";
b.currCount += 10;
displayCard(b, cardName);
}
}
void displayCard(Blackjack & b, string cardName)
{
char hit = ' ';
cout << " * Card " << b.card << ": ";
cout << cardName << endl << endl;
cout << " COUNT: ";
cout << b.currCount << endl << endl;
//---BUST---
if (b.card >= 2 && b.currCount >= BUST)
{
b.bust = true;
endGame(b);
}
//---NO BUST---
else if ((b.card >= 2 && b.card < 5) && b.currCount < BUST)
{
cout << " Hit (Y/N)? ";
cin >> hit;
cout << endl;
if (hit == 'y' || hit == 'Y')
drawCard(b);
else if (hit == 'n' || hit == 'N')
{
b.bust = false;
endGame(b);
}
}
else if (b.card == 5)
{
b.autoWin = true;
findWinner(b);
}
else
drawCard(b);
}
void endGame(Blackjack & b)
{
//------BUST------
if (b.bust == true)
{
if (b.pvpDone == false)
{
//PLAYER 1'S TURN IS OVER
cout << "===============\n";
cout << "Player 1 Busts!\n";
cout << "===============\n\n";
//PLAYER 2 WILL GO NEXT
b.p1Count = b.currCount;
b.currCount = 0;
b.pvpDone = true;
b.p1Bust = true;
displayPlayer(b);
}
else if (b.pvpDone == true)
{
//*END GAME*
cout << "===============\n";
cout << "Player 2 Busts!\n";
cout << "===============\n\n";
b.p2Count = b.currCount;
b.p2Bust = true;
b.autoWin = false;
findWinner(b);
}
}
//------NO BUST------
else
{
//PLAYER 1'S TURN IS OVER
if (b.pvpDone == false)
{
//PLAYER 2 WILL GO NEXT
b.p1Count = b.currCount;
b.currCount = 0;
b.pvpDone = true;
b.p1Bust = false;
displayPlayer(b);
}
//*END GAME*
else if (b.pvpDone == true)
{
b.p2Count = b.currCount;
b.p2Bust = false;
b.autoWin = false;
findWinner(b);
}
}
}
void findWinner(Blackjack b)
{
//A PLAYER GETS 5 CARDS
if (b.autoWin)
{
cout << "\n==============\n";
cout << "Five Cards!" << "\n\nPlayer ";
cout << b.player << " Wins!";
cout << "\n==============\n\n";
system("PAUSE");
exit(0);
}
//PLAYER 1 WINS, NO BUSTS
if (((b.p1Count > b.p2Count) && (!b.p1Bust && !b.p2Bust)) && !b.autoWin)
{
cout << "\n==============\n";
cout << "P1 Count: " << b.p1Count << "\nP2 Count: ";
cout << b.p2Count << "\n\nPlayer 1 Wins!";
cout << "\n==============\n\n";
system("PAUSE");
exit(0);
}
//PLAYER 2 WINS, NO BUSTS
else if (((b.p1Count < b.p2Count) && (!b.p1Bust && !b.p2Bust)) && !b.autoWin)
{
cout << "\n==============\n";
cout << "P1 Count: " << b.p1Count << "\nP2 Count: ";
cout << b.p2Count << "\n\nPlayer 2 Wins!";
cout << "\n==============\n\n";
system("PAUSE");
exit(0);
}
//TIE, NO BUSTS
else if (((b.p1Count == b.p2Count) && (!b.p1Bust && !b.p2Bust)) && !b.autoWin)
{
cout << "\n============\n";
cout << "P1 Count: " << b.p1Count << "\nP2 Count: ";
cout << b.p2Count << "\n\nIt's a Tie!";
cout << "\n============\n\n";
system("PAUSE");
exit(0);
}
//BOTH PLAYERS BUST
else if (((b.p1Bust && b.p2Bust) && (b.p1Count != b.p2Count)) && !b.autoWin)
{
cout << "\n==============\n";
cout << "P1 Count: " << "BUST" << "\nP2 Count: ";
cout << "BUST" << "\n\nNo Winner!";
cout << "\n==============\n\n";
system("PAUSE");
exit(0);
}
//PLAYER 1 BUSTS, PLAYER 2 WINS
else if ((b.p1Bust && !b.p2Bust) && !b.autoWin)
{
cout << "\n==============\n";
cout << "P1 Count: " << "BUST" << "\nP2 Count: ";
cout << b.p2Count << "\n\nPlayer 2 Wins!";
cout << "\n==============\n\n";
system("PAUSE");
exit(0);
}
//PLAYER 2 BUSTS, PLAYER 1 WINS
else if ((!b.p1Bust && b.p2Bust) && !b.autoWin)
{
cout << "\n==============\n";
cout << "P1 Count: " << b.p1Count << "\nP2 Count: ";
cout << "BUST" << "\n\nPlayer 1 Wins!";
cout << "\n==============\n\n";
system("PAUSE");
exit(0);
}
}