Spielplan erstellen
Übersicht

MuckBetreff: Spielplan erstellen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm ja, ich möchte einen automatisch generierten Spielplan haben, z.B. für die Bundesliga. Dafür hab ich erstmal folgende Felder angelegt:
dim Bundesliga1_Teams$(17) dim heimteam$(33,8 ) dim auswaertsteam$(33,8 ) Jetzt müssen halt "nur" noch die Teamnamen korrekt auf die arrays verteilt werden, d.h. alle Teams müssen jeden Spieltag zum Einsatz kommen, jede Partie darf es nur einmal pro Runde geben und wenn möglich noch für jedes Team Heim- und AW-Spiel im Wechsel. Sitz jetzt schon ewig dran (wie man an der Zeit sieht ![]() |
||
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also ich kenn mich nicht mit Fussball aus.
Es werden ja die teams in eine Lostrommel gesteckt und dann werden zufällig paarungen gezogen bis die Trommel leer ist oder? Dann kann man das genau so machen, allerdigs geht das mit Types viel einfacher: Code: [AUSKLAPPEN] Type team Field name$ End Type Type match Field team1.team Field team2.team End Type Type lostrommel Field team.team End Type ;anzahl der teams anzahl = 16 ;teams erstellen For i=1 To anzahl t.team = New team t\name = "Team_"+i Next ;alle teams in die virtuelle lostrommel For t.team = Each team l.lostrommel = New lostrommel l\team = t Next ;die anzahl der matche ist die anzahl der teams durch 2 For i=1 To Floor(anzahl/2) team1.team = choose_team() team2.team = choose_team() ;das match anlegen m.match = New match m\team1 = team1 m\team2 = team2 Next ;die paarungen ausgeben For m.match = Each match match_num = match_num + 1 Print "Match "+match_num + ": " + m\team1\name+" - "+m\team2\name Next WaitKey Function choose_team.team() ;erstmal zählen For l.lostrommel = Each lostrommel anzahl = anzahl + 1 Next ;zufällig eine Nummer ziehen SeedRnd(MilliSecs()) r = Rand(0,anzahl-1) ;solange durch den Type gehen bis nummer erreicht ist l.lostrommel = First lostrommel For i=1 To r l.lostrommel = After l Next ;team merken und das los löschen team.team = l\team Delete l ;den type zurückgeben Return team End Function |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
@klaas
Er braucht das für 18 Teams, und das 17 mal nacheinander wobei keine einzige Paarung identisch sein darf. @muck Ich habe das immer hardcodiert. Will sagen, ich habe einen funktionierenden Spielplan genommen, und dann die Mannschaften per Zufall zugewiesen. |
||
solitaire |
Muck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hardcodiert?! Du meinst von Hand den ganzen Spielplan abgetippt oder wie? So hab ichs bisher gemacht - ist aber ne scheiss Lösung, denn 1.) braucht das nen Haufen Platz und 2.) ist das Problem ja, dass es auch Ligen mit 20 Teams oder so gibt. Da müsste ich dann nochmal nen ganzen anderen Spielplan eintippen..... ![]() |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich meinte natürlich hardgecodet.
Viel Platz ist das nicht, ca 1 Data Zeile pro Mannschaft oder Spieltag, wie man es nimmt. Ist nur etwas unelegant. Paarungen erstellen wäre ja kein Problem. Nur H/A abwechselnd geht erstmal gar nicht, weil alle Teams die am Anfang zu Haus spielen, ja irgendwann auch gegeneinander antreten müssen. Und die Ausnahmen prüfen dürfte etwas schwer werden. |
||
solitaire |
![]() |
SoNenTyp |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Man Macht eine Liste, in dieser Stehen alle Möglichen Paarungen.
2. Davon Wählt man dann, durch Zufall, eine aus. 3. Diese und das Rückspiel werden dann in einer weiteren Liste gespeichert. 4. Anhand dieser Liste kann man dann Wieder eine Liste Machen, in der nur die noch möglichen Paarungen vor kommen. 5. Wenn noch eine oder Mehrere Paarungen fehlen geht es wieder zu Punkt 2, wenn nicht ist hier schluss. Hoffe das ist so verständlich. |
||
Gruss Der Typ.
User posted image |
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hoffe das hilft dir weiter.
H/A hab ich noch nicht ausführlich getestet, dürfte aber so in etwa hinkommen. Code: [AUSKLAPPEN] ; spielplan erstellen ; ; soli - andsa @ web.de ; ;vari anzahlmannschaften=18 spielplan(anzahlmannschaften) Function spielplan(anzahlmannschaften) ;für weniger mannschaften nicht notwendig If anzahlmannschaften<4 Then Return; If anzahlmannschaften Mod 2=0 modus$="gerade" spieltage=anzahlmannschaften-1 Else modus$="ungerade" spieltage=anzahlmannschaften EndIf For x=1 To spieltage Cls Locate 0,0 Print x + ".Spieltag" If modus$="gerade" paarungen=anzahlmannschaften/2 ;reihum - mannschaftA-rechtsherum - mannschaftB-linkssherum For y=1 To paarungen mannschaftA= (x+1 + y-3) Mod (anzahlmannschaften-1) + 1 mannschaftB= (anzahlmannschaften + x - y-1 ) Mod (anzahlmannschaften-1) + 1 ;mannschaft des spieltages spielt immer gegen die letzte mannschaft If mannschaftA=x mannschaftB=anzahlmannschaften EndIf ;gerader spieltag - paarungen drehen wegen Heim/Auswärts If x Mod 2 = 0 tmp=mannschaftA mannschaftA=mannschaftB mannschaftB=tmp EndIf Print mannschaftA + " : " + mannschaftB Next EndIf ;Stop If modus$="ungerade" paarungen=Int(anzahlmannschaften/2) ; mannschaft identisch mit spieltag ist spielfrei Print "Spielfrei:" + x For y=1 To paarungen mannschaftA= (x+1 + y-2) Mod (anzahlmannschaften) + 1 mannschaftB= (anzahlmannschaften + x - y -1 ) Mod (anzahlmannschaften) + 1 ;gerader spieltag - paarungen drehen wegen Heim/Auswärts If x Mod 2 = 0 tmp=mannschaftA mannschaftA=mannschaftB mannschaftB=tmp EndIf Print mannschaftA + " : " + mannschaftB Next EndIf WaitKey() Next End Function |
||
solitaire |
Muck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, hab mir das jetzt mal angeschaut und deine Formel klappt tatsächlich! Genau sowas wollte ich haben, danke ![]() H/A sind auch meistens im Wechsel, nur zweimal kommt es vor, dass zwei H- oder A-Spiele hinternander sind. Das ist aber nicht schlimm, gibt's in echt auch. Damit haste dir nen Eintrag in den Credits verdient... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group