internal void ApplyMove(Move move) { Trick currentTrick = tricks[tricks.Count - 1]; if (currentTrick.IsFull()) { tricks.Add(new Trick(trump)); currentTrick = tricks[tricks.Count - 1]; } currentTrick.ApplyMove(move); if (currentTrick.IsFull()) { predictableTrickWinner = -1; predictableTrickCut = false; int[] winnerPoints = currentTrick.GetTrickWinnerAndPoints(); if (winnerPoints[0] == players[0].Id || winnerPoints[0] == (players[0].Id + 2) % 4) { firstTeamPoints += winnerPoints[1]; } else { secondTeamPoints += winnerPoints[1]; } } foreach (var p in players) { //TODO review if is this the correct method p.ApplyMove(move); } }
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++; } }
public void PrintCurrentTrick() { Console.WriteLine("Current trick:"); Trick currentTrick = tricks[tricks.Count - 1]; if (!currentTrick.IsFull()) { currentTrick.PrintTrick(); } Console.WriteLine(""); }
internal int GetCurrentTrickResponsible() { Trick currentTrick = tricks[tricks.Count - 1]; int partnerID = ((id + 2) % 4); int winnerId = currentTrick.GetCurrentTrickWinner(); if (!currentTrick.IsFull()) { Console.WriteLine("Current trick is not full to call GetResponsible!"); if (tricks.Count > 1) { currentTrick = tricks[tricks.Count - 2]; } } if (currentTrick.IsFull()) { if (winnerId == id || winnerId == partnerID) { return(winnerId); } else { int myPlayPoints = Card.GetValue(currentTrick.GetPlayOf(id)); int partnerPlayPoints = Card.GetValue(currentTrick.GetPlayOf(partnerID)); if (myPlayPoints > 0 || partnerPlayPoints > 0) { return(myPlayPoints >= partnerPlayPoints ? id : partnerID); } else { return(winnerId); } } } return(winnerId); }
public void PrintLastTrick() { if (tricks.Count > 0 && tricks[0].IsFull()) { Console.WriteLine("Last trick:"); Trick currentTrick = tricks[tricks.Count - 1]; if (currentTrick.IsFull()) { currentTrick.PrintTrick(); } else { tricks[tricks.Count - 2].PrintTrick(); } Console.WriteLine(""); } }
public void PlayCard(int playerId, int card) { if (tricks.Count - 1 < 0) { Console.WriteLine("SuecaGame.PlayerCard >> Negative index"); //System.Environment.Exit(1); } Trick currentTrick = tricks[tricks.Count - 1]; if (currentTrick.IsFull()) { tricks.Add(new Trick(trump)); currentTrick = tricks[tricks.Count - 1]; } currentTrick.ApplyMove(new Move(playerId, card)); }
public void AddPlay(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]; } tricks.Add(new Trick(Trump)); currentTrick = tricks[tricks.Count - 1]; } //check if player has the leadSuit int leadSuit = currentTrick.LeadSuit; int cardSuit = Card.GetSuit(card); int cardValue = Card.GetValue(card); if (playerID != id && cardSuit == leadSuit && !suitHasPlayer[leadSuit].Contains(playerID)) { Console.WriteLine("AddPlay: The player has renounced!"); } currentTrick.ApplyMove(new Move(playerID, card)); if (playerID != id && cardSuit != leadSuit && leadSuit != (int)Suit.None) { if (suitHasPlayer[leadSuit].Contains(playerID)) { suitHasPlayer[leadSuit].Remove(playerID); } } if (cardSuit == Trump) { remainingTrumps--; } if (playerID == id) { if (hand.Remove(card) == false) { //Console.WriteLine("INFOSET Trying to remove an nonexisting card!!!"); } } else { if (TrumpCard == card) { trumpCardWasPlayed = true; } else { if (unknownOwnerCards.RemoveCard(card) == false) { Console.WriteLine("FILIPA"); } } if (cardValue > 0) { othersPointCards[cardSuit].Remove(Card.GetRank(card)); } } }