Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        private void PushStartingCardToStack()
        {
            while (MakaoFunctions.IsFunctionalCard(mainDeck.TopCard))
            {
                mainDeck.MoveTopToBottom();
            }

            makaoStack.PushCardsOnTop(mainDeck.TakeTopCard());
        }
Exemplo n.º 4
0
        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));
                }
            }
        }
Exemplo n.º 5
0
        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();
                }
            }
        }