public void PlayTurn() { TurnCount++; if (!GameCanContinue()) { return; } Card player1Card = _player1.PlayCard(); Card player2Card = _player2.PlayCard(); OnTurnStart?.Invoke(this, new StartEventArgs(player1Card, player2Card)); if (player1Card.Value > player2Card.Value) { _player1.AddCards(player1Card, player2Card); OnTurnFinish?.Invoke(this, new FinishEventArgs("Player 1")); } else if (player2Card.Value > player1Card.Value) { _player2.AddCards(player2Card, player1Card); OnTurnFinish?.Invoke(this, new FinishEventArgs("Player 2")); } else { // Both cards have the same value, so they'll go to war. War(new List <Card> { player1Card }, new List <Card> { player2Card }); } if (TurnCount >= _maxTurnCount) { OnGameFinish?.Invoke(this, new FinishEventArgs("Tie")); } if (_player1.CardsLeft <= 0) { OnGameFinish?.Invoke(this, new FinishEventArgs("Player 2")); } if (_player2.CardsLeft <= 0) { OnGameFinish?.Invoke(this, new FinishEventArgs("Player 1")); } }
static void Main(string[] args) { // Setting the output to support Unicode characters for card suits. Console.OutputEncoding = Encoding.UTF8; int numberOfGames; int totalNumberOfGames = 0; while (true) { Console.WriteLine("If you play 1 game, detailed turn-by-turn messages will be displayed."); Console.Write("How many games do you want to play? "); string input = Console.ReadLine(); if (!Int32.TryParse(input, out numberOfGames)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"\n\"{input}\" isn't a number."); Console.ResetColor(); continue; } if (numberOfGames <= 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\nNumber must be greater than 0."); Console.ResetColor(); continue; } break; } bool verboseMode = numberOfGames == 1; do { Console.Clear(); for (int num = 0; num < numberOfGames; num++) { Console.Write($"Game #{totalNumberOfGames++}: "); var player1 = new Player(); var player2 = new Player(); var deck = new Deck(); int deckCount = deck.Count(); for (int i = 0; i < deckCount; i++) { if (i % 2 == 0) { player1.AddCards(deck.GetCard()); } else { player2.AddCards(deck.GetCard()); } } var game = InitGame(verboseMode, player1, player2); while (game.GameCanContinue()) { game.PlayTurn(); } } Console.WriteLine("\nPress any key to play again. Press {ENTER} to quit."); }while (Console.ReadKey().Key != ConsoleKey.Enter); }