AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spielplan erzeugen?

Ein Thema von gipfelstürmer · begonnen am 19. Sep 2007 · letzter Beitrag vom 21. Sep 2007
Antwort Antwort
gipfelstürmer

Registriert seit: 10. Mär 2007
13 Beiträge
 
#1

Spielplan erzeugen?

  Alt 19. Sep 2007, 19:56
Ich bin dabei einen eigenen kleinen Fussball-Manager zu erzeugen und bin beim Erzeugen eines Spielplans auf Probleme gestoßen. Bisher bin ich so weit:

Delphi-Quellcode:
for k:=1 to 6 do
  begin
  case k of
  1,3,5: begin
          partie[k].id:=k;
          x:=random(4)+1;
          partie[k].heim:=teams[x];
          y:=random(4)+1;
          partie[k].auswaerts:=teams[y];
          if (x=y) or (y=partie[k-2].auswaerts.id) or (y=partie[k-2].heim.id)
            then
              begin
                repeat
                  y:=random(4)+1;
                until (x<>y) and (y<>partie[k-1].heim.id) and (y<>partie[k-1].auswaerts.id);
              end;
          partie[k].auswaerts:=teams[y];
         end;
  2,4,6: begin
          partie[k].id:=k;
          repeat
          x:=random(4)+1;
          until (x<>partie[k-1].heim.id) and (x<>partie[k-1].auswaerts.id);
          partie[k].heim:=teams[x];
          repeat
          y:=random(4)+1;
          until (y<>x) and (y<>partie[k-1].heim.id) and (y<>partie[k-1].auswaerts.id);
          partie[k].auswaerts:=teams[y];
         end;
  end;
Im Moment kommt es vor, dass einige Partien doppelt vorkommen, da ich bei weitem nicht alle Bedingungen drinne habe. Hat jemand eine Idee wie man das ganze vereinfachen könnte (auch für eine größere Zahl von Spielen) oder bleibt mir nichts anderes überig als alle Bedingungen für jeden einzelnen Spieltag einzufügen?
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Spielplan erzeugen?

  Alt 19. Sep 2007, 19:59
sag mal, kannst du das selbst lesen? Keine Kommentare, sehr individuelle und kreative Einrückung

Nach welchen Regeln werden denn die Spiele zusammengesetzt?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: Spielplan erzeugen?

  Alt 19. Sep 2007, 20:00
Zitat von gipfelstürmer:
Hat jemand eine Idee wie man das ganze vereinfachen könnte
Ich zumindest nicht, da ich keine Lust habe, Deinen Code zu entschlüsseln...

Edit: Manchmal kommt ein roter Kasten, obwohl keine neuen Beiträge vorhanden sind; manchmal kommt keiner, obwohl welche vorhanden sind. Sehr mysteriös.
  Mit Zitat antworten Zitat
gipfelstürmer

Registriert seit: 10. Mär 2007
13 Beiträge
 
#4

Re: Spielplan erzeugen?

  Alt 20. Sep 2007, 20:44
Danke für die Anmerkung. Ich hab das programmieren in der Schule gelernt und da die ersten Programme nicht wirklich lang und unübersichtlich sind, ist das Einrücken an mir vorbei gegangen.

Ich hab mir noch ein paar Gedanken gemacht und das auch ganz gut hinbekommen:

Delphi-Quellcode:
  for k := 1 to 12 do
  begin
    repeat
      gleich := false;
      x := random(4) + 1;
      partie[k].heim := teams[x]; //Mannschaft x wird ausgelost
      while (y = 0) or (y = x) do
      begin
        y := random(4) + 1;
        partie[k].auswaerts := teams[y]; //Mannschaft y wird ausgelost
      end;
      partiek[k] := strtoint(inttostr(x) + inttostr(y)); //die partie erhält den wert xy
      while (i < k) and (gleich = false) do
      begin
        if (partiek[k]) = (partiek[i]) // es wird geprüft ob xy bereits vorhanden ist
          then begin
          gleich := true;

        end
        else gleich := false;
        i := i + 1;
        y := 0;
      end;
    until gleich = false;
    m_spielplan.lines.add((partie[k].heim.name) + ('-') + (partie[k].auswaerts.name));
  end;
Das ganze klappt ganz gut, nur die repeat-Schleife wird nicht wiederholt obwohl gleich=true ist.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#5

Re: Spielplan erzeugen?

  Alt 20. Sep 2007, 20:56
Hallo,

löblich, dass Du Dir nochmals Gedanken gemacht hast; leider ist das Resultat nicht besser geworden.
Kommentiere Deinen Code doch mal.

Woher soll jemand ausser Dir wissen, was 'partie' und 'teams' sind?

Desweiteren:
Delphi-Quellcode:
    then gleich:=true;
       else gleich:=false;
vor einem 'else' schreibt man kein ';' nicht - nein.

Und besorg Dir einen CodeFormatter (bspw. 'DelForExp')
  Mit Zitat antworten Zitat
gipfelstürmer

Registriert seit: 10. Mär 2007
13 Beiträge
 
#6

Re: Spielplan erzeugen?

  Alt 20. Sep 2007, 21:11
Habs mal geändert.

partiek ist ein array der alle bisher erstellten partien enthält.
partie ist die neu erstellte partie
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Spielplan erzeugen?

  Alt 20. Sep 2007, 21:34
Ich hab mir den Code mal angesehen und analysiert. Kann sein, dass ich manche Sachen falsch eingeschätzt habe, weil ich das ganze nur mal im Kopf durchgespielt habe. Hinzu kommt noch, dass ich nicht weiß, was partiek ist. Und von Spielplänen hab ich keine Ahnung -.-'

Trotzdem hab ich dir ein paar Kommentare in den Source geschrieben und an manchen Stellen etwas gekürzt. Vielleicht hilft dir das ja, den Fehler zu finden.

Delphi-Quellcode:
for k := 1 to 12 do
begin
  repeat
    // gleich wird initialisiert: das ist wichtig, hast du allerdings bei einigen
    // variablen vergessen, was zu fatalen folgen führen kann
    gleich := false;
    // Zufällige Mannschaft ermitteln
    x := random(4)+1;
    // In aktuelle Partie Heimmannschaft eintragen
    partie[k].heim := teams[x];

    // -> y muss entweder 0 sein oder die Zufallszahlx, also die Heimmannschaft.
    // Das hieße, die Auswärtsmannschaft muss entweder die Manschaft mit Index 0
    // oder die Heimmannschaft sein
    // Macht das Sinn?! o_O
    while (y=0) or (y=x) do // Achtung, y ist nicht initialisiert!
    begin
      y := random(4)+1; // Hier wird die Zufallszahl ermittelt, die eh nur
                        // 0 oder x sein darf!
      partie[k].auswaerts := teams[y]; // Wert wird eingetragen: das sollte man
                                       // lieber nach der Schleife machen
    end;
    // Hier werden die beiden Zahlen x und y aneinandergefügt, jedoch nicht addiert
    // Soll das so sein??
    partiek[k] := strtoint(inttostr(x)+inttostr(y));
    // Solange i kleiner ist als der Index der aktuellen Partie UND
    // partiek[k] nicht das gleiche ist wie partiek[i]
    // Frage: was ist partiek?
    // ACHTUNG: i ist nicht initialisiert
    // Es kann sehr gut sein, dass diese schleife NIE durchlaufen wird!
    while (i<k) and (not gleich) do
    begin
      gleich := (partiek[k]) = (partiek[i]); // hab das mal gekürzt
      inc(i);
    end;
  until not gleich; // bin mir nicht sicher, ob dieser Vergleich Sinn macht...
                    // Du prüfst hier im Endeffekt, ob das item partiek[k]
                    // sich von pariek[i] unterscheidet.
end;
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#8

Re: Spielplan erzeugen?

  Alt 20. Sep 2007, 21:39
Zitat von NamenLozer:
Trotzdem hab ich dir ein paar Kommentare in den Source geschrieben und an manchen Stellen etwas gekürzt. Vielleicht hilft dir das ja, den Fehler zu finden.
Einerseits löblich von Dir, dass Du Dir so viel Mühe gibst.

Auf der anderen Seite denke ich aber:
Wenn ich demnächst mal wieder so schrecklich faul bin, kann ich Dir dann auch meine Sourcen geben, damit Du sie kommentierst?

Dem gipfelstürmer sollte erstmal klar gemacht werden, wie man in einem Forum ordentlich seine Fragen formuliert, so dass diejenigen, die ihm helfen möchten, auch etwas mit seiner Fragestellung anfangen können. Ansonsten haben wir einen zweiten Takkitukki (Ähnlichkeiten mit bekannten Personen sind absolut zufällig).
  Mit Zitat antworten Zitat
gipfelstürmer

Registriert seit: 10. Mär 2007
13 Beiträge
 
#9

Re: Spielplan erzeugen?

  Alt 21. Sep 2007, 15:39
Die Variablen sind an anderer Stelle initialisiert.

partiek ist ein array of integer der die bisher erstellen Partien in der Form xy (bewusst xy und nicht x+y).

zur 1.while-Schleife: Die Bedingungen regeln doch, dass die Schleife ausgeführt wird wenn y=x oder y=0 um diese Fälle zu verhindern.

Die repeat-Schleife soll solange durchlaufen werden (also x und y werte erzeugen) bis eine Partie ensteht die noch nicht vorhanden ist, daher der Vergleich.
  Mit Zitat antworten Zitat
gipfelstürmer

Registriert seit: 10. Mär 2007
13 Beiträge
 
#10

Re: Spielplan erzeugen?

  Alt 21. Sep 2007, 18:44
Ich hab die Lösung gefunden und bin ein wenig schockiert von der Einfachheit der Lösung. Zu Beginn der Repeat-Schleife muss das i natürlich auf 1 zurück gesetzt werden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz