示例#1
0
/** Creates 2 groups: one from winners and one from loosers
 */
QList< Group* > SwissGroup::split( ) const
{
  if ( _matches.count() < 2 ) { // nothing to split
    return QList< Group* >();
  }

  QList< Group* > ret;
  PlayerList w = winners(), l = loosers();

  // number of winnders and loosers can be non-even, when group consists,
  // for example, from 6 persons. We need to add 'bye' players 
  if ( w.count() & 1 ) w << byePlayer;
  if ( l.count() & 1 ) l << byePlayer;

  qDebug() << "Winners:";
  for ( int i = 0; i < w.count(); i ++ ) {
    qDebug() << w.at( i ).name();
  }

  qDebug() << "Loosers:";
  for ( int i = 0; i < l.count(); i ++ ) {
    qDebug() << l.at( i ).name();
  }

  // winners group
  if ( !isPlayerListByed( w ) ) {
    ret << new SwissGroup( _fromPlace, _stage + 1, w ); 
  }

  // loosers group
  if ( !isPlayerListByed( l ) ) {
    ret << new SwissGroup( _fromPlace + _players.count() / 2, 
                           _stage + 1, l );
  }

  foreach( Group *g, ret ) {
    const TournAlgo *a = _tournData->algo();
    Q_CHECK_PTR( a );
 
    g->setTournData( _tournData );
    g->setQualif( isQualif() );
    dynamic_cast<SwissGroup*>(g)->permuteMatches( a->breakAlgo() );

    // if there is at least one bye player, we should notify that
    // at least one game is fakely played.
    if ( g->const_players().contains( byePlayer ) ) {
      _tournData->groupChanged( g );
    }
  }
 
  return ret; 
}
示例#2
0
/** export results to json
 */
void Group::write( QJsonObject &json ) const
{
  json["name"] = name();
  json["stage"] = (int)stage();
  json["type"] = type();
  json["qualif"] = isQualif();

  MatchList ml = _matches;
  
  QJsonArray mArray;
  foreach( Match m, ml ) {
    QJsonObject mObj;
    m.write( mObj );
    mArray.append( mObj );
  }