"Jeder gegen Jeden" - Spielplan ??

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

  • "Jeder gegen Jeden" - Spielplan ??

    hallo community!

    ich sitze hier seit tagen fest und zerbreche mir den kopf über eine besonders knifflige (zumindest für mich is das so) aufgabe, die ich nun gern mit euch teilen möchte!

    es geht um ein php-script, welches eine lästige aufgabe übernimmt, die jeder programmierer mit freuden autmomatisieren möchte, weil es sich regelrecht anbietet.

    im speziellen fall handelt es sich bei mir um das erstellen eines spielplans für ein tischtennisturnier (kann auch jeder andere einzel- oder teamsport sein). man sollte nach angabe der namen aller teilnehmer (kann von 2 bis unendlich viel sein) eine liste aller spiele aufgelistet bekommen, so dass:

    1. jeder spieler gegen jeden spieler antritt

    2. es keine doppelten spiele gibt (zb. otto gegen mark bzw. mark gegen otto)

    3. jeder spieler die längstmögliche pause zwischen seinen spielen hat (bei 5 teilnehmern wären 10 spiele nowendig, zb. otto spielt also nicht 4 mal gleich hintereinander, sondern zb. spiel 1,3,6 und 9)

    ich habs bis jetzt geschafft eine formel mit php zu erstellen, die nach eingabe der anzahl der teilnehmer, die anzahl der spiele ausgibt:

    Formel: [(Anzahl d. Spieler) * (Anzahl d. Spieler) - (Anzahl der Spieler)] / 2

    ansatzweise denke ich mir, man könnte in einer textbox die spieler mit beistrichen getrennt aufschreiben und per explode einen array mit den spielern füllen - den array vielleicht duplizieren und dann die spiele nach oben genannten richtlinien zwischen den arrays hin und her ausgeben, so wie in einer matrix. klingt alles sehr theoretisch und ich bin gespannt ob jemand einfälle dazu hat!

    Danke für eure Zeit

    EDIT:
    *verschieb* zu brainstormings
    Zuletzt geändert von wahsaga; 18.04.2004, 14:24.

  • #2
    Mhn, Funktioniert nicht ganz richtig, aber vielleicht kannst du es verbessern..


    1. Nur getestet mit 4 Spielern
    2. Bei Reihe 1 Match 2 stimmt der Spieler 1 mit dem Spieler 2 des Matches 1 der Runde 1 überein.


    PHP-Code:
    <?php
    //Otto, Hannes, Hubert, Karl
    $Players = array('Otto''Hannes''Hubert''Karl');
    $Player count($Players);

    $GamesPerPlayer $Player-1//3 Spiele spielt jeder Spieler

    $GamesTotal = ($Player*$Player-$Player)/$Player//5 Spiele Insgesamt

    $posx 0;
    $posy 0;

    $end 1;

    while(
    $end) {
        
    /*
        * Posx = 4
        */
        
        
    if($posx == $Player/2) {
            
    $posx 0;
            
    $posy++;
            echo 
    '<hr />';
        }
        
        if(
    $posy == $GamesPerPlayer$end 0;
        else {
            if(((
    $posx+1) == ($Player/2)) && (($posy+1) == $GamesPerPlayer)) {
                echo 
    $Players[$posx].' gegen '.$Players[($posx+($posy-1))].'<br />';
            } else {
                echo 
    $Players[$posx].' gegen '.$Players[($posx+($posy+1))].'<br />';
            }
        
            echo 
    'PosX : '.$posx.'<br />PosY: '.$posy.'<br /><br />Player 1: '.$posx.'<br />Player 2: '.($posx+($posy+1)).'<hr />';
        }
        
        
    /*
        Reihe 1:
        
        
        Posx = 1
        Spieler 1 = Player[0]
        Spieler 2 = Player[1]
        
        Posx = 2
        Spieler 1 = Player[2]
        Spieler 2 = Player[3]
        
        
        -------------------------------------
        
        Reihe 2:
        
        Posx = 1
        Spieler 1 = Player[0]
        Spieler 2 = Player[2]
        
        Posx = 2
        Spieler 1 = Player[1]
        Spieler 2 = Player[3]
        
        
        --------------------------------------
        
        Reihe 3:
        
        Posx = 1
        Spieler 1 = Player[0]
        Spieler 2 = Player[3]
        
        Posx = 2
        Spieler 1 = Player[1]
        Spieler 2 = Player[2]
        */
        
        
        
    $posx += 1;
    }

    /*
    So sollten die Spiele aussehen (perfekte Reihenfolge):

    Otto - Hannes
    Hubert - Karl

    Otto - Hubert
    Hannes - Karl

    Otto - Karl
    Hannes - Hubert
    */
    ?>
    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

    Kommentar


    • #3
      danke für deine hilfe floriam.

      soweit war ich allerdings schon mal, die herausforderung ist, es so flexibel zu gestalten, dass es für beliebig viele spieler funktioniert.

      ein weiterer punkt sind die spielpausen für die einzelnen teilnehmer, eine echt hart nuss.....

      Kommentar


      • #4
        Müssen auch 3, 5, 7, usw. Leute spielen können?
        PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

        Kommentar


        • #5
          So, neuer Stand, funktioniert perfekt bei 4 Spielern, bei mehr Spielern probier ichs gerad aus


          PHP-Code:
          <?php
          //Otto, Hannes, Hubert, Karl
          $Players = array('Otto''Hannes''Hubert''Karl');
          $Player count($Players);

          $GamesPerPlayer $Player-1//3 Spiele spielt jeder Spieler

          $GamesTotal = ($Player*$Player-$Player)/$Player//5 Spiele Insgesamt

          $posx 0;
          $posy 0;

          $end 1;

          while(
          $end) {
              
          /*
              * Posx = 4
              */
              
              
          if($posx == $Player/2) {
                  
          $posx 0;
                  
          $posy++;
                  echo 
          '<hr />';
              }
              
              if(
          $posy == $GamesPerPlayer$end 0;
              else {
                  if(
          $posx+== $Player/&& $posy+== $GamesPerPlayer) {
                      echo 
          $Players[$posx].' gegen '.$Players[$posx+1].'<br />';
                      echo 
          'PosX : '.$posx.'<br />PosY: '.$posy.'<br /><br />Player 1: '.$posx.'<br />Player 2: '.($posx+1).'<hr />';
                  } else {
                      echo 
          $Players[$posx].' gegen '.$Players[($posx+($posy+1))].'<br />';
                      echo 
          'PosX : '.$posx.'<br />PosY: '.$posy.'<br /><br />Player 1: '.$posx.'<br />Player 2: '.($posx+($posy+1)).'<hr />';
                  }
              }
              
              
          /*
              Reihe 1:
              
              
              Posx = 1
              Spieler 1 = Player[0]
              Spieler 2 = Player[1]
              
              Posx = 2
              Spieler 1 = Player[2]
              Spieler 2 = Player[3]
              
              Posx = 3
              Spieler 1 = Player[4]
              Spieler 4 = Player[5]
              
              
              -------------------------------------
              
              Reihe 2:
              
              Posx = 1
              Spieler 1 = Player[0]
              Spieler 2 = Player[2]
              
              Posx = 2
              Spieler 1 = Player[1]
              Spieler 2 = Player[3]
              
              
              --------------------------------------
              
              Reihe 3:
              
              Posx = 1
              Spieler 1 = Player[0]
              Spieler 2 = Player[3]
              
              Posx = 2
              Spieler 1 = Player[1]
              Spieler 2 = Player[2]
              */
              
              
              
          $posx += 1;
          }

          /*
          So sollten die Spiele aussehen (perfekte Reihenfolge):

          Otto - Hannes
          Hubert - Karl

          Otto - Hubert
          Hannes - Karl

          Otto - Karl
          Hannes - Hubert
          */
          ?>
          PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

          Kommentar


          • #6
            ja, gerade das ist es ja, wenn es immer gerade zahlen wären, würds schon leichter sein, aber leider lässt sich die anzahl derer die mitspielen wollen nicht immer auf gerade zahlen kürzen oder aufstocken

            also ich habs jetzt mal mit etwas "schummeln" geschafft zwischen 2 und 8 spielern ein vorgegebenes system zu erstellen was einfach die namen die man mit beistrich eingibt ersetzt:

            PHP-Code:

            <form action="" method="post">

            <input type="text" name="players" size="50"> <== Teilnehmer mit Beistrich getrennt angeben und mit Enter bestätigen (2-8 Spieler)!

            </form>

            <?php

            if ($players) {                                 # Wenns was im Feld "players" zu holen gibt, dann....

            $pieces explode (","$players);              # Die mit Beistrich getrennten Namen der Mitspieler einzeln in einen Array schreiben
            $number count($pieces);                       # Durchzählen für die Formel...
            $games = (($number*$number)-$number)/2;         # ...die feststellt wie viele Spiele zu spielen sind

            $i 0;                                         # Spieler 1

            $j $i+1;                                      # Spieler 2
            $k $i+2;                                      # Spieler 3
            $l $i+3;                                      # Spieler 4
            $m $i+4;                                      # Spieler 5
            $n $i+5;                                      # Spieler 6
            $o $i+6;                                      # Spieler 7
            $p $i+7;                                      # Spieler 8


            /*--------------------------------------------------*/

            if ($number == 2) {                             # Wenn es zwei Spieler sind, dann...
                
               
            echo "$pieces[$i] vs. $pieces[$j]<br>";      # ...spielt einfach der eine gegen den andern...
               
            echo "<br>$games Spiel notwendig.";          # ...und dafür ist nur ein einziges Spiel notwendig
               
            }

            /*--------------------------------------------------*/

            if ($number == 3) {                             # Bei drei Spielern...
                
               
            echo "$pieces[$i] vs. $pieces[$j]<br>";      # ...gibts auch 3 Spiele nach folgendem System
               
            echo "$pieces[$i] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$k]<br>";
               echo 
            "<br>$games Spiele notwendig.";
               
            }

            /*--------------------------------------------------*/

            if ($number == 4) {                             # Bei vier Spielern...
                
               
            echo "$pieces[$i] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$k]<br>";
               echo 
            "<br>$games Spiele notwendig.";
               
            }

            /*--------------------------------------------------*/

            if ($number == 5) {                             # Bei fünf Spielern...
                
               
            echo "$pieces[$i] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$m]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$i]<br>";
               echo 
            "$pieces[$l] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$m]<br>";
               echo 
            "<br>$games Spiele notwendig.";
               
            }

            /*--------------------------------------------------*/

            if ($number == 6) {                             # Bei sechs Spielern...
                
               
            echo "$pieces[$i] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$m]<br>";
               echo 
            "$pieces[$l] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$n]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$i]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$m]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$m]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$i]<br>";
               echo 
            "$pieces[$l] vs. $pieces[$m]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$j]<br>";
               echo 
            "<br>$games Spiele notwendig.";
               
            }

            /*--------------------------------------------------*/

            if ($number == 7) {                             # Bei sieben Spielern...
                
               
            echo "$pieces[$i] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$o]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$n]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$i]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$n]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$l] vs. $pieces[$n]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$n]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$l] vs. $pieces[$m]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$o]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$n]<br>";
               echo 
            "<br>$games Spiele notwendig.";
               
            }

            /*--------------------------------------------------*/

            if ($number == 8) {                             # Bei acht Spielern...
                
               
            echo "$pieces[$m] vs. $pieces[$n]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$p]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$l] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$n]<br>";
               echo 
            "$pieces[$p] vs. $pieces[$m]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$m]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$p]<br>";
               echo 
            "$pieces[$i] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$i]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$j] vs. $pieces[$p]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$i]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$k] vs. $pieces[$p]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$l]<br>";
               echo 
            "$pieces[$p] vs. $pieces[$i]<br>";
               echo 
            "$pieces[$m] vs. $pieces[$k]<br>";
               echo 
            "$pieces[$n] vs. $pieces[$j]<br>";
               echo 
            "$pieces[$o] vs. $pieces[$i]<br>";
               echo 
            "$pieces[$p] vs. $pieces[$l]<br>";
               echo 
            "<br>$games Spiele notwendig.";
               
            }

            /*--------------------------------------------------*/
                
            }

            ?>

            Kommentar


            • #7
              bei mehr als 8 spielern sollte man sowieso erwägen, nicht im "jeder-gegen-jeden-modus" 28 spiele durchzuspielen, sondern ein play-off-system anzuwenden.....

              aber es geht hier ja doch um den reiz das optimal hinzubekommen, ohne dieses "cheaten" was ich angewandt habe

              Kommentar


              • #8
                Ach, deine Lösung ist ja total undynamisch!

                Ich werde heute mittag nochmal weiterarbeiten
                PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                Kommentar


                • #9
                  Original geschrieben von Floriam
                  Ach, deine Lösung ist ja total undynamisch!
                  das nenne ich mal vorsichtig ausgedrückt
                  h.a.n.d.
                  Schmalle

                  http://impressed.by
                  http://blog.schmalenberger.it



                  Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                  ... nur ohne :-)

                  Kommentar


                  • #10
                    Ist es nicht so?
                    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                    Kommentar


                    • #11
                      Original geschrieben von Floriam
                      Ist es nicht so?
                      doch doch, aber wie ich sagte ... vorsichtig ausgedrückt
                      ich will ja niemandem zu nahe treten, aber .... ich lass es
                      h.a.n.d.
                      Schmalle

                      http://impressed.by
                      http://blog.schmalenberger.it



                      Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                      ... nur ohne :-)

                      Kommentar


                      • #12
                        is mir schon klar, erwähnte ich ja auch, hätte auch lieber eine flexible lösung, nur ging es mir behälfsmässig vorerst darum den prozess der spielzusammestellung zu beschleunigen, was hiermit auch fuktioniert!

                        im not frisst der teufel fliegen, nur ist auch noch nicht aller tage ende

                        Kommentar


                        • #13
                          hab ich die motivation nun mit meinem "schummel-programm" gedrückt, oder hat keiner mehr ideen??

                          Kommentar


                          • #14
                            Ich hatte doch eine Idee


                            Runde 1 (also alle Spieler haben ein Spiel gespielt)

                            Spieler 1 gegen Spieler 2
                            Spieler 3 gegen Spieler 4


                            Runde 2

                            Spieler 1 gegen Spieler 3
                            Spieler 2 gegen Spieler 4


                            Die Formel dafür: Runde + Spieler ID

                            Funktioniert aber nur bei einer geraden Anzahl von Spielern


                            EDIT:
                            Okay, funktionierte doch nicht
                            PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                            Kommentar


                            • #15
                              Lösung der Problems Teil 1

                              Hmmmm wenn ich das richtig bedenke habt ihr da ein paar Ansatzfehler . . .

                              Also ich hätte da ne Lösung wie man den Spielplan flexibel aufstellt von 2 - unendlich Spielern . . .

                              Das Problem ist nur noch die sortierung nach Spielzeit . . .

                              Aber das läßt sich auch noch lösen mit ner entsprechenden funktion . . .

                              Bin gerade dabei ein Bowlingligaprogramm zu schreiben und daher brauche ich auch das jeder gegen jeden System

                              falls noch wer interesse daran hat ???

                              ich seh das der bereich hier seit ner Woche tod ist . . .

                              Also meldet euch hier und ich häng mich ran der 1. Teil ist jedenfalls schon mal fertig werde mich jetzt an die sortierung machen . .
                              Bis denne . . . . .

                              Andre522

                              Kommentar

                              Lädt...
                              X