SteelGolem icon

crappy blackjack v2

SteelGolem | PRO | 05/18/21 01:35:22 AM UTC (Edited) | 0 ⭐ | 382 👁️ | Never ⏰ | []
C# |

6.2 KB

|

None

|

0 👍

/

0 👎

 
// 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<string> 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<string>();
            dealer_cards.Add(deal_card());
            dealer_cards.Add(deal_card());
            dealer = cards_value(dealer_cards);
            player_cards = new List<string>();
            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<string> 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;
    }
}
 

Comments