}
private TrickTracker playTrick(Card trump, int lead, Round round) {
gameEventNotifier.notify(new NewTrickEvent());
round.newTrick();
Trick trick = round.getCurrentTrick();
TrickTracker trickTracker = new TrickTracker(trump);
for (Player player: new PlayerIterator(_playerCollection, lead)) {
Card card = null;
for (boolean isValid = false; isValid == false;) {
// need to make sure the card is valid. otherwise repeat
gameEventNotifier.notify(new PlayerNeedsToPlay(player.getId()));
card = player.playCard();
if (ValidityChecker.checkValidity(trickTracker, trump, card, player)) {
isValid = true;
gameEventNotifier.notify(new PlayerPlayedEvent(player.getId(), card));
player.playCardIsValid(card);
} else {
player.playCardIsNotValid(card);
}
}
trickTracker.addCardPlayed(player.getId(), card);
trick.add(new Play(player.getId(), card));
if (card != null && card.isWizard()) {
trick.setWizardPlayed(true);
}
}
int winnerId = trickTracker.winningPlay().getPlayerId();
Card winningCard = trickTracker.winningPlay().getCard();
trick.setWinner(winnerId);
gameEventNotifier.notify(new PlayerWonTrickEvent(winnerId, winningCard));
return trickTracker;
}