NikaBang

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

Nov 16th, 2025 (edited)
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.33 KB | Gaming | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Reflection;
  5.  
  6. internal class Program
  7. {
  8.     static void Main(string[] args)
  9.     {
  10.         const string CommandDealCardToPlayer = "1";
  11.         const string CommandShowCardPlayer = "2";
  12.         const string CommandExit = "Exit";
  13.  
  14.         bool isRun = true;
  15.  
  16.         Dealer dealer = new Dealer();
  17.         dealer.ShuffleDeck();
  18.  
  19.         while (isRun)
  20.         {
  21.             Console.Clear();
  22.  
  23.             Console.WriteLine($"{CommandDealCardToPlayer} - Дать карты играку." +
  24.                 $"\n{CommandShowCardPlayer} - Показать карты игрока." +
  25.                 $"\n{CommandExit} - Завершить программу.");
  26.  
  27.             switch (Console.ReadLine())
  28.             {
  29.                 case CommandDealCardToPlayer:
  30.                     dealer.DealCardToPlayer();
  31.                     break;
  32.  
  33.                 case CommandShowCardPlayer:
  34.                     dealer.ShowPlayerCard();
  35.                     break;
  36.  
  37.                 case CommandExit:
  38.                     isRun = false;
  39.                     break;
  40.  
  41.                 default:
  42.                     Console.WriteLine("Ошибка ввода.");
  43.                     break;
  44.             }
  45.         }
  46.  
  47.         Console.WriteLine("Программа завершена.");
  48.         Console.ReadKey();
  49.     }
  50. }
  51.  
  52. enum Suit
  53. {
  54.     Hearts,
  55.     Diamonds,
  56.     Clubs,
  57.     Spades
  58. }
  59.  
  60. enum Rank
  61. {
  62.     Two,
  63.     Three,
  64.     Four,
  65.     Five,
  66.     Six,
  67.     Seven,
  68.     Eight,
  69.     Nine,
  70.     Ten,
  71.     Jack,
  72.     Queen,
  73.     King,
  74.     Ace
  75. }
  76.  
  77. class Dealer
  78. {
  79.     private Player _player;
  80.     private Deck _deckCard;
  81.  
  82.     public Dealer()
  83.     {
  84.         _player = new Player();
  85.         _deckCard = new Deck();
  86.     }
  87.  
  88.     public void ShowPlayerCard()
  89.     {
  90.         _player.ShowCards();
  91.  
  92.         Console.ReadKey();
  93.     }
  94.  
  95.     public void DealCardToPlayer()
  96.     {
  97.         string userInput;
  98.  
  99.         Console.Write("Сколько карт передать? ");
  100.         userInput = Console.ReadLine();
  101.  
  102.         int numberCards = ReadInt(userInput);
  103.  
  104.         for (int i = 0; i < numberCards; i++)
  105.         {
  106.             if (_deckCard.TryDealCard(out Card card))
  107.             {
  108.                 _player.GetCard(card);
  109.             }
  110.             else
  111.             {
  112.                 Console.WriteLine("В колоде не осталсь карт.");
  113.                 break;
  114.             }
  115.         }
  116.  
  117.         Console.ReadKey();
  118.     }
  119.  
  120.     public void ShuffleDeck()
  121.     {
  122.         _deckCard.Shuffle();
  123.     }
  124.  
  125.     private int ReadInt(string input)
  126.     {
  127.         int result;
  128.  
  129.         int.TryParse(input, out result);
  130.         return result;
  131.     }
  132. }
  133.  
  134. class Player
  135. {
  136.     private List<Card> _cards;
  137.  
  138.     public Player()
  139.     {
  140.         _cards = new List<Card>();
  141.     }
  142.  
  143.     public void ShowCards()
  144.     {
  145.         Console.WriteLine("У игрока на руках:");
  146.  
  147.         foreach (Card card in _cards)
  148.         {
  149.             Console.WriteLine(card);
  150.         }
  151.     }
  152.  
  153.     public void GetCard(Card card)
  154.     {
  155.         _cards.Add(card);
  156.     }
  157. }
  158.  
  159. class Card
  160. {
  161.     public Card(Suit suit, Rank rank)
  162.     {
  163.         Suit = suit;
  164.         Rank = rank;
  165.     }
  166.  
  167.     public Suit Suit { get; private set; }
  168.     public Rank Rank { get; private set; }
  169.  
  170.     public override string ToString()
  171.     {
  172.         return $"{Rank} {Suit}";
  173.     }
  174. }
  175.  
  176. class Deck
  177. {
  178.     private static Random s_random = new Random();
  179.     private List<Card> _cards = new List<Card>();
  180.  
  181.     public Deck()
  182.     {
  183.         foreach (Suit suit in Enum.GetValues(typeof(Suit)))
  184.         {
  185.             foreach (Rank rank in Enum.GetValues(typeof(Rank)))
  186.             {
  187.                 _cards.Add(new Card(suit, rank));
  188.             }
  189.         }
  190.     }
  191.  
  192.     public void Shuffle()
  193.     {
  194.         for (int i = _cards.Count - 1; i > 0; i--)
  195.         {
  196.             int index = s_random.Next(i + 1);
  197.             (_cards[i], _cards[index]) = (_cards[index], _cards[i]);
  198.         }
  199.     }
  200.  
  201.     public bool TryDealCard(out Card card)
  202.     {
  203.         if (_cards.Count == 0)
  204.         {
  205.             card = null;
  206.             return false;
  207.         }
  208.  
  209.         int lastIndex = _cards.Count - 1;
  210.         card = _cards[lastIndex];
  211.  
  212.         _cards.RemoveAt(lastIndex);
  213.  
  214.         return true;
  215.     }
  216. }
Advertisement
Add Comment
Please, Sign In to add comment