public override CardRank?GetJackDemand() { HashSet <CardRank> myRanks = new HashSet <CardRank>(); foreach (Card c in Cards) { if (MakaoFunctions.CanBeJackDemanded(c)) { myRanks.Add(c.Rank); } } int randomNum = rng.Next(myRanks.Count); int i = 0; foreach (CardRank cr in myRanks) { if (i++ == randomNum) { return(cr); } } return(null); }
public bool SelectCard(int visibleIndex) { bool isValidToSelect = false; Card card = Cards[visibleCardIndex + visibleIndex]; if (selectedCards.Count == 0) { isValidToSelect = true; } else if (card.Rank == selectedCards.First().Rank) { if (card.Rank == CardRank.King) { if (!MakaoFunctions.IsAggressiveCard(card) && !MakaoFunctions.IsAggressiveCard(selectedCards.First())) { isValidToSelect = true; } } else { isValidToSelect = true; } } if (isValidToSelect) { selectedCards.Add(card); SelectionChanged?.Invoke(this, new UserSelectionChangeEventArgs(UserSelectionChangeType.Selected, visibleIndex)); } return(isValidToSelect); }
private void PushStartingCardToStack() { while (MakaoFunctions.IsFunctionalCard(mainDeck.TopCard)) { mainDeck.MoveTopToBottom(); } makaoStack.PushCardsOnTop(mainDeck.TakeTopCard()); }
public bool ValidateCardForPush(Card card) { if (card == new Card(CardRank.Queen, CardSuit.Pike)) { return(true); } if (JackDemand.Active) { if (card.Rank == JackDemand.Rank) { return(true); } if (makaoStack.TopCard.Rank == CardRank.Jack && card.Rank == CardRank.Jack) { return(true); } return(false); } else { if (TopCardActive) { switch (MakaoStack.TopCard.Rank) { case CardRank.Two: if (card.Rank == CardRank.Two) { return(true); } if (card == new Card(CardRank.Three, makaoStack.TopCard.Suit)) { return(true); } if (card.Rank == CardRank.King) { if (MakaoFunctions.IsAggressiveCard(card) && card.Suit == makaoStack.TopCard.Suit) { return(true); } } break; case CardRank.Three: if (card.Rank == CardRank.Three) { return(true); } if (card == new Card(CardRank.Two, makaoStack.TopCard.Suit)) { return(true); } if (card.Rank == CardRank.King) { if (MakaoFunctions.IsAggressiveCard(card) && card.Suit == makaoStack.TopCard.Suit) { return(true); } } break; case CardRank.Four: if (card.Rank == CardRank.Four) { return(true); } break; case CardRank.Queen: return(true); case CardRank.King: if (MakaoFunctions.IsAggressiveKing(card)) { return(true); } if (card.Rank == CardRank.Queen && card.Suit == makaoStack.TopCard.Suit) { return(true); } if (MakaoFunctions.IsAggressiveCard(card) && card.Suit == makaoStack.TopCard.Suit) { return(true); } break; case CardRank.Ace: if (AceSuit.HasValue) { return(MakaoFunctions.AreEqualInRankOrSuit(new Card(CardRank.Ace, AceSuit.Value), card)); } else { return(MakaoFunctions.AreEqualInRankOrSuit(makaoStack.TopCard, card)); } } return(false); } else { if (card.Rank == CardRank.Queen) { return(true); } return(MakaoFunctions.AreEqualInRankOrSuit(card, makaoStack.TopCard)); } } }
public void Players_CardsPushed(object sender, CardsPushedEventArgs e) { // update game state Player whoPushed = (Player)sender; if (AceSuit.HasValue) { AceSuit = null; } if (MakaoFunctions.IsAggressiveCard(MakaoStack.TopCard)) { uint totalAggressiveness = 0; for (int i = 0; i < e.PushedCount; ++i) { totalAggressiveness += MakaoFunctions.GetCardAggressiveness(MakaoStack.Cards[MakaoStack.Cards.Count - 1 - i]); } if (CardsToTake == 1) { CardsToTake = totalAggressiveness; } else { CardsToTake += totalAggressiveness; } TopCardActive = true; } else if (MakaoStack.TopCard.Rank == CardRank.Four) { TurnsToWait += (uint)e.PushedCount; TopCardActive = true; } else if (MakaoStack.TopCard.Rank == CardRank.Jack) { var rankDemanded = whoPushed.GetJackDemand(); if (rankDemanded.HasValue) { JackDemand = new JackDemandInfo(rankDemanded.Value, (uint)PlayersInGame.Count); if (whoPushed.Cards.Count == 0) { PassPlayerWithJackDemand(); } } else { DeactivateJackDemand(); } TopCardActive = JackDemand.Active; } else if (MakaoStack.TopCard.Rank == CardRank.Queen) { CardsToTake = 1; TurnsToWait = 0; DeactivateJackDemand(); TopCardActive = true; } else if (makaoStack.TopCard.Rank == CardRank.Ace) { var suitDemanded = whoPushed.GetAceDemand(); if (suitDemanded.HasValue && suitDemanded.Value != MakaoStack.TopCard.Suit) { AceSuit = suitDemanded; } else { AceSuit = null; } TopCardActive = true; } else { TopCardActive = false; if (JackDemand.Active) { PassPlayerWithJackDemand(); } } }