private void playTrick() {
		// Create a player index
		int playerIndex = firstToPlayIndex;

		// Loop for each player..
		for (int i = 0; i < PLAYER_COUNT; i++) {
			// Get the player
			PlayerInfo curPlayerInfo = players[playerIndex];
			IPlayer curPlayer = curPlayerInfo.getPlayer();
			Pile curHand = curPlayerInfo.getHandPile();
			Card playedCard = null;

			// We'll let our user try to play a valid card as many times as
			// cards they have..
			for (int x = 0; x < curHand.getNumCards(); x++) {
				playedCard = curPlayer.playTurn(curHand.copy(),
						cardsPlayed.copy(), firstToPlayIndex);

				// Check if the card is valid, if it isn't, we make them try
				// again. (If it's not in their hand, this function will critical error).
				if (!isValidCard(playedCard)) {
					// Report non-critical error (played invalid card, we'll let them try again).
					this.roundStats.logError("Player " + (playerIndex + 1) + " played an invalid card (" + playedCard.toString() + ")", this.indentationLevel);
					playedCard = null;
				} else
					break;
			}

			// If our player somehow didn't pick a card by now, our strategy is
			// a total failure..
			if (playedCard == null) {
				// Report critical error (player couldn't pick a valid card after multiple tries).
				this.roundStats.logError("Player " + (playerIndex + 1) + " repetitively could not play a valid card", true, this.indentationLevel);
			}

			// Remove the card from their hand pile, add it to cardsPlayed
			curHand.removeCard(playedCard);
			cardsPlayed.addCard(playedCard);
			
			// Log our played card.
			String tempParts = this.players[(playerIndex)].getPlayer().getClass().getName().replaceAll("skatgame.", "");
			this.roundStats.log("Player " + tempParts + " played " + playedCard.toString(), this.indentationLevel);

			// Increment our player index.
			playerIndex = (playerIndex + 1) % PLAYER_COUNT;
		}
	}