TournamentPair* RoundRobinTournament::nextPair(int gameNumber)
{
	if (gameNumber >= finalGameCount())
		return 0;
	if (gameNumber % gamesPerEncounter() != 0)
		return currentPair();

	if (m_pairNumber >= m_topHalf.size())
	{
		m_pairNumber = 0;
		setCurrentRound(currentRound() + 1);
		m_topHalf.insert(1, m_bottomHalf.takeFirst());
		m_bottomHalf.append(m_topHalf.takeLast());
	}

	int white = m_topHalf.at(m_pairNumber);
	int black = m_bottomHalf.at(m_pairNumber);

	m_pairNumber++;

	// If 'white' or 'black' equals 'playerCount()' it means
	// that it's a "bye" player, that is an empty player that
	// makes the pairings easier to organize. In that case
	// no game is played and we skip to the next pair.
	if (white < playerCount() && black < playerCount())
		return pair(white, black);
	else
		return nextPair(gameNumber);
}
Exemplo n.º 2
0
QPair<int, int> GauntletTournament::nextPair()
{
	if (m_opponent >= playerCount())
	{
		m_opponent = 1;
		setCurrentRound(currentRound() + 1);
	}

	int white = 0;
	int black = m_opponent++;

	// Alternate colors between rounds to make it fair
	if (currentRound() % 2 == 0)
		qSwap(white, black);

	return qMakePair(white, black);
}