AIPlayers.AIPlayer.MakeAnnouncement C# (CSharp) Method

MakeAnnouncement() public method

public MakeAnnouncement ( AnnouncementManager manager ) : Announcement
manager Belot.AnnouncementManager
return Belot.Announcement
        public override Announcement MakeAnnouncement( AnnouncementManager manager )
        {
            _allAnnounces = manager.GetAllAnnouncements();

            Announcement announce = null;
            bool isValidFound = false;
            int sum = 0;
            int count = 0;

            const int MIN_FOR_TRUMP = 34;
            const int MIN_FOR_NOTRUMPS = 34;
            const int MIN_FOR_ALLTRUMPS = 60;
            //const int POINTS_TO_ADD = 5; // add 5 or 10 points if player has 4 or 5 cards of same color

            #region Check Clubs
            if ( !isValidFound )
            {
                foreach ( Card card in this.Cards )
                {
                    sum += CardPointEvaluator.EvaluateCard( AnnouncementTypeEnum.Clubs, card );

                    if ( card.CardColor == CardColor.Clubs )
                    {
                        count++;
                    }
                }

                if ( sum > MIN_FOR_TRUMP && count > 2 )
                {
                    if ( AnnouncementTypeEnum.Clubs == manager.GetLastValidAnnouncement().Type )
                    {
                        announce = new Announcement( AnnouncementTypeEnum.Clubs, true, false );
                    }
                    else
                    {
                        announce = new Announcement( AnnouncementTypeEnum.Clubs, false, false );
                    }
                    isValidFound = manager.IsValid( this, announce );
                }
            }
            #endregion

            #region Check Diamonds
            sum = 0;
            count = 0;
            if ( !isValidFound )
            {
                foreach ( Card card in this.Cards )
                {
                    sum += CardPointEvaluator.EvaluateCard( AnnouncementTypeEnum.Diamonds, card );

                    if ( card.CardColor == CardColor.Diamonds )
                    {
                        count++;
                    }
                }

                if ( sum > MIN_FOR_TRUMP && count > 2 )
                {
                    if ( AnnouncementTypeEnum.Diamonds == manager.GetLastValidAnnouncement().Type )
                    {
                        announce = new Announcement( AnnouncementTypeEnum.Diamonds, true, false );
                    }
                    else
                    {
                        announce = new Announcement( AnnouncementTypeEnum.Diamonds, false, false );
                    }
                    isValidFound = manager.IsValid( this, announce );
                }
            }
            #endregion

            #region Check Hearts
            sum = 0;
            count = 0;
            if ( !isValidFound )
            {
                foreach ( Card card in this.Cards )
                {
                    sum += CardPointEvaluator.EvaluateCard( AnnouncementTypeEnum.Hearts, card );

                    if ( card.CardColor == CardColor.Hearts )
                    {
                        count++;
                    }
                }

                if ( sum > MIN_FOR_TRUMP && count > 2 )
                {
                    if ( AnnouncementTypeEnum.Hearts == manager.GetLastValidAnnouncement().Type )
                    {
                        announce = new Announcement( AnnouncementTypeEnum.Hearts, true, false );
                    }
                    else
                    {
                        announce = new Announcement( AnnouncementTypeEnum.Hearts, false, false );
                    }
                    isValidFound = manager.IsValid( this, announce );
                }
            }
            #endregion

            #region Check Spades
            sum = 0;
            count = 0;
            if ( !isValidFound )
            {
                foreach ( Card card in this.Cards )
                {
                    sum += CardPointEvaluator.EvaluateCard( AnnouncementTypeEnum.Spades, card );

                    if ( card.CardColor == CardColor.Spades )
                    {
                        count++;
                    }
                }

                if ( sum > MIN_FOR_TRUMP && count > 2 )
                {
                    if ( AnnouncementTypeEnum.Spades == manager.GetLastValidAnnouncement().Type )
                    {
                        announce = new Announcement( AnnouncementTypeEnum.Spades, true, false );
                    }
                    else
                    {
                        announce = new Announcement( AnnouncementTypeEnum.Spades, false, false );
                    }
                    isValidFound = manager.IsValid( this, announce );
                }
            }
            #endregion

            #region Check No Trumps
            sum = 0;
            if ( !isValidFound )
            {
                foreach ( Card card in this.Cards )
                {
                    sum += CardPointEvaluator.EvaluateCard( AnnouncementTypeEnum.NoTrumps, card );
                }

                if ( sum > MIN_FOR_NOTRUMPS )
                {
                    if ( AnnouncementTypeEnum.NoTrumps  == manager.GetLastValidAnnouncement().Type )
                    {
                        announce = new Announcement( AnnouncementTypeEnum.NoTrumps, true, false );
                    }
                    else
                    {
                        announce = new Announcement( AnnouncementTypeEnum.NoTrumps, false, false );
                    }
                    isValidFound = manager.IsValid( this, announce );
                }
            }
            #endregion

            #region Check All Trumps
            sum = 0;
            count = 0;
            if ( !isValidFound )
            {
                foreach ( Card card in this.Cards )
                {
                    sum += CardPointEvaluator.EvaluateCard( AnnouncementTypeEnum.AllTrumps, card );
                }

                if ( sum > MIN_FOR_ALLTRUMPS )
                {
                    if ( AnnouncementTypeEnum.AllTrumps == manager.GetLastValidAnnouncement().Type )
                    {
                        announce = new Announcement( AnnouncementTypeEnum.AllTrumps, true, false );
                    }
                    else
                    {
                        announce = new Announcement( AnnouncementTypeEnum.AllTrumps, false, false );
                    }
                    isValidFound = manager.IsValid( this, announce );
                }
            }
            #endregion

            if ( !isValidFound )
            {
                announce = new Announcement( AnnouncementTypeEnum.Pass, false, false );
            }

            RaiseAnnounceMade( announce );
            return announce;
        }