Liga-Script

mDd-nightmare

Grünschnabel
Hallo Leute,

ich hab folgendes Problem:

Und zwar bleibe ich irgendwie bei der Genierung der Paarungen in einem Liga-System stecken.
Die Genierung der einzelnen Paarungen ist ansich kein Problem, nur gibt es ein bestimmtes Kriterieum, das beachtet werden muss: Jedes Team darf nur einmal pro Woche spielen.

Das Problem ist immer, dass das TeamArray angeblich keine passenden Teams mehr hat um passende Paarungen erstellen zu können.

Eckdaten des Scripts:
  • Liga-System (keine Rückrunde)
  • 10 Teams (kommt eben auf die Anmeldungen an)
  • macht 45 Paarungen
  • 9 Wochen Spielzeit (1 Spiel pro Woche pro Team) und
  • 5 Spiele pro Woche
Bei einer ungeraden Team-Anzahl wäre das dann X Spiele pro Woche und ein Spiel in der letzten Woche

PHP:
/* genieren der teams (normal aus datenbank....) */
class Team {
    var $id = null;
    var $name = null;

    function Team ($id)
    {
        $this->id = $id;
        $this->name = "Team_".$id;
    }
}
for($i=1; $i<=10; $i++)
    $teams[] = new Team($i);
/* ende.... */


/* zweite array mit gleichen teams zur genierung der paarungen (keine andere lösung) */
$teams2 = $teams;

shuffle($teams);
shuffle($teams2);

$numTeams = count($teams);
$weeks = count($teams)-1;
//$this->BuildRunden($weeks);

// wieviele paarungen gibt es?
$numPaarungen = $numTeams*($numTeams-1)/2;

// wieviel Matche pro woche?
$MatchPerWeek = $numPaarungen / $weeks;
$tmp = explode(".",$MatchPerWeek); // fals ne komma zahl
$ungerade = $tmp[1] > 0 ? 1 : 0;

//false ne komma zahl -> plus eins.. und letzte woche nur 1 Spiel stat $MatchPerWeek....
$MatchPerWeek = $ungerade ? $tmp[0]+1 : $MatchPerWeek;

echo "<div style='text-align: left'>";

$z=0;
$round = array();
for($i=0; $i<$weeks; $i++)  // wochen durchgehen....
{
    echo "---- $i. Woche -------------<br>";
    $round[$i] = array();
    for($r=0; $r<$MatchPerWeek; $r++) // matche/woche
    {
        if($ungerade && $i == $weeks-1) // wenn $ungerade dann ist in der letzten woche nur ein spiel...
            $r=$MatchPerWeek;

        foreach($teams as $team) // erste team array....
        {
            foreach($teams2 as $vs_team) // zweite team array
            {
                if($team->id != $vs_team->id) // nur wenn gegner unterschiedlich
                {
                    foreach($round[$i] as $rr) // erstellte runden prüfen ob Team schon in woche drin?
                    {
                        if($rr[0] == $team->id || $rr[1] == $team->id || $rr[0] == $vs_team->id || $rr[1] == $vs_team->id)
                        {
                            $no = true;
                            break;
                        }else
                            $no = false;
                    }

                    if(!$no) {
                        foreach($round as $rr)
                        {
                            foreach($rr as $_rr)
                            {
                                // prüfen ob paarung in der form schon exitiert oder anderen...
                                if($_rr[0] == $team->id && $_rr[1] == $vs_team->id)
                                {
                                    $no_NO = true;
                                    break;
                                }elseif($_rr[0] == $vs_team->id && $_rr[1] == $team->id) {
                                    $no_NO = true;
                                    break;
                                }else
                                    $no_NO = false;
                            }
                            if($no_NO) break;
                        }
                        // nur wenn prüfungen alle false geben....
                        // (wenn Team nur einmal in Woche vorkommt
                        //  und paarung nicht existiert...)
                        if(!$no_NO) {
                            $round[$i][$r][0] = $team->id;
                            $round[$i][$r][1] = $vs_team->id;
                            echo "&nbsp;&nbsp;".$team->id." vs ".$vs_team->id."<br>";
                            $set = true;
                            break;
                        }else
                            $set = false;
                    }else
                        $set = false;
                }
            } // ende foreacch team2 array
            if($set) break;
        } // ende foreach team array
        if(!$set)
            echo "kein match mehr möglich für diese woche laut array... :(<br>";
        reset($teams);
        reset($teams2);
    }
}
echo "</div><br>";

Nun ja, ich hoffe, das Problem ist gut geschildert! ;)
Vieleicht kann mir jemand einen kleinen Denkanstoß geben, wo mein Fehler liegt!

greetz
nightmare aka christian

PS: Die Eckdaten sind jetzt nur passend auf das Beispiel bezogen. Im richtigen Script können das alles Zufallszahlen sein. Es soll mir eben alles automatisch genieren.
 
Zurück