Example #1
0
        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"));
            }
        }
Example #2
0
        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);
        }