VodVas

Untitled

Nov 22nd, 2023
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.05 KB | None | 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.  
  21. gameLogic.Gameplay();
  22. Deck deck = new Deck();
  23. Player player = new Player();
  24.  
  25. Console.CursorVisible = false;
  26.  
  27. string symbols = new string('=', 20);
  28.  
  29. Console.WriteLine($"\n\n{symbols} Игра в 21! {symbols}\n\nНабери 21 очко, или больше очков, чем у соперника, (но не больше 21)!\n" +
  30. "Валет - 2 очка, Дама - 3 очка, Король - 4 очка, Туз - 11 очков, остальные по номиналу.");
  31.  
  32. Console.ForegroundColor = ConsoleColor.Yellow;
  33. Console.WriteLine("Жми 'ПРОБЕЛ', что бы начать. Жми 'ENTER', когда захочешь передать ход сопернику, для выхода нажми 'ESCAPE'");
  34. Console.ForegroundColor = ConsoleColor.White;
  35.  
  36. //deck.FillDeck();
  37. //gameLogic.Gameplay(deck._сards);
  38.  
  39. Console.SetCursorPosition(60, 8);
  40. Console.Write("Нажми любую клавишу для продолжения, 'ESCAPE' для выхода");
  41. ConsoleKeyInfo charKey = Console.ReadKey();
  42.  
  43. switch (charKey.Key)
  44. {
  45. case ConsoleKey.Escape:
  46. isRun = false;
  47. break;
  48.  
  49. default:
  50. break;
  51. }
  52.  
  53. Console.SetCursorPosition(0, 0);
  54. Console.Clear();
  55. }
  56. }
  57. }
  58.  
  59. class CardHolder
  60. {
  61. protected List<Card> Cards = new List<Card>();
  62.  
  63. public int CardPoints => CalculatePoints();
  64.  
  65. private int quantityCoordinatePointIndentLeftX = 12;
  66. private int infoCardPointLineIndentY = 1;
  67. private int pointToWin = 21;
  68.  
  69. private bool _isRun = true;
  70.  
  71. public int CalculatePoints()
  72. {
  73. int points = 0;
  74.  
  75. for (int i = 0; i < Cards.Count; i++)
  76. {
  77. points += Cards[i].Price;
  78. }
  79.  
  80. return points;
  81. }
  82.  
  83. public void ShowCards()
  84. {
  85. for (int i = 0; i < Cards.Count; i++)
  86. {
  87. Console.Write($"{Cards[i].Rank}{Cards[i].Suit}");
  88. }
  89. }
  90.  
  91. public void TakeCard(Card card)
  92. {
  93. if (card != null)
  94. {
  95. Cards.Add(card);
  96. }
  97. else
  98. {
  99. Console.WriteLine("карт нет");
  100.  
  101. }
  102. }
  103. }
  104.  
  105. class Deck
  106. {
  107. private List<Card> _cards = new List<Card>(36);
  108.  
  109. public Deck()
  110. {
  111. CreateCards();
  112. }
  113.  
  114. public void Shuffle()
  115. {
  116. Random random = new Random();
  117.  
  118. for (int i = _cards.Count - 1; i >= 1; i--)
  119. {
  120. int randomIndexInArray = random.Next(i + 1);
  121.  
  122. Card temporaryValue = _cards[randomIndexInArray];
  123. _cards[randomIndexInArray] = _cards[i];
  124. _cards[i] = temporaryValue;
  125. }
  126. }
  127.  
  128. private void CreateCards()
  129. {
  130. string[] ranks = { "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
  131. char[] suits = { '♣', '♦', '♥', '♠' };
  132. int[] prices = { 6, 7, 8, 9, 10, 2, 3, 4, 11 };
  133.  
  134. for (int i = 0; i < ranks.Length; i++)
  135. {
  136. for (int j = 0; j < suits.Length; j++)
  137. {
  138. Card card = new Card(ranks[i], suits[j], prices[i]);
  139. _cards.Add(card);
  140. }
  141. }
  142. }
  143.  
  144. public Card GetCard()
  145. {
  146. Card card = null;
  147.  
  148. if (_cards.Count > 0)
  149. {
  150. card = _cards[0];
  151.  
  152. _cards.Remove(card);
  153.  
  154. }
  155.  
  156. return card;
  157. }
  158.  
  159. public void SaveCardPosition(Card card, int quantityCoordinatePointToCardX, int positionCardPlayerX, int positionCardPlayerY)
  160. {
  161. Console.SetCursorPosition(positionCardPlayerX, positionCardPlayerY);
  162. DisplayCard(card, quantityCoordinatePointToCardX);
  163. }
  164.  
  165. public void DisplayCard(Card card, int quantityCoordinatePointToCardX)
  166. {
  167. string symbols = new string(' ', quantityCoordinatePointToCardX);
  168.  
  169. if (card.Rank == "10")
  170. {
  171. 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}└─────────┘");
  172. }
  173. else
  174. {
  175. 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}└─────────┘");
  176. }
  177. }
  178.  
  179. }
  180.  
  181.  
  182. class Player : CardHolder
  183. {
  184. //private List<Card> _playerCards = new List<Card>();
  185.  
  186. private int _playerCount = 0;
  187. private int _infoLinePositionPlayerY = 8;
  188. private int _indentPlayerCardX = 50;
  189. private int _positionCardPlayerX = 14;
  190. private int _positionCardPlayerY = 13;
  191.  
  192.  
  193.  
  194. //private void CreatePlayerTurn(List<Card> cards)
  195. //{
  196. // //int randomIndexPlayer = _random.Next(cards.Count);
  197. // Card randomCardPlayer = cards[randomIndexPlayer];
  198.  
  199. // cards.Remove(randomCardPlayer);
  200.  
  201. // _playerCount += randomCardPlayer.Price;
  202.  
  203. // //_playerCards.Add(randomCardPlayer);
  204.  
  205. // Console.SetCursorPosition(0, 7);
  206. // Console.ForegroundColor = ConsoleColor.DarkYellow;
  207. // Console.WriteLine($"Твои карты: Общий счет ({_playerCount})");
  208. // Console.ForegroundColor = ConsoleColor.White;
  209.  
  210. // SaveCardPosition(randomCardPlayer, _indentPlayerCardX, _positionCardPlayerX, _positionCardPlayerY);
  211. // _indentPlayerCardX -= quantityCoordinatePointIndentLeftX;
  212.  
  213. // randomCardPlayer.ShowCardPointInfoPanel(randomCardPlayer, 0, _infoLinePositionPlayerY);
  214. // _infoLinePositionPlayerY += infoCardPointLineIndentY;
  215.  
  216. // if (_playerCount > pointToWin)
  217. // {
  218. // Console.SetCursorPosition(30, 13);
  219. // Console.ForegroundColor = ConsoleColor.Cyan;
  220. // Console.WriteLine("Перебор. Ты проиграл..");
  221. // Console.ForegroundColor = ConsoleColor.White;
  222. // _isRun = false;
  223. // }
  224. //}
  225. }
  226.  
  227. class Opponent : CardHolder
  228. {
  229. //private List<Card> _opponentCards = new List<Card>();
  230.  
  231. private int _opponentCount = 0;
  232. private int _infoLinePositionOpponentY = 8;
  233. private int _indentOpponentCardX = 50;
  234. private int _positionCardOpponentX = 14;
  235. private int _positionCardOpponentY = 23;
  236.  
  237. public void TryMakeTurn(Deck deck)
  238. {
  239. while (CardPoints < 16)
  240. {
  241. TakeCard(deck.GetCard());
  242.  
  243. Console.WriteLine($"Очки {CardPoints}");
  244. }
  245.  
  246.  
  247. }
  248.  
  249. //private void CreateOpponentTurn(List<Card> cards)
  250. //{
  251. // int opponentStopPoint = 19;
  252.  
  253. // while (_opponentCount < opponentStopPoint)
  254. // {
  255. // //int randomIndexOpponent = _random.Next(cards.Count);
  256. // Card randomCardOpponent = cards[randomIndexOpponent];
  257.  
  258. // cards.Remove(randomCardOpponent);
  259.  
  260. // _opponentCount += randomCardOpponent.Price;
  261.  
  262. // _opponentCards.Add(randomCardOpponent);
  263.  
  264. // Console.SetCursorPosition(30, 7);
  265. // Console.ForegroundColor = ConsoleColor.DarkYellow;
  266. // Console.WriteLine($"Карты оппонента: Общий счет({_opponentCount})");
  267. // Console.ForegroundColor = ConsoleColor.White;
  268.  
  269. // SaveCardPosition(randomCardOpponent, _indentOpponentCardX, _positionCardOpponentX, _positionCardOpponentY);
  270. // _indentOpponentCardX -= quantityCoordinatePointIndentLeftX;
  271.  
  272. // randomCardOpponent.ShowCardPointInfoPanel(randomCardOpponent, 30, _infoLinePositionOpponentY);
  273. // _infoLinePositionOpponentY += infoCardPointLineIndentY;
  274.  
  275. // Thread.Sleep(500);
  276. // }
  277.  
  278. // if (_playerCount > _opponentCount)
  279. // {
  280. // Console.SetCursorPosition(30, 13);
  281. // string symbols = new string('=', 20);
  282. // Console.ForegroundColor = ConsoleColor.Green;
  283. // Console.WriteLine($"{symbols}Ты выиграл!{symbols}");
  284. // Console.ForegroundColor = ConsoleColor.White;
  285. // _isRun = false;
  286. // }
  287. // else if (_playerCount == _opponentCount)
  288. // {
  289. // Console.SetCursorPosition(30, 13);
  290. // string symbols = new string('=', 20);
  291. // Console.ForegroundColor = ConsoleColor.Yellow;
  292. // Console.WriteLine($"{symbols}Ничья{symbols}");
  293. // Console.ForegroundColor = ConsoleColor.White;
  294. // _isRun = false;
  295. // }
  296. // else if (_opponentCount > pointToWin && _opponentCount > _playerCount)
  297. // {
  298. // Console.SetCursorPosition(30, 13);
  299. // string symbols = new string('=', 20);
  300. // Console.ForegroundColor = ConsoleColor.Green;
  301. // Console.WriteLine($"{symbols}Ты выиграл!{symbols}");
  302. // Console.ForegroundColor = ConsoleColor.White;
  303. // _isRun = false;
  304. // }
  305. // else if (_opponentCount < pointToWin || _opponentCount > _playerCount)
  306. // {
  307. // Console.SetCursorPosition(30, 13);
  308. // string symbols = new string('=', 20);
  309. // Console.ForegroundColor = ConsoleColor.Cyan;
  310. // Console.WriteLine($"{symbols}Ты проиграл!{symbols}");
  311. // Console.ForegroundColor = ConsoleColor.White;
  312. // _isRun = false;
  313. // }
  314. //}
  315. }
  316.  
  317. class Card
  318. {
  319. public Card(string rank, char suit, int price)
  320. {
  321. Rank = rank;
  322. Suit = suit;
  323. Price = price;
  324. }
  325.  
  326. public string Rank { get; private set; }
  327. public char Suit { get; private set; }
  328. public int Price { get; private set; }
  329.  
  330. public void ShowCardPointInfoPanel(Card card, int positionCardPointX, int positionCardPointY)
  331. {
  332. Console.SetCursorPosition(positionCardPointX, positionCardPointY);
  333. Console.Write($"{card.Rank} {card.Suit} (количество очков {card.Price})");
  334. }
  335. }
  336.  
  337.  
  338.  
  339.  
  340. class GameLogic
  341. {
  342. //private List<Card> _playerCards = new List<Card>();
  343. //private List<Card> _opponentCards = new List<Card>();
  344.  
  345. //private int _playerCount = 0;
  346. //private int _opponentCount = 0;
  347. //private int _infoLinePositionPlayerY = 8;
  348. //private int _infoLinePositionOpponentY = 8;
  349. //private int _indentPlayerCardX = 50;
  350. //private int _indentOpponentCardX = 50;
  351. //private int _positionCardPlayerX = 14;
  352. //private int _positionCardPlayerY = 13;
  353. //private int _positionCardOpponentX = 14;
  354. //private int _positionCardOpponentY = 23;
  355. //private int quantityCoordinatePointIndentLeftX = 12;
  356. //private int infoCardPointLineIndentY = 1;
  357. //private int pointToWin = 21;
  358.  
  359. //private bool _isRun = true;
  360.  
  361. //private Random _random = new Random();
  362.  
  363. bool _isRun = true;
  364.  
  365. public void Gameplay()
  366. {
  367. Deck deck = new Deck();
  368. Player player = new Player();
  369. Opponent opponent = new Opponent();
  370.  
  371. while (_isRun)
  372. {
  373. ConsoleKeyInfo charKey = Console.ReadKey();
  374.  
  375. switch (charKey.Key)
  376. {
  377. case ConsoleKey.Spacebar:
  378. deck.Shuffle();
  379. Card card = deck.GetCard();
  380. player.TakeCard(card);
  381. //player.ShowCards();
  382. deck.SaveCardPosition(card, 12, 10,2);
  383. //deck.DisplayCard(card, 10);
  384. //CreatePlayerTurn(cards);
  385. break;
  386.  
  387. case ConsoleKey.Enter:
  388. deck.Shuffle();
  389.  
  390. opponent.TryMakeTurn(deck);
  391. deck.SaveCardPosition(deck.GetCard(),12, 10, 20);
  392.  
  393. //opponent.ShowCards();
  394. //CreateOpponentTurn(cards);
  395. break;
  396.  
  397. case ConsoleKey.Escape:
  398. _isRun = false;
  399. break;
  400.  
  401. default:
  402. Console.SetCursorPosition(0, 6);
  403. Console.ForegroundColor = ConsoleColor.Yellow;
  404. Console.WriteLine("Жми 'ПРОБЕЛ', что бы начать. Жми 'ENTER', когда захочешь передать ход сопернику, для выхода нажми 'ESCAPE'");
  405. Console.ForegroundColor = ConsoleColor.White;
  406. break;
  407. }
  408. }
  409. }
  410.  
  411. //private void CreatePlayerTurn(List<Card> cards)
  412. //{
  413. // int randomIndexPlayer = _random.Next(cards.Count);
  414. // Card randomCardPlayer = cards[randomIndexPlayer];
  415.  
  416. // cards.Remove(randomCardPlayer);
  417.  
  418. // _playerCount += randomCardPlayer.Price;
  419.  
  420. // _playerCards.Add(randomCardPlayer);
  421.  
  422. // Console.SetCursorPosition(0, 7);
  423. // Console.ForegroundColor = ConsoleColor.DarkYellow;
  424. // Console.WriteLine($"Твои карты: Общий счет ({_playerCount})");
  425. // Console.ForegroundColor = ConsoleColor.White;
  426.  
  427. // SaveCardPosition(randomCardPlayer, _indentPlayerCardX, _positionCardPlayerX, _positionCardPlayerY);
  428. // _indentPlayerCardX -= quantityCoordinatePointIndentLeftX;
  429.  
  430. // randomCardPlayer.ShowCardPointInfoPanel(randomCardPlayer, 0, _infoLinePositionPlayerY);
  431. // _infoLinePositionPlayerY += infoCardPointLineIndentY;
  432.  
  433. // if (_playerCount > pointToWin)
  434. // {
  435. // Console.SetCursorPosition(30, 13);
  436. // Console.ForegroundColor = ConsoleColor.Cyan;
  437. // Console.WriteLine("Перебор. Ты проиграл..");
  438. // Console.ForegroundColor = ConsoleColor.White;
  439. // _isRun = false;
  440. // }
  441. //}
  442.  
  443. //private void CreateOpponentTurn(List<Card> cards)
  444. //{
  445. // int opponentStopPoint = 19;
  446.  
  447. // while (_opponentCount < opponentStopPoint)
  448. // {
  449. // int randomIndexOpponent = _random.Next(cards.Count);
  450. // Card randomCardOpponent = cards[randomIndexOpponent];
  451.  
  452. // cards.Remove(randomCardOpponent);
  453.  
  454. // _opponentCount += randomCardOpponent.Price;
  455.  
  456. // _opponentCards.Add(randomCardOpponent);
  457.  
  458. // Console.SetCursorPosition(30, 7);
  459. // Console.ForegroundColor = ConsoleColor.DarkYellow;
  460. // Console.WriteLine($"Карты оппонента: Общий счет({_opponentCount})");
  461. // Console.ForegroundColor = ConsoleColor.White;
  462.  
  463. // SaveCardPosition(randomCardOpponent, _indentOpponentCardX, _positionCardOpponentX, _positionCardOpponentY);
  464. // _indentOpponentCardX -= quantityCoordinatePointIndentLeftX;
  465.  
  466. // randomCardOpponent.ShowCardPointInfoPanel(randomCardOpponent, 30, _infoLinePositionOpponentY);
  467. // _infoLinePositionOpponentY += infoCardPointLineIndentY;
  468.  
  469. // Thread.Sleep(500);
  470. // }
  471.  
  472. // if (_playerCount > _opponentCount)
  473. // {
  474. // Console.SetCursorPosition(30, 13);
  475. // string symbols = new string('=', 20);
  476. // Console.ForegroundColor = ConsoleColor.Green;
  477. // Console.WriteLine($"{symbols}Ты выиграл!{symbols}");
  478. // Console.ForegroundColor = ConsoleColor.White;
  479. // _isRun = false;
  480. // }
  481. // else if (_playerCount == _opponentCount)
  482. // {
  483. // Console.SetCursorPosition(30, 13);
  484. // string symbols = new string('=', 20);
  485. // Console.ForegroundColor = ConsoleColor.Yellow;
  486. // Console.WriteLine($"{symbols}Ничья{symbols}");
  487. // Console.ForegroundColor = ConsoleColor.White;
  488. // _isRun = false;
  489. // }
  490. // else if (_opponentCount > pointToWin && _opponentCount > _playerCount)
  491. // {
  492. // Console.SetCursorPosition(30, 13);
  493. // string symbols = new string('=', 20);
  494. // Console.ForegroundColor = ConsoleColor.Green;
  495. // Console.WriteLine($"{symbols}Ты выиграл!{symbols}");
  496. // Console.ForegroundColor = ConsoleColor.White;
  497. // _isRun = false;
  498. // }
  499. // else if (_opponentCount < pointToWin || _opponentCount > _playerCount)
  500. // {
  501. // Console.SetCursorPosition(30, 13);
  502. // string symbols = new string('=', 20);
  503. // Console.ForegroundColor = ConsoleColor.Cyan;
  504. // Console.WriteLine($"{symbols}Ты проиграл!{symbols}");
  505. // Console.ForegroundColor = ConsoleColor.White;
  506. // _isRun = false;
  507. // }
  508. //}
  509.  
  510. private void SaveCardPosition(Card card, int quantityCoordinatePointToCardX, int positionCardPlayerX, int positionCardPlayerY)
  511. {
  512. Console.SetCursorPosition(positionCardPlayerX, positionCardPlayerY);
  513. DisplayCard(card, quantityCoordinatePointToCardX);
  514. }
  515.  
  516. private void DisplayCard(Card card, int quantityCoordinatePointToCardX)
  517. {
  518. string symbols = new string(' ', quantityCoordinatePointToCardX);
  519.  
  520. if (card.Rank == "10")
  521. {
  522. 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}└─────────┘");
  523. }
  524. else
  525. {
  526. 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}└─────────┘");
  527. }
  528. }
  529. }
  530. }
Add Comment
Please, Sign In to add comment