// crappy blackjack v2 // i can't get anywhere with more complicated projects // so i went all the way back to teenager-level shit // and made something as simple as possible // use this simple example and make it better // this is a simple blackjack game // added in v2: // - card faces // - ace rules // - dealer must stop at 17 or higher // - ties // - ugly back and forth, just show whoever's cards updating // rules: // https://bicyclecards.com/how-to-play/blackjack/ // missing: // - an actual deck // - splitting pairs // - double down // - insurance // - high score // crappy blackjack v1 https://pastebin.com/aX1RmFCM // crappy blackjack v2 https://pastebin.com/LJb2URb5 using System; using System.Collections.Generic; class Program { static Random random = new Random(); static List dealer_cards, player_cards; static int dealer, player; static bool hide_dealer_card; static void Main(string[] args) { Console.WriteLine("welcome to blackjack for toddlers"); int money = 100; while (money > 0) { Console.WriteLine(); // get bet before cards are dealt Console.WriteLine("moneys: " + money); int bet = 0; while (!(bet > 0 && bet <= money)) { Console.Write("bet (1.." + money + ")? "); string input = Console.ReadLine(); int.TryParse(input, out bet); } money -= bet; // deal cards hide_dealer_card = true; dealer_cards = new List(); dealer_cards.Add(deal_card()); dealer_cards.Add(deal_card()); dealer = cards_value(dealer_cards); player_cards = new List(); player_cards.Add(deal_card()); player_cards.Add(deal_card()); player = cards_value(player_cards); show_dealer_cards(); show_player_cards(); // player hit/stand input while (true) { // finish if he busts or gets natural 21 if (player >= 21) break; Console.Write("another card [y/n]? "); ConsoleKeyInfo key = Console.ReadKey(); Console.WriteLine(); if (key.Key == ConsoleKey.Y) { player_cards.Add(deal_card()); player = cards_value(player_cards); show_player_cards(); } // finish if he's done if (key.Key == ConsoleKey.N) break; } // let player know if he got natural 21 if (player == 21) Console.WriteLine("natural 21!"); hide_dealer_card = false; show_dealer_cards(); // let player know if he busted if (player > 21) Console.WriteLine("YOU BUSTED"); // do dealer's turn if he didn't bust if (player < 21) { // deal until 17 or higher while (dealer < 17) { dealer_cards.Add(deal_card()); dealer = cards_value(dealer_cards); show_dealer_cards(); } // let player know if dealer busted if (dealer > 21) Console.WriteLine("DEALER BUSTED"); } // dealer busted, or player won if (dealer > 21 || (player <= 21 && player > dealer)) { Console.WriteLine("you win " + (bet * 2) + " moneys!"); money += bet * 2; } // player busted, or dealer won if (player > 21 || (dealer <= 21 && player < dealer)) { Console.WriteLine("dealer wins."); } // tie if (player <= 21 && dealer <= 21 && player == dealer) { Console.WriteLine("you tied the dealer. you get your bet back."); money += bet; } } Console.WriteLine("you're all out of moneys. see ya next payday, sucker!"); Console.ReadKey(true); } static void show_dealer_cards() { Console.Write("dealer: "); if (hide_dealer_card) Console.Write("[?] "); else Console.Write(("[" + dealer_cards[0] + "]").PadRight(4)); for (int c = 1; c < dealer_cards.Count; c++) Console.Write(("[" + dealer_cards[c] + "]").PadRight(4)); if (hide_dealer_card) Console.WriteLine("?"); else Console.WriteLine("= " + dealer); } static void show_player_cards() { Console.Write("you: "); for (int c = 0; c < player_cards.Count; c++) Console.Write(("[" + player_cards[c] + "]").PadRight(4)); Console.WriteLine("= " + player); } // have to use strings because there's no single char for 10 static string deal_card() { string card = "\0"; int value = random.Next(1, 14); card = value.ToString(); if (value == 1) card = "A"; if (value == 11) card = "J"; if (value == 12) card = "Q"; if (value == 13) card = "K"; return card; } static int cards_value(List cards) { int total = 0; int aces = 0; for (int c = 0; c < cards.Count; c++) { int value = 0; int.TryParse(cards[c], out value); if (cards[c] == "A") { // only add 1s for now, we'll deal with 11s at the end value = 1; aces++; } if (cards[c] == "J" || cards[c] == "Q" || cards[c] == "K") value = 10; total += value; } // if there are any aces and our total is under 21 - 10, add 10 // we already added 1 for each ace, so we shouldnt add 11 for (int a = 0; a < aces; a++) if (total <= 21 - 10) total += 10; return total; } }