Kein Codeproblem nur Denkanstoß...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kein Codeproblem nur Denkanstoß...

    Hi PHPler!

    Es geht um ein Formel1-Tippspiel für meine zukünftige private Page, das soweit fast fertig gestellt ist,
    jedoch habe ich Probleme bei der Rangliste der User bzw. deren Erstellung!

    Dazu benötige ich lediglich einen Denkanstoß, die eigentliche Programmiererei kriege ich wohl selber hin!

    Die Grundlage des Problems bilden 2 MySQL-Tabellen:

    1. Tabelle: Rennergebnisse
    Diese besteht aus id, start_zeit, p1, p2, p3...p8
    id => int
    start_zeit => timestamp (Startzeit des Rennens)
    p1...p8 => int (hier werden die entsprechenden fahrer_ids eingetragen, also
    p1 => platz 1 z.B. Schumi mit id 1
    p2 => platz 2 z.B. Jenson Button mit id 10 usw.)
    Beispieldatensatz: 3, 1082894400, 1, 3, 2, 10, 5, 4, 7, 11


    2. Tabelle Tipps
    Besteht aus id, user, start_zeit, p1, p2, p3...p8
    user => Text (Name des Users, der getippt hat)
    Rest wie die andere Tabelle
    Beispieldatensatz: 12, Thomas, 1082894400, 1, 3, 2, 10, 5, 4, 7, 11

    So, nun zum Problem:

    Die Ergebnisse werden kurz nach dem Rennen upgedatet und das ist alles was ich an Pflege aufwenden möchte.
    Alles andere soll dynamisch berechnet werden - soll heißen, wenn sich ein User die Rangliste ansehen möchte,
    dann soll alles dynamisch anhand der beiden obigen Tabellen berechnet werden, um zwar Platz, Name und Punkte des Users.

    Getippt werden darf nur auf 8 Fahrer (eben p1...p8)
    Sieger richtig getippt: 5 Punkte
    Richtige Platzierung: 3 Punkte
    Fahrer in den Punkten: 1 Punkt

    Ich denke das ganze Problem ist mit Arrays bzw. deren Vergleich und Scheifen zu lösen, jedoch gibt es da bestimmt zig verschiedene Lösungen, aber bevor ich anfange x Zeilen überflüssigen Code zu programmieren, wollte ich hier mal nach Rat fragen!

    Eine effiziente Lösung ist mir auch hinsichtlich des Zeitfaktors (damit meine ich die Berechnungszeit) wichtig.
    Von weiteren Tabellenfeldern wie z.B. 'Punkte' in der User-Tabelle sehe ich ab, da mir sonst die Dynamik bzw. die leichte Pflege der ganzen Sache verloren geht...

    Wie gesagt, es reicht mir ein guter Denkanstoß!
    Ist eben mal ein anspruchsvolleres Problem (auf jeden Fall für mich zur Zeit) und ich hoffe ihr habt Zeit und Lust euch dem anzunehmen...

    MfG Jan

  • #2
    Hi,

    Erstmal eine Frage: Wieso nimmst du bei den Tipps nicht die Id der Rennen (statt der Zeit)?

    Anstonsten könnte man die Abfolge so machen:

    -) Alle Plazierungen durchgehen und schauen ob genau richtig getippt.
    -) Alle Tipps durchgehen.

    z.B.

    Du machst mal einen Array mit den Ergebnissen und einen mit den Tipps.
    PHP-Code:
    for ($i=0;$i<8;$i++) {
        if (
    $tip1[$i] == $tip2[$i]) {
            if (
    $i 0) {
                
    $punkte+=5;
            } else {
                
    $punkte+=3;
            }
        }
    }
    for (
    $i=0;$i<8;$i++) {
        if (
    $tip1[$i] != $tip2[$i] && in_array($tip1[$i],$tip2)) {
            
    $punkte+=1;
        }

    (nicht getestet - außerdem programmiere ich grundsätzlich nicht bugfrei)

    .. die beiden Schleifen kanst du nätürlich auch vereinigen.

    Für eine Rangliste rechnest du dir für jeden Spiele die Punkte aus packst Spielername und Punkte in ein Array und verwendest dann sort().

    Ich hoffe das hilft dir. Die Rechenzeit sollte nicht allzu hoch sein, man kann das ganze aber sicher noch optimieren oder besser machen

    Am besten speicherst du die Ranliste dann gleich in die DB. Dann brauchst du dir auch keine Performance-Sorgen machen.

    Gruß,
    Syco
    [COLOR=darkblue].: 1+1=23 :.[/COLOR]

    Kommentar


    • #3
      Stimmt, die Id des Rennens zu nehmen wäre logischer, klar!
      Ist stilistischer auch viel besser... war blöd...

      Danke für den Code, darauf bin ich auch schon gekommen und nutze es in der User-spezifischen Statistik (da ist jedes Rennen einzeln aufgeführt und die Ergebnisse werden mit dem jeweiligen Tipp verglichen und berechnet)!
      Mein Problem liegt jedoch bei der kompletten Rangliste (eben von allen Rennen zusammen gerechnet), um es mit deinen Worten zu sagen:

      Für eine Rangliste rechnest du dir für jeden Spiele die Punkte aus packst Spielername und Punkte in ein Array und verwendest dann sort().

      Eben genau da hört es bei mir auf! Wär voll nett wenn du mir das nochmal ausführlicher beschreiben könntest!

      Danke für die schnelle Antwort!

      MfG Jan
      Zuletzt geändert von Wantonio; 25.04.2004, 01:03.

      Kommentar


      • #4
        Gut,

        Du rechnest dir für jeden Spieler die Punkte aus.
        Wenn du die Punkte hast schreibst du.
        PHP-Code:
        $ranliste[$spieler] = $punkte
        das ganze in einer Schleife, bis du alle Spieler durchhast

        Dann kommt
        PHP-Code:
        asort($ranliste);
        $i=0;
        while (list(
        $spieler,$punkte) = each($rangliste) {
            echo 
        "Rang".$i." :".$spieler." (".$punkte." Punkte)<br />";
            
        $i++;

        Wenn du das Script verstanden hast, solltest du es auch ohne Probleme so erweitern könne, dass eine Gesamtwertung über die ganze bisherige Saison erreichnet wird.

        P.S. vielleicht kannst du mir auch noch schnell helfen bevor ich schlafen gehe:
        http://www.php-resource.de/forum/sho...threadid=37748
        Zuletzt geändert von syco23; 25.04.2004, 01:28.
        [COLOR=darkblue].: 1+1=23 :.[/COLOR]

        Kommentar


        • #5
          Sehr geil!
          Hab's jetzt 'rausbekommen, vielen Dank für deine Hilfe!
          Läuft 1A ohne extra Tabellen, alles dynamisch - supergeil, so wie ich's mir vorgestellt habe!

          Kommentar

          Lädt...
          X