public void playRound() {
		// Reset our players piles (hand and won pile) -- necessary if this is
		// not the first game played with these Players.
		for (int i = 0; i < players.length; i++)
			players[i].resetPiles();

		// Create the game piles
		this.createGamePiles();

		// Increment our dealer.
		dealerIndex = (dealerIndex + 1) % PLAYER_COUNT;

		// Shuffle and deal cards
		this.deck.shuffle();
		this.dealCards();

		// Mark the start of a new round
		this.roundStats = this.gameStats.createNewRound();
		this.roundStats.setRoundStart();
		
		// Manage bidding and game type declaration.
		this.initiateBidding();
		if(this.declarerIndex == -1) {
			this.roundStats.log("Every Player chose not to make an initial bid this Round. It has been ended prematurely.");
			this.roundStats.setRoundEnd();
			return;
		}
		this.setGameType();

		// Play the 10 tricks of a game of skat.
		for (int i = 0; i < 10; i++) {
			// Log our header for our trick.
			this.roundStats.log("Trick " + (i + 1) + ": ", this.indentationLevel);
			
			// Play the trick and determine who won.
			this.indentationLevel++;
			this.playTrick();
			this.winTrick();
			this.indentationLevel--;
			
			// If it's a null game, if declarer wins a trick, it's game over for them.
			if(this.gameType.getGameType() == GameTypeOptions.GameType.Null)
				if(firstToPlayIndex == declarerIndex)
				{
					this.roundStats.log("Declarer won a trick in a null game. It's an early game over.", this.indentationLevel);
					break;
				}
		}

		// Now that the tricks have been played, check if the declarer achieved schwarz or schneider.
		
		// If it's a null game, reset our multiplier.
		if(this.gameType.getGameType() == GameTypeOptions.GameType.Null)
			multiplier=1;
		else {
			// Check if schneider was achieved
			if(this.countCardPoints(this.declarerIndex) >= 90) {
				multiplier++;
				this.roundStats.log("Schneider was achieved in a non-null game!", this.indentationLevel);
			}
			
			// Check if schwarz was achieved
			if(this.players[this.declarerIndex].getTricksWonPile().getNumCards() == 30) {
				multiplier++;
				this.roundStats.log("Schwarz was achieved in a non-null game!", this.indentationLevel);
			}
		}
		
		// Once 10 tricks have been played, count card points, determine whether
		// or not the declarer won, update game scores.
		this.assignGamePoints();
		
		// Mark the end of a round
		this.roundStats.setRoundEnd();
	}