SteelGolem

crappy blackjack v2

May 17th, 2021 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.20 KB | None | 0 0
  1.  
  2. // crappy blackjack v2
  3.  
  4. // i can't get anywhere with more complicated projects
  5. // so i went all the way back to teenager-level shit
  6. // and made something as simple as possible
  7.  
  8. // use this simple example and make it better
  9.  
  10. // this is a simple blackjack game
  11.  
  12. // added in v2:
  13. // - card faces
  14. // - ace rules
  15. // - dealer must stop at 17 or higher
  16. // - ties
  17. // - ugly back and forth, just show whoever's cards updating
  18.  
  19. // rules:
  20. // https://bicyclecards.com/how-to-play/blackjack/
  21.  
  22. // missing:
  23. // - an actual deck
  24. // - splitting pairs
  25. // - double down
  26. // - insurance
  27. // - high score
  28.  
  29. // crappy blackjack v1 https://pastebin.com/aX1RmFCM
  30. // crappy blackjack v2 https://pastebin.com/LJb2URb5
  31.  
  32. using System;
  33. using System.Collections.Generic;
  34.  
  35. class Program
  36. {
  37.     static Random random = new Random();
  38.  
  39.     static List<string> dealer_cards, player_cards;
  40.     static int dealer, player;
  41.     static bool hide_dealer_card;
  42.  
  43.     static void Main(string[] args)
  44.     {
  45.         Console.WriteLine("welcome to blackjack for toddlers");
  46.         int money = 100;
  47.         while (money > 0)
  48.         {
  49.             Console.WriteLine();
  50.             // get bet before cards are dealt
  51.             Console.WriteLine("moneys: " + money);
  52.             int bet = 0;
  53.             while (!(bet > 0 && bet <= money))
  54.             {
  55.                 Console.Write("bet (1.." + money + ")? ");
  56.                 string input = Console.ReadLine();
  57.                 int.TryParse(input, out bet);
  58.             }
  59.             money -= bet;
  60.             // deal cards
  61.             hide_dealer_card = true;
  62.             dealer_cards = new List<string>();
  63.             dealer_cards.Add(deal_card());
  64.             dealer_cards.Add(deal_card());
  65.             dealer = cards_value(dealer_cards);
  66.             player_cards = new List<string>();
  67.             player_cards.Add(deal_card());
  68.             player_cards.Add(deal_card());
  69.             player = cards_value(player_cards);
  70.             show_dealer_cards();
  71.             show_player_cards();
  72.             // player hit/stand input
  73.             while (true)
  74.             {
  75.                 // finish if he busts or gets natural 21
  76.                 if (player >= 21) break;
  77.                 Console.Write("another card [y/n]? ");
  78.                 ConsoleKeyInfo key = Console.ReadKey();
  79.                 Console.WriteLine();
  80.                 if (key.Key == ConsoleKey.Y)
  81.                 {
  82.                     player_cards.Add(deal_card());
  83.                     player = cards_value(player_cards);
  84.                     show_player_cards();
  85.                 }
  86.                 // finish if he's done
  87.                 if (key.Key == ConsoleKey.N) break;
  88.             }
  89.             // let player know if he got natural 21
  90.             if (player == 21)
  91.                 Console.WriteLine("natural 21!");
  92.             hide_dealer_card = false;
  93.             show_dealer_cards();
  94.             // let player know if he busted
  95.             if (player > 21)
  96.                 Console.WriteLine("YOU BUSTED");
  97.             // do dealer's turn if he didn't bust
  98.             if (player < 21)
  99.             {
  100.                 // deal until 17 or higher
  101.                 while (dealer < 17)
  102.                 {
  103.                     dealer_cards.Add(deal_card());
  104.                     dealer = cards_value(dealer_cards);
  105.                     show_dealer_cards();
  106.                 }
  107.                 // let player know if dealer busted
  108.                 if (dealer > 21)
  109.                     Console.WriteLine("DEALER BUSTED");
  110.             }
  111.             // dealer busted, or player won
  112.             if (dealer > 21 || (player <= 21 && player > dealer))
  113.             {
  114.                 Console.WriteLine("you win " + (bet * 2) + " moneys!");
  115.                 money += bet * 2;
  116.             }
  117.             // player busted, or dealer won
  118.             if (player > 21 || (dealer <= 21 && player < dealer))
  119.             {
  120.                 Console.WriteLine("dealer wins.");
  121.             }
  122.             // tie
  123.             if (player <= 21 && dealer <= 21 && player == dealer)
  124.             {
  125.                 Console.WriteLine("you tied the dealer. you get your bet back.");
  126.                 money += bet;
  127.             }
  128.         }
  129.         Console.WriteLine("you're all out of moneys. see ya next payday, sucker!");
  130.         Console.ReadKey(true);
  131.     }
  132.  
  133.     static void show_dealer_cards()
  134.     {
  135.         Console.Write("dealer: ");
  136.         if (hide_dealer_card) Console.Write("[?] ");
  137.         else Console.Write(("[" + dealer_cards[0] + "]").PadRight(4));
  138.         for (int c = 1; c < dealer_cards.Count; c++)
  139.             Console.Write(("[" + dealer_cards[c] + "]").PadRight(4));
  140.         if (hide_dealer_card) Console.WriteLine("?");
  141.         else Console.WriteLine("= " + dealer);
  142.     }
  143.  
  144.     static void show_player_cards()
  145.     {
  146.         Console.Write("you:    ");
  147.         for (int c = 0; c < player_cards.Count; c++)
  148.             Console.Write(("[" + player_cards[c] + "]").PadRight(4));
  149.         Console.WriteLine("= " + player);
  150.     }
  151.  
  152.     // have to use strings because there's no single char for 10
  153.     static string deal_card()
  154.     {
  155.         string card = "\0";
  156.         int value = random.Next(1, 14);
  157.         card = value.ToString();
  158.         if (value == 1) card = "A";
  159.         if (value == 11) card = "J";
  160.         if (value == 12) card = "Q";
  161.         if (value == 13) card = "K";
  162.         return card;
  163.     }
  164.  
  165.     static int cards_value(List<string> cards)
  166.     {
  167.         int total = 0;
  168.         int aces = 0;
  169.         for (int c = 0; c < cards.Count; c++)
  170.         {
  171.             int value = 0;
  172.             int.TryParse(cards[c], out value);
  173.             if (cards[c] == "A")
  174.             {
  175.                 // only add 1s for now, we'll deal with 11s at the end
  176.                 value = 1;
  177.                 aces++;
  178.             }
  179.             if (cards[c] == "J" ||
  180.                 cards[c] == "Q" ||
  181.                 cards[c] == "K")
  182.                 value = 10;
  183.             total += value;
  184.         }
  185.         // if there are any aces and our total is under 21 - 10, add 10
  186.         // we already added 1 for each ace, so we shouldnt add 11
  187.         for (int a = 0; a < aces; a++)
  188.             if (total <= 21 - 10) total += 10;
  189.         return total;
  190.     }
  191. }
  192.  
Add Comment
Please, Sign In to add comment