public int PlayGame() { //only play if players exist. if (players == null) { return(-1); } //Deal initinal hands DealHands(); bool GameWon = false; int currentPlayer; Card playCard = playDeck.GetCard(currentCard++); discardedCards.Add(playCard); do { for (currentPlayer = 0; currentPlayer < players.Length; currentPlayer++) { WriteLine($"{players[currentPlayer].Name}'s turn."); WriteLine("Current hand:"); foreach (Card card in players[currentPlayer].PlayHand) { WriteLine(card); } WriteLine($"Card in play:{playCard}"); bool inputOK = false; do { WriteLine("Press T to take card in play or D to draw:"); string input = ReadLine(); if (input.ToLower() == "t") { WriteLine($"Drawn:{playCard}"); if (discardedCards.Contains(playCard)) { discardedCards.Remove(playCard); } players[currentPlayer].PlayHand.Add(playCard); inputOK = true; } if (input.ToLower() == "d") { Card newCard; bool cardIsAvailable; do { newCard = playDeck.GetCard(currentCard++); cardIsAvailable = !discardedCards.Contains(newCard); if (cardIsAvailable) { foreach (Player testPlayer in players) { if (testPlayer.PlayHand.Contains(newCard)) { cardIsAvailable = false; break; } } } } while (!cardIsAvailable); WriteLine($"Drawn:{newCard}"); players[currentPlayer].PlayHand.Add(newCard); inputOK = true; } } while (inputOK == false); WriteLine("New hand:"); for (int i = 0; i < players[currentPlayer].PlayHand.Count; i++) { WriteLine($"{i + 1} : " + $"{players[currentPlayer].PlayHand[i]}"); } inputOK = false; int choice = -1; do { WriteLine("Choose card to discard:"); string input = ReadLine(); try { choice = Convert.ToInt32(input); if ((choice > 0) && (choice <= 8)) { inputOK = true; } } catch { //... } } while (inputOK == false); playCard = players[currentPlayer].PlayHand[choice - 1]; players[currentPlayer].PlayHand.RemoveAt(choice - 1); discardedCards.Add(playCard); WriteLine($"Discarding:{playCard}"); WriteLine(); GameWon = players[currentPlayer].HasWon(); if (GameWon == true) { break; } } } while (GameWon == false); return(currentPlayer); }