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;
}