Advertisement
TeT91

ДЗ Колода карт

May 27th, 2024 (edited)
506
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.68 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace CSLight
  5. {
  6.     internal class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Player player = new Player();
  11.             Table table = new Table();
  12.  
  13.             Console.WriteLine("Сколько карт дать игроку?");
  14.  
  15.             string userInput = Console.ReadLine();
  16.  
  17.             if (int.TryParse(userInput, out int count))
  18.             {
  19.                 table.TransferCardsToPlayer(count, player);
  20.             }
  21.  
  22.             player.ShowCards();
  23.             Console.ReadKey();
  24.         }
  25.     }
  26.  
  27.     class Table
  28.     {
  29.         private Deck _deck = new Deck();
  30.  
  31.         public void TransferCardsToPlayer(int count, Player player)
  32.         {
  33.             if (count > 0)
  34.             {
  35.                 if (count > _deck.GetCardsCount())
  36.                 {
  37.                     count = _deck.GetCardsCount();
  38.                     Console.WriteLine($"В колоде недостаточно карт. Будет выдано {count} карт");
  39.                 }
  40.  
  41.                 for (int i = 0; i < count; i++)
  42.                 {
  43.                     player.AddCard(_deck.GiveCard());
  44.                 }
  45.             }
  46.             else
  47.             {
  48.                 Console.WriteLine("НЕВЕРНЫЙ ВВОД");
  49.             }
  50.         }
  51.     }
  52.  
  53.     class Player
  54.     {
  55.         private List<Card> _cards = new List<Card>();
  56.  
  57.         public void AddCard(Card card)
  58.         {
  59.             if (card != null)
  60.             {
  61.                 _cards.Add(card);
  62.             }
  63.         }
  64.  
  65.         public void ShowCards()
  66.         {
  67.             Console.WriteLine("Карты на руке игрока: ");
  68.  
  69.             foreach (Card card in _cards)
  70.             {
  71.                 Console.Write(card.Suit + " " + card.Value + " ");
  72.             }
  73.         }
  74.     }
  75.  
  76.     class Deck
  77.     {
  78.         private Random _random;
  79.  
  80.         private Stack<Card> _cards;
  81.  
  82.         public Deck()
  83.         {
  84.             _cards = new Stack<Card>();
  85.             _random = new Random();
  86.  
  87.             Generate();
  88.             Shuffle();
  89.         }
  90.  
  91.         public int MaxCardsCount { get; private set; }
  92.  
  93.         public int GetCardsCount()
  94.         {
  95.             return _cards.Count;
  96.         }
  97.  
  98.         public Card GiveCard()
  99.         {
  100.             return _cards.Pop();
  101.         }
  102.  
  103.         private void Generate()
  104.         {
  105.             string[] suits = { "♠", "♣", "♦", "♥" };
  106.             string[] values = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace" };
  107.  
  108.             for (int i = 0; i < suits.Length; i++)
  109.             {
  110.                 for (int j = 0; j < values.Length; j++)
  111.                 {
  112.                     _cards.Push(new Card(suits[i], values[j]));
  113.                 }
  114.             }
  115.         }
  116.  
  117.         private void Shuffle()
  118.         {
  119.             Card[] tempArray = _cards.ToArray();
  120.  
  121.             for (int i = 0; i < tempArray.Length; i++)
  122.             {
  123.                 Card tempCard;
  124.                 int randomIndex = _random.Next(tempArray.Length);
  125.                 tempCard = tempArray[randomIndex];
  126.                 tempArray[randomIndex] = tempArray[i];
  127.                 tempArray[i] = tempCard;
  128.             }
  129.  
  130.             _cards = new Stack<Card>();
  131.  
  132.             foreach (Card card in tempArray)
  133.             {
  134.                 _cards.Push(card);
  135.             }
  136.         }
  137.     }
  138.  
  139.     class Card
  140.     {
  141.         public Card(string suit, string value)
  142.         {
  143.             Suit = suit;
  144.             Value = value;
  145.         }
  146.  
  147.         public string Suit { get; private set; }
  148.         public string Value { get; private set; }
  149.     }
  150. }
  151.  
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement