using System; using System.Collections.Generic; using System.Text; namespace Blackjack { class Program { static void Main(string[] args) { Card fiveC = new Card("5", "Clubs"); //New instance from a new constructor fiveC.display(); Card twoH = new Card("2", "Hearts"); twoH.display(); Card aceD = new Card("Ace", "Diamonds"); aceD.display(); } } class Card { private string name; private int value; //Instance variable of the card class private string suit; //Instance variable of the card class public Card(string name, string suit) { this.name = name; this.suit = suit; if(name.Equals("Ace")) { value=11; } else if (name.Equals("King") || name.Equals("Queen") || name.Equals("Jack")) { value = 10; } else { value = Convert.ToInt16(name); } } public void display() { Console.WriteLine(name + " of " + suit); } public string getName() { return name; } public int getValue() { return value; } public string getSuit() { return suit; } } class Deck { private Card[] cards = new Card[52]; private int top = 0; public Deck() { string[] suits = ("Hearts,Diamonds,Spades,Clubs").Split(","); string[] names = ("1,2,3,4,5,6,7,8,9,10,Jack,Queen,King,Ace").Split(","); int pos = 0; for (int i = 0; i < names.Length(); i++) { for (int j = 0; j < suits.Length(); j++) { cards[pos] = new Card(names[i], suits[j]); pos++; } } } private void Swap() { Random r = new Random(); int pos1 = r.Next(0, 52); int pos2 = r.Next(0, 52); Card temp = cards[pos1]; cards[pos1] = cards[pos2]; cards[pos2] = temp; } public void shuffle() { for (int i = 0; i < 500; i++) { this.Swap(); } top = 0; } public Card getCard() { if (top==52) { this.shuffle(); } top++; return cards[top - 1]; } } class Hand { private Card[] cards = new Card[21]; private int cnt = 0; //Constructor Created for us because we need nothing public void addCard(Card c) { cards[cnt%cards.Length] = c; cnt++; } public int[] getValues() { int sum = 0; int numAces = 0; for (int i = 0; i < cnt; i++) { if (cards[i].getValue() = 11) { numAces++; } else { sum += cards[i].getValue(); } } int[] vals = new int[numAces + 1]; for (int i = 0; i < vals.Length; i++) { vals[i] = sum + (numAces + (i * 10)); } return vals; } public void display() { for (int i = 0; i < cnt; i++) { cards[i].display(); } } } class Player { private Hand h = new Hand(); private String name; public Player(String name) { this.name.Equals(name); } protected void addCard(Card c) { h.addCard(c); } protected void display() { h.display(); } protected void reset() { h = new Hand(); } protected int getValue() { int[] vals = h.getValues(); Array.Sort(vals); int max = vals[0]; for (int i = 0; i < vals.Length; i++) { if (vals[i] <= 21) { max = vals[i]; } } return max; } protected String getName() { return name; } } class Dealer : Player { Player[] players = new Player[1]; Deck d = new Deck(); public Dealer(String name) { super(name); players[0] = this; } public void addPlayer(Player p) { Player[] temp = new Player[players.Length + 1]; for (int i = 0; i < players.Length; i++) { temp[i] = players[i]; } players = temp; } public void shuffle() { d.shuffle(); } public void deal() { this.shuffle(); for (int i = 0; i < 2; i++) { for (int j = 0; j < players.Length; j++) { players[j].addCard(d.getCard()); } } } public void reset() { for (int i = 0; i < players.Length; i++) { players[i].reset(); } } public Player determineWinner() { //Do this for an assignment } } }