Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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++;
            }
        }
Esempio n. 4
0
        public void PrintCurrentTrick()
        {
            Console.WriteLine("Current trick:");
            Trick currentTrick = tricks[tricks.Count - 1];

            if (!currentTrick.IsFull())
            {
                currentTrick.PrintTrick();
            }
            Console.WriteLine("");
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 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("");
     }
 }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
        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));
                }
            }
        }