Liga: erstellen der Paarungen + Spieltage

CrushLog

Erfahrenes Mitglied
Hallo,

ich bin grad dabei eine kleine Test Liga zu programmieren. Alles in allem ja kein Problem, allerdings steh ich nun vor der Auslosung der Begegnungen. Das Ganze soll dem Prinzip der Bundesliga ähneln, also: 12 Spieler, 6 Spiele pro Spieltag, somit 11 Spieltage und insgesamt 66 Spiele. Soweit sogut, die Auslosung der möglichen Paarungen ist klar, da geh ich einfach die Spieler per Schleifen durch und lass sie gegen jeden anderen Spieler antreten, nur nicht gegen sich selbst. Das Eintragen funktioniert auch, nun aber das Problem: Die Match Tabelle enthält auch den Wert für den Spieltag, und der soll nun per random eingetragen werden, so dass 6 Paarungen pro Spieltag entstehen.
Egal wie ich es auch versuch, und wenns noch so simpel ist, ich bekomm es nicht hin. Hab bis jetzt einfach ein Array von 1-11 angelegt und die durchgemixt, und die dann eingetragen, sprich 6 Durchgänge, da es 66 Spiele sind, und dort dann immer die durchegmixten Werte des Arrays eingetragen. Nun ist es aber so, dass einige Spieler an einem Tag mehrmals ranmüssen, das soll natürlich nicht sein.
Ich steh vollkommen auf dem Schlauch und weiss echt nicht mehr weiter. Könnte sich vielleicht jemand mal damit gedanklich beschäftigen und mir ein wenig logische sowie praktische Hilfestellung geben?
Wäre euch echt dankbar!

Und sorry, falls ich etwas verquer und kompliziert geschrieben haben sollte, ich sitz bis jetzt an dem Script und bin extrem müde :D

//Ben
 
per random ist dies ein echt schweres Problem. Wir mussten soetwas schon als Gruppenarbeit lösen und wir haben einen Algorithmus gefunden, der allerdings in den letzten spielen der Hinrunde extrem lang braucht.
Es gibt allerdings eine Methode, welche unter dem begriff "Rutschsystem" oder so in den Google-newsgroups zu finden sein soll. Ich habe sie allerdings nicht gefunden.
Diese Methode wurde bis auf die letzte Saison die Bundesligaspieltage vom DFB berechnet.
Diese Methode soll auch auf ein ausgewogenen Verhältnix zwischen Heim- und Auswärtspartien achten.

Also falls du was findest ... stell es ruhig rein ;)
 
Na toll, das heisst ich hab da ein ganz brandheisses Thema angefasst und keiner kennt eine Lösung? Na super, da fühl ich mich auf jeden Fall besser :D
Aber gibt es dann eine andere Art der Lösung ohne alles, sagen wir mal manuell machen zu müssen?
 
CrushLog hat gesagt.:
Na toll, das heisst ich hab da ein ganz brandheisses Thema angefasst und keiner kennt eine Lösung?

Doch, ich :-) :-) :-)

Ich bin auch Ligaleiter und habe auch lange gesucht bis ich was gefunden hatte und hier und da was verbessert oder meinen Wünschen angepasst. :)

PHP:
// ==================== Spielplan Generator ===============================

    // Array mit Spielern mischen
    shuffle ($teams);

    // Testen ob die Anzahl der Teams gerade ist, wenn nicht das Team "frei" hinzufügen.
    if(count($teams) % 2 ){
        array_push($teams , 'FREI');
    }

    $anz    = count($teams);      // Anzahl der Teams im Array $teams
    $paare  = $anz/2;            // Anzahl der möglichen Spielpaare
    $tage  = $anz-1;            // Anzahl der Spieltage pro Runde
    $spiele = $paare*$tage;    // Anzahl der Spiele pro Hin-/Rück-Runde
    $plan  = array();            // Array für den kompletten Spielplan
    $xpos  = $anz-1;            // höchster Key im Array $teams
    $tag    = 0;                  // Zähler für Spieltag
    $spnr  = 0;                  // Zähler für Spielnummer
    $sppaar = 0;                // Zähler für Spielpaar
    $i      = 0;                    // Schleifenzähler
    // ================================================================================
    for ($tag=1; $tag<$anz; $tag++) {
      array_splice ($teams, 1, 1, array(array_pop($teams),$teams[1]));
      for ($sppaar=0; $sppaar<$paare; $sppaar++) {
          $spnr++;
          // wechseln zwischen G und H -Spiel:
          if (($spnr%$anz!=1) and ($sppaar%2==0)) {
              $hteam = $teams[$sppaar];
              $gteam = $teams[$xpos-$sppaar];
          }  else {
              $gteam = $teams[$sppaar];
              $hteam = $teams[$xpos-$sppaar];
          }
          $plan[$tag][$spnr]["G"] = $gteam;                // für Hin-Runde
          $plan[$tag][$spnr]["H"] = $hteam;                // für Hin-Runde
          $plan[$tag+$tage][$spnr+$spiele]["G"] = $hteam;  // für Rück-Runde
          $plan[$tag+$tage][$spnr+$spiele]["H"] = $gteam;  // für Rück-Runde
      }
    }
    ksort($plan); // nach Spieltagen sortieren
    // ================================================================================
    $rueck = count($plan)/2 ;
    $Runde = 1;

    foreach($plan as $spieltag => $v1) {
        foreach($v1 as $spielnummer => $v2) {

        $H = $plan[$spieltag][$spielnummer]['H'];
        $G = $plan[$spieltag][$spielnummer]['G'];

        // Folgendes Echo für Test ohne Eintrag in DB
        // echo "Spieltag $spieltag: $H - $G <br>";

        // Hier könnte jetzt ein "INSERT INTO TABLE ..." mit den vg. '$values' erfolgen.
        mysql_query ("INSERT INTO ...........");
        }
        if ($spieltag == $rueck){
            $Runde = 2;
        }

    }

    sleep(1);
    // Hier ein Abfrage von den Paarungen um später die Spiele mit Frei zu löschen
    $sql2 = "SELECT * FROM ..........'";
    $result2 = mysql_query ($sql2);

    if (mysql_num_rows ($result2) > 0) {
        while ($data2 = mysql_fetch_array ($result2))
        {
            mysql_query("DELETE FROM ..... WHERE Heim='FREI' OR Gast='FREI'");
        }
    }

Hier und da musst du natürlich die Werte deiner Tabelle anpassen und deine Bezeichnungen für die Arrays ändern.

Funktioniert sowohl bei geraden als auch bei ungeraden Spielerzahlen und ist auch nicht begrenzt. :)
 
Das funktioniert ja tatsächlich.
Nicht schlecht das skript da oben.
Aber wie bekommt man das hin dass man keine Rückrunde hat.
Also nur 1xGegen jeden.
 
was muss ich denn mache damit es wirksam wird versteh hier nur bahnhof. Kann jemand ne kurze Anleitung posten bitte ?
 
Du musst die Variable $teams definieren (Array) und dann in eine php-Datei stecken. Datei aufrufen und du hast den Spielplan!
 
Zurück