vovanhik_24

#41

Sep 30th, 2023 (edited)
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.74 KB | None | 0 0
  1.     internal class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             const string TakeCardCommand = "1";
  6.             const string EndGameCommand = "2";
  7.  
  8.             Player player = new Player();
  9.             Deck deck = new Deck();
  10.             Game game = new Game(player, deck);
  11.  
  12.             bool isWork = true;
  13.  
  14.             while (isWork)
  15.             {
  16.                 Console.WriteLine("====== Blackjack игра ========\n");
  17.                 Console.WriteLine($"{TakeCardCommand}. Вытянуть карту\n{EndGameCommand}. Остановиться\n");
  18.  
  19.                 player.ShowHand();
  20.  
  21.                 Console.Write("\nВыбирите действие: ");
  22.                 string userInput = Console.ReadLine();
  23.  
  24.                 switch (userInput)
  25.                 {
  26.                     case TakeCardCommand:
  27.                         game.PlayerTakeCard();
  28.                         break;
  29.  
  30.                     case EndGameCommand:
  31.                         game.ShowResultGame();
  32.                         isWork = false;
  33.                         break;
  34.  
  35.                     default:
  36.                         Console.WriteLine("Некорректный ввод");
  37.                         break;
  38.                 }
  39.  
  40.                 Console.ReadKey();
  41.                 Console.Clear();
  42.             }
  43.         }
  44.     }
  45.  
  46.     class Card
  47.     {
  48.         public Card(string name, int point)
  49.         {
  50.             Name = name;
  51.             Point = point;
  52.         }
  53.  
  54.         public string Name { get; private set; }
  55.         public int Point { get; private set; }
  56.     }
  57.  
  58.     class Deck
  59.     {
  60.         private List<Card> _cards = new List<Card>();
  61.         private Random _random = new Random();
  62.  
  63.         public Deck()
  64.         {
  65.             CreateDeck();
  66.             Shuffle();
  67.         }
  68.  
  69.         private void CreateDeck()
  70.         {
  71.             int _maxDeckSize = 12;
  72.  
  73.             for (int i = 0; i < _maxDeckSize; i++)
  74.             {
  75.                 _cards.Add(new Card($"Карта {i + 1}", AddCardPoints()));
  76.             }
  77.         }
  78.  
  79.         private int AddCardPoints()
  80.         {
  81.             int minPoint = 1;
  82.             int maxPoint = 11;
  83.             int point = _random.Next(minPoint, maxPoint);
  84.             return point;
  85.         }
  86.  
  87.         private void Shuffle()
  88.         {
  89.             for (int i = _cards.Count - 1; i >= 1; i--)
  90.             {
  91.                 int randomCardPosition = _random.Next(i + 1);
  92.  
  93.                 (_cards[i], _cards[randomCardPosition]) = (_cards[randomCardPosition], _cards[i]);
  94.             }
  95.         }
  96.  
  97.         public bool TryGetCard(out Card currentCard)
  98.         {
  99.             currentCard = null;
  100.  
  101.             if (_cards.Count > 0)
  102.             {
  103.                 currentCard = _cards[0];
  104.                 _cards.Remove(currentCard);
  105.                 return true;
  106.             }
  107.  
  108.             return false;
  109.         }
  110.     }
  111.  
  112.     class Player
  113.     {
  114.         private List<Card> _hand = new List<Card>();
  115.  
  116.         public int GetCountPoints()
  117.         {
  118.             int countPoints = 0;
  119.  
  120.             for (int i = 0; i < _hand.Count; i++)
  121.             {
  122.                 countPoints += _hand[i].Point;
  123.             }
  124.  
  125.             return countPoints;
  126.         }
  127.  
  128.         public void TakeCard(Card card)
  129.         {
  130.             _hand.Add(card);
  131.         }
  132.  
  133.         public void ShowHand()
  134.         {
  135.             Console.WriteLine("Ваши карты:");
  136.             foreach (Card card in _hand)
  137.             {
  138.                 Console.WriteLine(card.Name);
  139.             }
  140.  
  141.             Console.WriteLine($"Всего очков: {GetCountPoints()}");
  142.         }
  143.     }
  144.  
  145.     class Game
  146.     {
  147.         private Player _player;
  148.         private Deck _deck;
  149.  
  150.         public Game(Player player, Deck deck)
  151.         {
  152.             _player = player;
  153.             _deck = deck;
  154.         }
  155.  
  156.         public void PlayerTakeCard()
  157.         {
  158.             if (_deck.TryGetCard(out Card card))
  159.             {
  160.                 _player.TakeCard(card);
  161.             }
  162.             else
  163.             {
  164.                 Console.WriteLine("В колоде закончились карты");
  165.             }
  166.         }
  167.  
  168.         public void ShowResultGame()
  169.         {
  170.             int playerPoints = _player.GetCountPoints();
  171.             int maxPointsToWin = 21;
  172.  
  173.             if (playerPoints <= maxPointsToWin)
  174.             {
  175.                 Console.WriteLine($"Вы набрали {playerPoints} очков");
  176.                 Console.WriteLine("Вы выиграли!");
  177.             }
  178.             else
  179.             {
  180.                 Console.WriteLine($"Вы набрали {playerPoints} очков");
  181.                 Console.WriteLine("Вы проиграли!");
  182.             }
  183.         }
  184.     }
Add Comment
Please, Sign In to add comment