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); }
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"); }