public Match(int width, int height, int playerCount, int unitCount, int abilityCount) {
		MatchCommandListener commandListener = new MatchCommandListener(this);
		board = new Board(width, height, commandListener);
		panel = new MatchPanel(commandListener, commandListener, board);
		
		this.players = new Player[playerCount];
		for (int index = 0; index < playerCount; index++) {
			this.players[index] = new Player(unitCount, abilityCount, PlayerTheme.getThemeForIndex(index));
		}
		
		if (playerCount == 2) {
			int buffer = 1;
			int range = (int) Math.floor(height / 4.0);
			board.placeUnits(players[0], new Dimension(buffer, buffer), new Dimension(width - 1 - buffer, range));
			board.placeUnits(players[1], new Dimension(buffer, height - range - buffer), new Dimension(width - 1 - buffer, height - 1 - buffer));
		} else {
			// Fallback
			for (int i = 0; i < players.length; i++) {
				board.placeUnits(players[i], new Dimension(0, 0), new Dimension(width - 1, height - 1));
			}
		}
		
		startMatch();
	}