Hilfe bei Schleifen

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

  • Hilfe bei Schleifen

    Hallo an Alle,

    will ein kleines Spiel á la Tischtennis programmieren und habe noch ein kleines Problem mit der Schleife für die Satzgewinne.
    Die Schleife soll so lange wiederholen bis der erste Spieler 3 Sätze gewonnen hat. Jeder Satz soll mir aber angezeigt werden und am Ende der Satzgewinn ausgegeben sein.

    Einen Satz spielt er mir bereits aber wie kriege ich das mit den weiteren Sätzen hin?

    Hier mein Code:
    PHP-Code:
    <?php 

    $a
    $_POST['a'] + 5;
    $b$_POST['b'];

    $satza 0;
    $satzb 0;
    $punktb 0;
    $punkta 0;
    $i 0;
    $j 0;

    if (
    $satza <=and $Satzb <=3)

    do {

    srand((double)microtime()*1000000);
    /*srand ((int)$a*100);*/
    $werta rand(1,100) + $a;
    srand((double)microtime()*1000000);
    $wertb rand(1,100) + $b;
    //echo "$werta, $wertb<br />\n";

         
    if ($werta $wertb
           
    $punkta $punkta 1;
         else
           
    $punktb $punktb 1;
         
        
    $i++; 
    echo 
    "$punkta$punktb<br />\n"
    } while (
    $punkta <11 and $punktb <11 and $i<20);

    //bei Spielstand von 10:10 wird weitergespielt bis die Differenz 2 ist
        
    if ($punkta == 10 and $punktb == 10)
    do {
        
    srand((double)microtime()*1000000);
        
    $werta rand(1,100) + $a;

        
    srand((double)microtime()*1000000);
        
    $wertb rand(1,100) + $b;
     
    //echo "$werta, $wertb<br />\n";

         
    if ($werta $wertb
           
    $punkta $punkta 1;
         else
           
    $punktb $punktb 1;
        echo 
    "$punkta$punktb<br />\n"
          
    } while (
    abs($punkta $punktb) <2); 


        if (
    $punkta $punktb)
         
    $satza $satza 1;
        else
        
    $satzb $satzb 1;     
         
         echo 
    "SatzA:$satza,SatzB:$satzb";
        
    ?>
    Danke vorab für die Hilfe...

  • #2
    PHP-Code:
    if ($satza <=and $Satzb <=3)
    do {
    etc.

      echo 
    "SatzA:$satza,SatzB:$satzb"
    PHP-Code:
    while ($satza <=&& $satzb<={
    do {
    etc.

      echo 
    "SatzA:$satza,SatzB:$satzb";

    Dein ursprünglicher code gibt übrigens einen Fehler zur Ausführungszeit, hast Du ihn auch bemerkt?

    Kommentar


    • #3
      also ich mach das ganze auch erst 2 wochen ... aber ...
      für mich macht er alles richtig ... es fehlt für mich eine schleife ganz aussen rum die entweder 2 oder 3 mal durch läuft je nachdem wie es steht ...

      er arbeitet einen satz durch und sieht dann keinen grund das nochmal zu machen weil du ihm nichts sagst ...

      Kommentar


      • #4
        Ja die Schleife fehlte, ich habe sie angegeben. Sie wird 3 vier oder fünf mal durchlaufen werden.

        Ach ja übrigens, die Initialisierung von $punkta und $punktb muss INnerhalb der Schleife sein. Für $i und $j habe ich das gleiche nicht speziell überprüft, sollte der Frager aber bitte tun.
        Zuletzt geändert von tcpip; 30.06.2006, 00:30.

        Kommentar


        • #5
          danke Dir tcpip....

          Aber welchen Fehler zur Ausführungszeit meinst Du???

          Mein Code funktioniert aber doch.

          Wie kriege ich den Fehler denn raus wenn das Script einwandfrei ausgeführt wird.

          Ich mache das ganze leider erst seit zwei Tagen. ;-(((
          Ist noch eine gehörige Umstellung zu VB da habe ich das ganze mit DoUntil und goto lösen können. Das steht mir hier nur leider nicht zur Verfügung.

          Kommentar


          • #6
            Also habe das mal getestet.

            Initalisiere ich $punkta und $punktb in der Schleife fallen nur 0 oder 1 da ja die beiden Werte immer wieder auf 0 gesetzt werden. Ich will ja den Spielstand sehen.

            Muss ich denn nach dem letzten while, welches Du mir angegeben hast meinen Code wiederholen? Du schreibst ja dann do {, etc.... Denn jetzt sieht mein Ergebnis schon etwas seltsam aus. Wo genau im Code soll ich die beiden initalisieren.

            Hier mein Ergebnis bei der Initalisierung nach dem ersten do...

            0, 1
            1, 1
            1, 2
            1, 3
            1, 4
            1, 5
            2, 5
            3, 5
            4, 5
            5, 5
            6, 5
            7, 5
            8, 5
            8, 6
            8, 7
            8, 8
            8, 9
            9, 9
            9, 10
            10, 10
            11, 10
            12, 10 ////bis hierhin ist ja richtig
            SatzA:1,SatzB:01, 0 /// aber was passiert dann hier???
            SatzA:2,SatzB:01, 0 ///hier sollte der neue Satz wie oben beginnen
            SatzA:3,SatzB:00, 1
            SatzA:3,SatzB:10, 1
            SatzA:3,SatzB:21, 0
            SatzA:4,SatzB:2

            Kommentar


            • #7
              Wenn Du es in VB kannst, dann auch in php.. Die logik ist dieselbe.

              Der Laufzeitfehler: if($Satza<=3), weil Variablennamen gross7kleinsensitiv sind.

              [color=red]Korrektur übrigens, sehe ich erst jetzt aus deiner Ausgabe:[/color]
              PHP-Code:
              while ($satza <&& $satzb<3) {
              do {
              etc.

                echo 
              "SatzA:$satza,SatzB:$satzb";

              Zuletzt geändert von tcpip; 30.06.2006, 08:49.

              Kommentar


              • #8
                Ah okay. Jetzt habe ich es gesehen... War mir nicht aufgefallen.

                Muss ich denn nun die Spielschleife nach dem ersten Mal nochmal eingeben oder kann ich wieder zu Beginn des Satzes starten und er schreibt mir die nächsten Sätze noch drunter?

                Kommentar


                • #9
                  Also ich raff es nicht... Die Ausgabe ist echt kurios...

                  SatzA:1,SatzB:01, 0
                  SatzA:2,SatzB:00, 1
                  SatzA:2,SatzB:11, 0
                  SatzA:3,SatzB:1

                  was soll das für eine Ausgabe sein? Wieso schreibt er mir hintendran nochmal 1,0 usw.

                  Hier mein jetztiger Code der zumindest schon mal zum Satzgewinn und Spielgewinn läuft aber nur einen Satz aufzeigt.

                  PHP-Code:
                  <?php 

                  $a
                  $_POST['a'] + 5;
                  $b$_POST['b'];

                  $satza 0;
                  $satzb 0;

                  $i 0;
                  $j 0;

                  if (
                  $satza <&& $satzb <3)

                  do {
                  $punktb 0;
                  $punkta 0;

                  do {

                  srand((double)microtime()*1000000);
                  /*srand ((int)$a*100);*/
                  $werta rand(1,100) + $a;
                  srand((double)microtime()*1000000);
                  $wertb rand(1,100) + $b;
                  //echo "$werta, $wertb<br />\n";

                       
                  if ($werta $wertb
                         
                  $punkta $punkta 1;
                       else
                         
                  $punktb $punktb 1;
                       
                      
                  $i++; 
                  echo 
                  "$punkta$punktb<br />\n"
                  } while (
                  $punkta <11 and $punktb <11 and $i<20);

                  //bei Spielstand von 10:10 wird weitergespielt bis die Differenz 2 ist
                      
                  if ($punkta == 10 and $punktb == 10)
                  do {
                      
                  srand((double)microtime()*1000000);
                      
                  $werta rand(1,100) + $a;

                      
                  srand((double)microtime()*1000000);
                      
                  $wertb rand(1,100) + $b;
                   
                  //echo "$werta, $wertb<br />\n";

                       
                  if ($werta $wertb
                         
                  $punkta $punkta 1;
                       else
                         
                  $punktb $punktb 1;
                      echo 
                  "$punkta$punktb<br />\n"
                        
                  } while (
                  abs($punkta $punktb) <2); 


                      if (
                  $punkta $punktb)
                       
                  $satza $satza 1;
                      else
                      
                  $satzb $satzb 1;     
                       
                       echo 
                  "SatzA:$satza,SatzB:$satzb";

                  } while (
                  $satza <&& $satzb<3); 

                      
                  ?>

                  Kommentar


                  • #10
                    Diese beiden Fehler kannst Du vermutlich selber finden.

                    Das heisst es hat noch einen dritten, der AND-Befehl heisst &&, siehe mein Beispiel.

                    viertens war das nicht die ganze Ausgabe, was sozusagen die" ..." nach kurios andeuten.....
                    Zuletzt geändert von tcpip; 30.06.2006, 11:53.

                    Kommentar


                    • #11
                      Alles klar... Habe es... Lag an den Variablen innerhalb und ausserhalb der Schleifen.
                      Das AND oder && macht doch nicht so viel aus, oder???

                      Danke Dir trotzdem schon mal.

                      Kommentar

                      Lädt...
                      X