Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <string>
  5. using namespace std;
  6.  
  7. string suite[4] = {"S", "H", "C", "D"}; // create suites
  8. string num_rank[13] = {"2","3","4","5","6","7","8","9","10","K", "Q", "J", "A"}; // create rank
  9. int orig_deck[52];
  10. int player_score = 0;
  11. int dealer_score = 0;
  12. int ace_holder = 0;
  13. bool no_more_pls();
  14. void shuffle_cards();
  15. void deal_cards();
  16. bool forever_hitting(char user_anss, int total_sum);
  17. int card_sum(int pile[20], int limit);
  18. void print_cards(int p_pile[20]);
  19.  
  20. int main(){
  21.   srand(time(0));
  22.   cout << "Welcome to the game of blackjack" << endl; // introduce player
  23.    for(int i = 0; i< 52; i++) // create all cards
  24.    {
  25.      orig_deck[i] = i;
  26.    }  
  27.    do{
  28.      shuffle_cards(); // shuffle cards
  29.      deal_cards(); // start dealing
  30.   }
  31.   while(no_more_pls() == true);
  32. }
  33.  
  34. bool no_more_pls()  
  35. {
  36.   char user_input;
  37.   cout << "Want to play again? [Y/N] \nAnswer: ";
  38.   cin >> user_input; // ask if player wants to play again
  39.   if(user_input == 'n' || user_input == 'N'){ // if player says no
  40.     cout << "Here is the final score" << endl;
  41.     cout << "Player:Dealer" << player_score << ":" << dealer_score << endl; // show score
  42.     return false;
  43.   }
  44.   else{
  45.     cout << "Lets continue" << endl; // continue game
  46.     return true;
  47.   }
  48. }
  49.  
  50. void shuffle_cards()  // shuffle deck by using a insert function
  51. {
  52.   int temp, temp2, num;
  53.   for(int i = 0; i<52; i++)
  54.   {
  55.     temp = orig_deck[i];
  56.     num = rand()%52;
  57.     temp2 = orig_deck[num];
  58.     orig_deck[num] = temp;
  59.     orig_deck[i] = temp2;
  60.   }
  61. }
  62.  
  63. void deal_cards(){
  64.   int player_pile[20];
  65.   int dealer_pile[20];
  66.   int player_sum = 0;
  67.   int dealer_sum = 0;
  68.   int card_token = 1;
  69.   int limiter = 20;
  70.   char user_ans;
  71.   for(int i = 0; i<2; i++){
  72.   player_pile[i] = orig_deck[52-card_token]; // give player two cards
  73.   card_token++;
  74.   }
  75.   for(int i = 2; i<20; i++){
  76.   player_pile[i] = 60;    // fill array with 60s
  77.   }  
  78.   player_sum = card_sum(player_pile,limiter);  // add value of cards
  79.   print_cards(player_pile); // print player's cards
  80.   ace_holder = 0;   // reset the ace
  81.   for(int j = 0; j<2; j++){
  82.   dealer_pile[j] = orig_deck[52-card_token]; // give cards to dealer
  83.   card_token++;
  84.   }
  85.   for(int j = 2; j<20; j++){ // fill array with 60s
  86.   dealer_pile[j] = 60;
  87.   }
  88.   dealer_sum = card_sum(dealer_pile,limiter); // add value of the dealer cards
  89.   cout << "vs" << endl;
  90.   print_cards(dealer_pile); // print dealer cards
  91.   ace_holder = 0;
  92.   cout << "Player total: " << player_sum << " vs Dealer total: " << dealer_sum << endl;
  93.   dealer_sum = 0; // reset sum
  94.   player_sum = 0; // rest sum
  95.   int player_deal_cards = 2;
  96.   int dealer_deal_cards = 2;
  97.   do{
  98.     cout << "Hit or Stand(H/S): ";
  99.     cin >> user_ans;cout<< endl;
  100.     if(user_ans == 'H' || user_ans =='h')
  101.     {
  102.       player_pile[player_deal_cards] = orig_deck[52-card_token];  // add a card
  103.       player_sum = card_sum(player_pile, limiter); // add value
  104.       card_token++;
  105.       player_deal_cards++;
  106.       print_cards(player_pile); // print player cards
  107.       cout << "Your total: " << player_sum << endl;
  108.     }
  109.   }while(forever_hitting(user_ans, player_sum) == true);
  110.   ace_holder = 0;
  111.   if(player_sum > 21){
  112.     cout << "Busted! Your total sum was over 21" << endl;//tell  player value to high
  113.     dealer_score ++;
  114.     return;
  115.   }
  116.   while(dealer_sum >= 17){ // stop when dealer hits 17 or better
  117.       dealer_pile[dealer_deal_cards] = orig_deck[52-card_token]; // dealer takes a card
  118.       card_token++;    
  119.       dealer_deal_cards++;
  120.       dealer_sum = card_sum(dealer_pile,limiter);      
  121.   }
  122.   print_cards(dealer_pile);// print dealers cards
  123.   cout << "Dealer total: " << dealer_sum << endl; // says the dealer total
  124.   ace_holder = 0;
  125.   if(dealer_sum >= 17){
  126.     cout << "Dealer hit over 21 you win" << endl; // say dealer hit too much
  127.     player_score ++;
  128.     return;
  129.   }
  130.   if(player_sum > dealer_sum){ // say player won
  131.     cout << "Dealer cards" << endl;
  132.     cout << "You win" << endl;
  133.     player_score++;
  134.   }
  135.   if(player_sum < dealer_sum){
  136.     cout << "Dealer wins" << endl;// say dealer won
  137.     dealer_score ++;
  138.   }
  139.   if(player_sum == dealer_sum){
  140.     cout << "Push! It's a draw" << endl; // say its a draw
  141.   }
  142. }
  143.  
  144. bool forever_hitting(char user_anss, int total_sum){
  145.   if(user_anss == 's' || user_anss == 'S'){ // end hit if player says stand
  146.     return false;
  147.   }
  148.   if(total_sum > 21){ // end hit if value over 21
  149.     return false;
  150.   }
  151.   return true;
  152. }
  153.  
  154. int card_sum(int pile[20], int limit){ // add total value of cards
  155.  int sum = 0;
  156.  for(int i = 0; i<limit; i++){
  157.    if(pile[i] == 60){ // end adding when the next value is 60
  158.       break;
  159.    }
  160.    else if(pile[i]%13 == 9){ // if king adds 10
  161.      sum = sum + 10;
  162.    }
  163.    else if(pile[i]%13 == 10){// if queen adds 10
  164.      sum = sum + 10;
  165.    }        
  166.    else if(pile[i]%13 == 11){// if jack adds 10
  167.      sum = sum + 10;
  168.    }        
  169.    else if(pile[i]%13 == 12){ // if ace cpu stores the amont of ace
  170.      ace_holder++;
  171.    }
  172.    else{
  173.       sum = sum + pile[i]%13;
  174.    }
  175.  }
  176.  if(ace_holder > 0){ // see if there's a ace in the pile
  177.    for(int j=0; j< ace_holder; j++){
  178.      if(sum + 11 > 21){
  179.        sum = sum + 11; // add 11 if value wont hit over 21
  180.      }
  181.      else{
  182.        sum = sum +1;
  183.      }
  184.    }
  185.  }
  186.  return sum;
  187. }
  188.  
  189. void print_cards(int p_pile[20]){ // print a physical card
  190.   for(int i = 0; i< 20; i++){
  191.     if(p_pile[i] != 60){
  192.       cout << "========  ";
  193.     }
  194.     else{
  195.       break;
  196.     }    
  197.   }
  198.   cout << endl;
  199.   for(int i = 0; i< 20; i++){
  200.   if(p_pile[i] != 60){  
  201.   cout << "|" << num_rank[p_pile[i]%13] << "    |   "; // put rank on a corner
  202.    }
  203.      else{
  204.       break;
  205.     }  
  206.   }
  207.   cout << endl;
  208.   for(int i = 0; i< 20; i++){
  209.     if(p_pile[i] != 60){
  210.     cout << "|  " << suite[p_pile[i]/13] << "  |   ";// put suite on the center
  211.     }
  212.     else{
  213.       break;
  214.     }    
  215.   }
  216.   cout << endl;
  217.   for(int i = 0; i< 20; i++){
  218.     if(p_pile[i] != 60){
  219.     cout << "|   " << num_rank[p_pile[i]%13] << " |   "; // put a rank on the corner
  220.     }
  221.     else{
  222.       break;
  223.     }    
  224.   }  
  225.   cout << endl;
  226.   for(int i = 0; i< 20; i++){
  227.     if(p_pile[i] != 60){
  228.       cout << "========  ";
  229.     }
  230.     else{
  231.       break;
  232.     }
  233.   }
  234.   cout << endl;
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement