internal void UndoMove(Move move) { if (tricks.Count - 1 < 0) { Console.WriteLine("PerfectInformationGame.UndoMove >> Negative index"); //System.Environment.Exit(1); } predictableTrickWinner = -1; predictableTrickCut = false; Trick currentTrick = tricks[tricks.Count - 1]; if (currentTrick.IsFull()) { int[] winnerPoints = currentTrick.GetTrickWinnerAndPoints(); if (winnerPoints[0] == players[0].Id || winnerPoints[0] == (players[0].Id + 2) % 4) { firstTeamPoints -= winnerPoints[1]; } else { secondTeamPoints -= winnerPoints[1]; } } currentTrick.UndoMove(); if (currentTrick.IsEmpty()) { tricks.RemoveAt(tricks.Count - 1); } foreach (PlayerNode p in players) { //TODO review if is this the correct method p.UndoMove(move); } }
public void RemovePlay(int playerId, int card) { Trick currentTrick = tricks[tricks.Count - 1]; if (currentTrick.IsFull()) { int[] winnerPoints = currentTrick.GetTrickWinnerAndPoints(); if (winnerPoints[0] == id || winnerPoints[0] == (id + 2) % 4) { MyTeamPoints -= winnerPoints[1]; } else { //TODO checks valence of points!!! OtherTeamPoints -= winnerPoints[1]; } } currentTrick.UndoMove(); if (currentTrick.IsEmpty()) { tricks.RemoveAt(tricks.Count - 1); } if (playerId == id) { hand.Add(card); } else { int cardSuit = Card.GetSuit(card); if (!suitHasPlayer[cardSuit].Contains(playerId)) { suitHasPlayer[cardSuit].Add(playerId); } if (TrumpCard == card) { trumpCardWasPlayed = false; } else { unknownOwnerCards.Add(card); } if (Card.GetValue(card) > 0) { othersPointCards[Card.GetSuit(card)].Add(Card.GetRank(card)); } } if (Card.GetSuit(card) == Trump) { remainingTrumps++; } }