Advertisement
tolem

blackjack refactored

Mar 15th, 2023
497
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.92 KB | Source Code | 0 0
  1. using System.Text;
  2. var deck = new List<KeyValuePair<string, int>>();
  3. var pickedCards = new List<KeyValuePair<string, int>>();
  4. new List<string> { "♠", "♥", "♦", "♣" }.ForEach(s => Enumerable.Range(2, 13).ToList().ForEach(n => deck.Add(new(s, n))));
  5. //for (int b = 0, a = 0, c = 0, k = 9, u = 0, p = k * k - 1, _ = deck.First().Value; u < 12; Write((
  6. //a == 0 | a == 8 | c == 0 | c == 8 ? "X" : a == k / 2 - 1 & c == k / 2 ? deck.First().Key : a == k / 2 & c == k / 2 ? _ == 10 ? "T" : _ == 11 ? "B" : _ == 12 ? "D" : _ == 13 ? "K" : _ == 14 ? "Á" : _ : " ") + (a == 8 ? "\n" : "")),
  7. //     a = b % k, c = b / k, deck.Remove(b == p ? deck.First() : new()), b = b++ == p ? 0 : b, _ = deck.First().Value, u += b == p ? _ == 14 ? u + 11 > 21 ? 1 : 11 : _ > 9 ? 10 : _ : 0) ;
  8.  
  9. const int size = 9;
  10. deck = Shuffle(deck);
  11. var cardsTotalValue = 0;
  12.  
  13. while (cardsTotalValue <= 11)
  14. {
  15.     var pickedCard = deck.First();
  16.     pickedCards.Add(pickedCard);
  17.     var cardString = DisplayCard(pickedCard, size);
  18.     cardsTotalValue = GetValue(pickedCards);
  19.     Console.WriteLine(cardString);
  20.     deck.Remove(pickedCard);
  21. }
  22.  
  23. Console.WriteLine($"Kártyák összértéke: {cardsTotalValue}\n");
  24. Console.WriteLine($"A következő lap ez lett volna: \n\n{DisplayCard(deck.First(),size)} ");
  25.  
  26. static int GetValue(List<KeyValuePair<string, int>> pickedCards)
  27. {
  28.     var result = 0;
  29.     foreach (var card in pickedCards)
  30.     {
  31.         switch (card.Value)
  32.         {
  33.             case <= 10:
  34.                 result += card.Value;
  35.                 break;
  36.             case <= 13:
  37.                 result += 10;
  38.                 break;
  39.         }
  40.     }
  41.     var aces = pickedCards.FindAll(c => c.Value == 14).ToList();
  42.     result += aces.Count;
  43.     if (aces.Count > 0 && result !<= 11)
  44.     {
  45.         result += 10;
  46.     }
  47.     return result;
  48. }
  49.  
  50. static List<KeyValuePair<string, int>> Shuffle(List<KeyValuePair<string, int>> deck)
  51. {
  52.     return deck.OrderBy(l => new Random().Next()).ToList();
  53. }
  54.  
  55. static string DisplayCard(KeyValuePair<string, int> card, int size)
  56. {
  57.     const char border = 'X';
  58.     const char space = ' ';
  59.     const char ten = 'T';
  60.     const char jack = 'J';
  61.     const char queen = 'D';
  62.     const char king = 'K';
  63.     const char ace = 'Á';
  64.  
  65.     var displayCard = new StringBuilder();
  66.     var endBorder = size - 1;
  67.     const int startBorder = 0;
  68.     var suitPlace = size / 2 - 1;
  69.     var center = size / 2;
  70.     for (var row = 0; row < size; row++)
  71.     {
  72.         for (var column = 0; column < size; column++)
  73.         {
  74.             if (row == startBorder || row == endBorder || column == startBorder || column == endBorder)
  75.             {
  76.                 displayCard.Append(border);
  77.             }
  78.             else if (row == center && column == suitPlace)
  79.             {
  80.                 displayCard.Append(card.Key);
  81.             }
  82.             else if (row == center && column == center)
  83.             {
  84.                 switch (card.Value)
  85.                 {
  86.                     case < 10:
  87.                         displayCard.Append(card.Value);
  88.                         break;
  89.                     case 10:
  90.                         displayCard.Append(ten);
  91.                         break;
  92.                     case 11:
  93.                         displayCard.Append(jack);
  94.                         break;
  95.                     case 12:
  96.                         displayCard.Append(queen);
  97.                         break;
  98.                     case 13:
  99.                         displayCard.Append(king);
  100.                         break;
  101.                     case 14:
  102.                         displayCard.Append(ace);
  103.                         break;
  104.                 }
  105.             }
  106.             else
  107.             {
  108.                 displayCard.Append(space);
  109.             }
  110.             if (column == endBorder)
  111.             {
  112.                 displayCard.Append(Environment.NewLine);
  113.             }
  114.         }
  115.     }
  116.     return displayCard.ToString();
  117. }
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement