Advertisement
VodVas

Колода карт

Oct 11th, 2023 (edited)
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.26 KB | Software | 0 0
  1. using System;
  2. using System.Numerics;
  3. using System.Reflection.Emit;
  4. using System.Runtime.CompilerServices;
  5. using System.Text;
  6.  
  7.  
  8.  
  9. namespace Колода_карт
  10. {
  11.     internal class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             bool isRun = true;
  16.  
  17.             while (isRun)
  18.             {
  19.                 GameLogic gameLogic = new GameLogic();
  20.                 Deck deck = new Deck();
  21.  
  22.                 Console.CursorVisible = false;
  23.  
  24.                 string symbols = new string('=', 20);
  25.  
  26.                 Console.WriteLine($"\n\n{symbols}   Игра в 21!   {symbols}\n\nНабери 21 очко, или больше очков, чем у соперника, (но не больше 21)!\n" +
  27.                     "Валет - 2 очка, Дама - 3 очка, Король - 4 очка, Туз - 11 очков, остальные по номиналу.");
  28.  
  29.                 Console.ForegroundColor = ConsoleColor.Yellow;
  30.                 Console.WriteLine("Жми 'ПРОБЕЛ', что бы начать. Жми 'ENTER', когда захочешь передать ход сопернику, для выхода нажми 'ESCAPE'");
  31.                 Console.ForegroundColor = ConsoleColor.White;
  32.  
  33.                 deck.FillDeck();
  34.                 gameLogic.Game(deck.Cards);
  35.  
  36.                 Console.SetCursorPosition(60, 8);
  37.                 Console.Write("Нажми любую клавишу для продолжения, 'ESCAPE' для выхода");
  38.                 ConsoleKeyInfo charKey = Console.ReadKey();
  39.  
  40.                 switch (charKey.Key)
  41.                 {
  42.                     case ConsoleKey.Escape:
  43.                         isRun = false;
  44.                         break;
  45.  
  46.                     default:
  47.                        break;
  48.                 }
  49.  
  50.                 Console.SetCursorPosition(0, 0);
  51.                 Console.Clear();
  52.             }
  53.         }
  54.     }
  55.  
  56.     class Deck
  57.     {
  58.         public List<Card> Cards = new List<Card>();
  59.         public List<Card> PlayerCards = new List<Card>();
  60.         public List<Card> OpponentCards = new List<Card>();
  61.  
  62.         private string[] _rank = { "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
  63.         private char[] _suits = { '♣', '♦', '♥', '♠' };
  64.         private int[] _price = { 6, 7, 8, 9, 10, 2, 3, 4, 11 };
  65.  
  66.         public void FillDeck()
  67.         {
  68.             for (int i = 0; i < _rank.Length; i++)
  69.             {
  70.                 for (int j = 0; j < _suits.Length; j++)
  71.                 {
  72.                     AssignPrice(_rank, _suits, i, j, "6", 0);
  73.  
  74.                     AssignPrice(_rank, _suits, i, j, "7", 1);
  75.  
  76.                     AssignPrice(_rank, _suits, i, j, "8", 2);
  77.  
  78.                     AssignPrice(_rank, _suits, i, j, "9", 3);
  79.  
  80.                     AssignPrice(_rank, _suits, i, j, "10", 4);
  81.  
  82.                     AssignPrice(_rank, _suits, i, j, "J", 5);
  83.  
  84.                     AssignPrice(_rank, _suits, i, j, "Q", 7);
  85.  
  86.                     AssignPrice(_rank, _suits, i, j, "K", 7);
  87.  
  88.                     AssignPrice(_rank, _suits, i, j, "A", 8);
  89.                 }
  90.             }
  91.         }
  92.  
  93.         private void AssignPrice(string[] _rank, char[] _suits, int i, int j, string rank, int increment)
  94.         {
  95.             if (_rank[i] == rank)
  96.             {
  97.                 for (int k = increment; k < _price.Length;)
  98.                 {
  99.                     Cards.Add(new Card(_rank[i], _suits[j], _price[k]));
  100.                     break;
  101.                 }
  102.             }
  103.         }
  104.     }
  105.  
  106.     class Card
  107.     {
  108.         public string Rank { get; private set; }
  109.         public char Suit { get; private set; }
  110.         public int Price { get; private set; }
  111.  
  112.         public List<Card> PlayerCards = new List<Card>();
  113.         public List<Card> OpponentCards = new List<Card>();
  114.  
  115.         public Card(string rank, char suit, int price)
  116.         {
  117.             Rank = rank;
  118.             Suit = suit;
  119.             Price = price;
  120.         }
  121.  
  122.         public void ShowCardInfo(Card card, int positionX, int positionY)
  123.         {
  124.             Console.SetCursorPosition(positionX, positionY);
  125.             Console.Write($"{card.Rank} {card.Suit} (количество очков {card.Price})");
  126.         }
  127.     }
  128.  
  129.     class GameLogic
  130.     {
  131.         private List<Card> _playerCards = new List<Card>();
  132.         private List<Card> _opponentCards = new List<Card>();
  133.  
  134.         private int _playerCount = 0;
  135.         private int _opponentCount = 0;
  136.         private int _infoLinePositionPlayerY = 8;
  137.         private int _infoLinePositionOpponentY = 8;
  138.         private int _indentPlayerCardX = 50;
  139.         private int _indentOpponentCardX = 50;
  140.         private int _positionCardPlayerX = 14;
  141.         private int _positionCardPlayerY = 13;
  142.         private int _positionCardOpponentX = 14;
  143.         private int _positionCardOpponentY = 23;
  144.  
  145.         private bool _isRun = true;
  146.  
  147.         Random random = new Random();
  148.  
  149.         public void Game(List<Card> cards)
  150.         {
  151.             while (_isRun)
  152.             {
  153.                 ConsoleKeyInfo charKey = Console.ReadKey();
  154.  
  155.                 switch (charKey.Key)
  156.                 {
  157.                     case ConsoleKey.Spacebar:
  158.                         PlayerTurn(cards);
  159.                         break;
  160.  
  161.                     case ConsoleKey.Enter:
  162.                         OpponentTurn(cards);
  163.                         break;
  164.  
  165.                     case ConsoleKey.Escape:
  166.                         _isRun = false;
  167.                         break;
  168.  
  169.                     default:
  170.                         Console.SetCursorPosition(0, 6);
  171.                         Console.ForegroundColor = ConsoleColor.Yellow;
  172.                         Console.WriteLine("Жми 'ПРОБЕЛ', что бы начать. Жми 'ENTER', когда захочешь передать ход сопернику, для выхода нажми 'ESCAPE'");
  173.                         Console.ForegroundColor = ConsoleColor.White;
  174.                         break;
  175.                 }
  176.             }
  177.         }
  178.  
  179.         private void PlayerTurn(List<Card> cards)
  180.         {
  181.             int randomIndexPlayer = random.Next(cards.Count);
  182.             Card randomCardPlayer = cards[randomIndexPlayer];
  183.  
  184.             cards.Remove(randomCardPlayer);
  185.  
  186.             _playerCount += randomCardPlayer.Price;
  187.  
  188.             _playerCards.Add(randomCardPlayer);
  189.  
  190.             Console.SetCursorPosition(0, 7);
  191.             Console.ForegroundColor = ConsoleColor.DarkYellow;
  192.             Console.WriteLine($"Твои карты:  Общий счет ({_playerCount})");
  193.             Console.ForegroundColor = ConsoleColor.White;
  194.  
  195.             SaveCardPosition(randomCardPlayer, _indentPlayerCardX, _positionCardPlayerX, _positionCardPlayerY);
  196.             _indentPlayerCardX -= 12;
  197.  
  198.             randomCardPlayer.ShowCardInfo(randomCardPlayer, 0, _infoLinePositionPlayerY);
  199.             _infoLinePositionPlayerY += 1;
  200.  
  201.             if (_playerCount > 21)
  202.             {
  203.                 Console.SetCursorPosition(30, 13);
  204.                 Console.ForegroundColor = ConsoleColor.Cyan;
  205.                 Console.WriteLine("Перебор. Ты проиграл..");
  206.                 Console.ForegroundColor = ConsoleColor.White;
  207.                 _isRun = false;
  208.             }
  209.         }
  210.  
  211.         private void OpponentTurn(List<Card> cards)
  212.         {
  213.             while (_opponentCount < 19)
  214.             {
  215.                 int randomIndexOpponent = random.Next(cards.Count);
  216.                 Card randomCardOpponent = cards[randomIndexOpponent];
  217.  
  218.                 cards.Remove(randomCardOpponent);
  219.  
  220.                 _opponentCount += randomCardOpponent.Price;
  221.  
  222.                 _opponentCards.Add(randomCardOpponent);
  223.  
  224.                 Console.SetCursorPosition(30, 7);
  225.                 Console.ForegroundColor = ConsoleColor.DarkYellow;
  226.                 Console.WriteLine($"Карты оппонента: Общий счет({_opponentCount})");
  227.                 Console.ForegroundColor = ConsoleColor.White;
  228.  
  229.                 SaveCardPosition(randomCardOpponent, _indentOpponentCardX, _positionCardOpponentX, _positionCardOpponentY);
  230.                 _indentOpponentCardX -= 12;
  231.  
  232.                 randomCardOpponent.ShowCardInfo(randomCardOpponent, 30, _infoLinePositionOpponentY);
  233.                 _infoLinePositionOpponentY += 1;
  234.  
  235.                 Thread.Sleep(500);
  236.             }
  237.  
  238.             if (_playerCount > _opponentCount)
  239.             {
  240.                 Console.SetCursorPosition(30, 13);
  241.                 string symbols = new string('=', 20);
  242.                 Console.ForegroundColor = ConsoleColor.Green;
  243.                 Console.WriteLine($"{symbols}Ты выиграл!{symbols}");
  244.                 Console.ForegroundColor = ConsoleColor.White;
  245.                 _isRun = false;
  246.             }
  247.             else if (_playerCount == _opponentCount)
  248.             {
  249.                 Console.SetCursorPosition(30, 13);
  250.                 string symbols = new string('=', 20);
  251.                 Console.ForegroundColor = ConsoleColor.Yellow;
  252.                 Console.WriteLine($"{symbols}Ничья{symbols}");
  253.                 Console.ForegroundColor = ConsoleColor.White;
  254.                 _isRun = false;
  255.             }
  256.             else if (_opponentCount > 21 && _opponentCount > _playerCount)
  257.             {
  258.                 Console.SetCursorPosition(30, 13);
  259.                 string symbols = new string('=', 20);
  260.                 Console.ForegroundColor = ConsoleColor.Green;
  261.                 Console.WriteLine($"{symbols}Ты выиграл!{symbols}");
  262.                 Console.ForegroundColor = ConsoleColor.White;
  263.                 _isRun = false;
  264.             }
  265.             else if (_opponentCount < 21 || _opponentCount > _playerCount)
  266.             {
  267.                 Console.SetCursorPosition(30, 13);
  268.                 string symbols = new string('=', 20);
  269.                 Console.ForegroundColor = ConsoleColor.Cyan;
  270.                 Console.WriteLine($"{symbols}Ты проиграл!{symbols}");
  271.                 Console.ForegroundColor = ConsoleColor.White;
  272.                 _isRun = false;
  273.             }
  274.         }
  275.  
  276.         private void SaveCardPosition(Card card, int indentLeftX, int positionCardPlayerX, int positionCardPlayerY)
  277.         {
  278.             Console.SetCursorPosition(positionCardPlayerX, positionCardPlayerY);
  279.             DisplayCard(card, indentLeftX);
  280.         }
  281.  
  282.         private void DisplayCard(Card card, int indentLeftX)
  283.         {
  284.             string symbols = new string(' ', indentLeftX);
  285.  
  286.             if (card.Rank == "10")
  287.             {
  288.                 Console.Write($"\r\n{symbols}┌─────────┐\r\n{symbols}│{card.Rank}       │\r\n{symbols}│         │\r\n{symbols}│         │\r\n{symbols}│    {card.Suit}    │\r\n{symbols}│         │\r\n{symbols}│         │\r\n{symbols}│       {card.Rank}│\r\n{symbols}└─────────┘");
  289.             }
  290.             else
  291.             {
  292.                 Console.Write($"\r\n{symbols}┌─────────┐\r\n{symbols}│ {card.Rank}       │\r\n{symbols}│         │\r\n{symbols}│         │\r\n{symbols}│    {card.Suit}    │\r\n{symbols}│         │\r\n{symbols}│         │\r\n{symbols}│       {card.Rank} │\r\n{symbols}└─────────┘");
  293.             }
  294.         }
  295.     }
  296. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement