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); }
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); }