// 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