コード例 #1
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);
            }
        }
コード例 #2
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++;
            }
        }