async private void ArtificialPlayer() { if (takenFromDeckOrDiscardPile) { while (true) { ComputerThoughts = "Calculating your impending doom ..."; foreach (var card in ComputerCards) { computerSeen.Remove(card); } GinRummy.sortByRankAndSuit(ComputerCards); var x = ComputerPlayer.averageAllOfThePossibleDeadwoods(computerSeen, ComputerCards); var pickupFromDeckOrDiscard = await Task.Run(() => ComputerPlayer.ComputerPickupDiscard(ComputerCards, Discards.First(), computerSeen)); if (pickupFromDeckOrDiscard) // picking up from the deck { ComputerThoughts = "You can not comprehend how much I know the top of the deck will benefit me, fool!"; ComputerCards.Add(DrawTopCardFromDeck()); await Task.Delay(5000); var cardToAddToDiscard = ComputerPlayer.ComputerMove(ComputerCards); ComputerCards.Remove(cardToAddToDiscard.Item2.Value); Discards.Add(cardToAddToDiscard.Item2.Value); } else // picking up from the discard { ComputerThoughts = "Ahh this card will do very nicely, my thanks for allowing me to have it, fool!"; await Task.Delay(2000); var topOfDiscard = Discards[Discards.Count - 1]; ComputerCards.Add(topOfDiscard); Discards.Remove(topOfDiscard); await Task.Delay(5000); var cardToAddToDiscard = ComputerPlayer.ComputerMove(ComputerCards); ComputerCards.Remove(cardToAddToDiscard.Item2.Value); Discards.Add(cardToAddToDiscard.Item2.Value); } ComputerThoughts = "I now end my turn. Your move, human." + GinRummy.Deadwood(ComputerCards); break; } canNowDiscard = false; takenFromDeckOrDiscardPile = false; } }
private void ComputerTurn() { var takeDiscard = ComputerPlayer.ComputerPickupDiscard(ComputerCards, Discards[Discards.Count - 1], RemainingDeck); if (takeDiscard) { var discardCard = Discards[Discards.Count - 1]; Discards.Remove(discardCard); ComputerCards.Add(discardCard); } else { Cards.Card remainingDeckCards = RemainingDeck[RemainingDeck.Count - 1]; RemainingDeck.Remove(remainingDeckCards); ComputerCards.Add(remainingDeckCards); } var compMove = ComputerPlayer.ComputerMove(ComputerCards); ComputerCards.Remove(compMove.Item2.Value); Discards.Add(compMove.Item2.Value); var scores = GinRummy.Score(ComputerCards, HumanCards); if (compMove.Item1.IsGin) { compScore += scores; if (humanScore < 100 && compScore < 100) { RaiseNotification("Human Score: " + humanScore + ". Computer Score: " + compScore, "Scores So Far"); CleanUpCards(); } } else if (compMove.Item1.IsKnock) { if (scores > 0) { compScore += scores; if (humanScore < 100 && compScore < 100) { RaiseNotification("Human Score: " + humanScore + ". Computer Score: " + compScore, "Scores So Far"); CleanUpCards(); } } else { humanScore += Math.Abs(scores); if (humanScore < 100 && compScore < 100) { RaiseNotification("Human Score: " + humanScore + ". Computer Score: " + compScore, "Scores So Far"); CleanUpCards(); } } } }
private void ComputerTakeCardFromDiscardPile() { Cards.Card topDiscard = Discards[Discards.Count - 1]; if (humanDraw) { bool computerPickUp = ComputerPlayer.ComputerPickupDiscard(ComputerCards, topDiscard, PossibleDeck); if (computerPickUp) { ComputerCards.Add(topDiscard); Discards.Remove(topDiscard); humanDraw = false; ComputerDiscardCardFromHand(); } else { var topHiddenCard = RemainingDeck[RemainingDeck.Count - 1]; ComputerCards.Add(topHiddenCard); PossibleDeck.Remove(topHiddenCard); RemainingDeck.Remove(topHiddenCard); humanDraw = false; ComputerDiscardCardFromHand(); } } }
static bool Turn(Player player, Player opponent) { Console.WriteLine(player.Name); player.Cards.Sort(); foreach (var card in player.Cards) { Console.Write("{0} ", ToString(card)); } Console.WriteLine(); Console.Write("Thinking ... "); var pickupDiscard = ComputerPlayer.ComputerPickupDiscard(player.Cards, Discards.Peek(), RemainingDeck); Console.WriteLine(); if (pickupDiscard) { var card = Discards.Pop(); player.Cards.Add(card); Console.WriteLine("picks up {0} from Discard pile", ToString(card)); } else { var card = RemainingDeck.Pop(); player.Cards.Add(card); Console.WriteLine("picks up {0} from Remaining Deck", ToString(card)); } var move = ComputerPlayer.ComputerMove(player.Cards); var discard = move.Item2; if (FSharpOption <Cards.Card> .get_IsSome(discard)) { Discards.Push(discard.Value); player.Cards.Remove(discard.Value); Console.WriteLine("Discard {0}", ToString(discard.Value)); } else { Console.WriteLine("Discard nothing"); } Console.WriteLine("deadwood score = {0}", GinRummy.Deadwood(player.Cards)); var action = move.Item1; if (action.IsGin) { Console.WriteLine("Gin!"); } else if (action.IsKnock) { Console.WriteLine("Knock!"); } if (!action.IsContinue) { Console.WriteLine(player.Name + " goes out first ..."); var score = GinRummy.Score(player.Cards, opponent.Cards); if (score > 0) { player.Score += score; } else { opponent.Score -= score; } } return(!action.IsContinue); }