Exemple #1
0
        public int PlayCard(Card card, int row, Card targetCard, bool player)
        {
            CaravanRow[] caravanRows = (row > 3) ? theirCaravans : myCaravans;
            int          rowIndex    = (row - 1) % 3;
            CaravanRow   caravan     = caravanRows[rowIndex];

            if (targetCard == null)
            {
                caravan.addNumberedCard(card);
            }

            else
            {
                caravan.AddFaceCard(card, targetCard);
                if (card.GetRank() == Rank.Queen)
                {
                    caravan.FlipIncreasing();
                }

                if (card.GetRank() == Rank.Jack)
                {
                    caravan.RemoveCard(targetCard);
                }
            }

            return(-1);
        }
Exemple #2
0
        public bool ValidateMove(string move)
        {
            if (move.Contains("play"))
            {
                string[]   tokens = move.Split(' ');
                int        h      = Int32.Parse(tokens[1]);
                int        n      = Int32.Parse(tokens[2]);
                CaravanRow row    = gameBoard.GetCaravan(n);
                Card       card   = myPlayer.CardAt(h);

                if (tokens.Length == 4)
                {
                    int c = Int32.Parse(tokens[3]);

                    if (card.GetRank() == Rank.Queen)
                    {
                        if (row.GetSize() != c)
                        {
                            Console.WriteLine("Must play queen on last card.");
                            return(false);
                        }
                    }

                    if (row.GetNumFaceCardsAt(c) >= 3)
                    {
                        Console.WriteLine("Cannot attach more than 3 face cards to a number card");
                    }
                    return(row.GetNumFaceCardsAt(c) < 3);
                }

                else if (tokens.Length == 3)
                {
                    if (row.GetSize() == 0)
                    {
                        return(true);
                    }

                    if (card.GetRank() != row.GetEnd().GetRank() && card.GetSuite() == row.GetEnd().GetSuite())
                    {
                        if (row.IsIncreasing() && card.GetValue() < row.GetEnd().GetValue())
                        {
                            row.FlipIncreasing();
                        }

                        else if (!row.IsIncreasing() && card.GetValue() > row.GetEnd().GetValue())
                        {
                            row.FlipIncreasing();
                        }
                        return(true);
                    }

                    if (row.GetEnd().GetRank() == card.GetRank())
                    {
                        Console.WriteLine("Cannot play same card value twice in a row");
                        return(false);
                    }

                    if (row.GetSize() == 1)
                    {
                        if (row.IsIncreasing() && card.GetValue() < row.GetEnd().GetValue())
                        {
                            row.FlipIncreasing();
                        }

                        else if (!row.IsIncreasing() && card.GetValue() > row.GetEnd().GetValue())
                        {
                            row.FlipIncreasing();
                        }
                        return(true);
                    }

                    if (row.IsIncreasing())
                    {
                        if (card.GetValue() > row.GetEnd().GetValue())
                        {
                            return(true);
                        }

                        Console.WriteLine("Cannot play card of lower value");
                        return(false);
                    }

                    else
                    {
                        if (card.GetValue() < row.GetEnd().GetValue())
                        {
                            return(true);
                        }

                        Console.WriteLine("Cannot play card of higher value");
                        return(false);
                    }
                }
            }

            return(move.Contains("discard") || move.Contains("reset") || move == "give up");
        }