private void PlayCards(Contract contract)
{
var currentPlayer = this.game.GetFirstPlayerForTheDeal();
for (int trickNumber = 1; trickNumber <= 8; trickNumber++)
{
var currentTrick = new Trick(contract, this.game[currentPlayer]);
for (int i = 4; i > 0; i--)
{
if (trickNumber == 1 && contract.Type != ContractType.NoTrumps)
{
var combinations = this.AskForCardCombinations(currentPlayer);
this.game.GameInfo.InformForCardCombinationsAnnounced(new CardCombinationsAnnouncedEventArgs(this.game[currentPlayer], combinations.Select(x => x.CombinationType)));
}
var playAction = this.PlayCard(currentPlayer, contract, currentTrick);
currentTrick.Add(playAction.Card);
this.game.GameInfo.InformForPlayedCard(new CardPlayedEventArgs(this.game[currentPlayer], playAction, currentTrick.ToList()));
currentPlayer = this.game.GetNextPlayer(currentPlayer);
}
var trickWinner = currentTrick.WinnerPlayer;
if (trickWinner == PlayerPosition.South || trickWinner == PlayerPosition.North)
{
this.southNorthPlayersCardsTaken.Add(currentTrick);
}
else
{
this.eastWestPlayersCardsTaken.Add(currentTrick);
}
if (trickNumber == 8)
{
// Last hand
if (trickWinner == PlayerPosition.South || trickWinner == PlayerPosition.North)
{
this.southNorthTeamTakesLastHand = true;
}
else
{
this.southNorthTeamTakesLastHand = false;
}
}
currentPlayer = this.game[trickWinner];
}
}