Ankündigung

Einklappen
Keine Ankündigung bisher.

Kleines Zahlenratespiel/Probleme mit Sessions

Einklappen

Neue Werbung 2019

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

  • Kleines Zahlenratespiel/Probleme mit Sessions

    Ich sitze jetzt seit etwa 16 Stunden an dem Code der mich zur Verzweiflung treibt. Es geht um ein kleines Zahlenratespiel wo der erste Spieler Zahlen angibt und der zweite Spieler versuchen kann sie zu erraten. Die Speicherung der Zahlen habe ich zwischenzeitlich durch Sessions hin bekommen, aber jetzt gehen sie auf einmal nicht mehr und ich weiß nicht warum. Ich hatte das Gefühl nichts geändert zu haben, aber irgendwas muss da wohl nun fehlen.

    Außerdem versuche ich in dem Code Sessions wieder zurück in Arrays zu wandeln und weiß nicht ob mein Weg richtig ist. Die entsprechenden Stellen sind im Code auskommentiert. Ich wäre unglaublich dankbar wenn da mal jemand rüber schaut und mir beim debuggen hilft.

    Ich habe es bereits bei Stackoverflow versucht und ein paar hilfreiche Tipps bekommen, aber mein geschriebenes Englisch ist zu schlecht um die Fragen sinnvoll zu formulieren und meine Kenntnisse mit PHP zu gering um sinnige Codebeispiele abliefern zu können, die bei der Fragestellung helfen.

    Gerade jetzt habe ich zwei Probleme: Warum werden die eingegebenen Zahlen nicht mehr über die SESSION gespeichert?
    Wie kann ich beim Gewinn oder Verlust einen Button erzeugen der den ganzen Code resettet, um das Spiel neu zu starten?

    Hätte ich mehr Zeit würde ich den ganzen Code noch einmal neu schreiben und das Projekt mit Klassen angehen. Ich habe dazu ein tolles Tutorial gefunden, aber ich brauche viel mehr Zeit um das zu verstehen, als wenn ich es erstmal so löse, wie ich es angefangen habe, auch wenn das nicht gerade hübsch ist.

    PHP-Code:
     <?php


        session_start
    ();

        
    //should count up

        
    if (!isset($_SESSION['geraten'])) {
          
    $_SESSION['geraten'] = 0;
        }
        else {
          
    $_SESSION['geraten']++;
        }

        
    $runde $_SESSION['geraten'] - ;


        if(
    $_SESSION['geraten'] == 1) {
          echo 
    "<br>";
          echo 
    "Spieler 1";
          echo 
    "<form method='post'>";
          echo 
    "chose your five numbers/Wähle deine 5 Zahlen<br>";
          echo 
    "<input type='text' name='one' size='1' maxlength='1'>";
          echo 
    "<input type='text' name='two' size='1' maxlength='1'>";
          echo 
    "<input type='text' name='three' size='1' maxlength='1'>";
          echo 
    "<input type='text' name='four' size='1' maxlength='1'>";
          echo 
    "<input type='text' name='five' size='1' maxlength='1'>";
          echo 
    "<input type='submit' name='gesendet' value='OK'>";
          echo 
    "</form>";
          echo 
    "<br>";
          echo 
    "{$_SESSION['geraten']}";




             
    //Passwortfunktion

            //<input type="password" name="one" size="1" maxlength="1">
            //<input type="password" name="two" size="1" maxlength="1">
            //<input type="password" name="three" size="1" maxlength="1">
            //<input type="password" name="four" size="1" maxlength="1">
            //<input type="password" name="five" size="1" maxlength="1">

                //<input type="submit" name="gesendet" value="ok"></button> <br />
            //</form> -->



        
    if(isset($_POST['gesendet'])){

          
    $one $_POST['one'];
          
    $two $_POST['two'];
          
    $three $_POST['three'];
          
    $four $_POST['four'];
          
    $five $_POST['five'];
    // array to safe the input of player one with sessions
          
    $_SESSION['anumberone'][0] = $one;
          
    $_SESSION['anumberone'][1] = $two;
          
    $_SESSION['anumberone'][2] = $three;
          
    $_SESSION['anumberone'][3] = $four;
          
    $_SESSION['anumberone'][4] = $five;



            if (
    is_numeric($one) && is_numeric($two) && is_numeric($three) && is_numeric($four) && is_numeric($five)) {

              foreach (
    $_SESSION['anumberone'] as $ausgabe) {

                echo 
    "$ausgabe";

              }
            }
            else {

              echo 
    "Geben sie nur Nummern ein!";
            }
          }
        }



        if (
    $runde && $runde <= 12) {


              
    //start with player two here!

            
    echo "<br>";
            echo 
    "Spieler 2";
            echo 
    "Raten sie die Zahlen. Sie befinden sich in Runde" $runde "<br>";
            echo 
    "<form method='post'>";
            echo 
    "Ihre Ziffern:<br>";
            echo 
    "<input type='text' name='sechs' size='1' maxlength='1'>";
            echo 
    "<input type='text' name='sieben' size='1' maxlength='1'>";
            echo 
    "<input type='text' name='acht' size='1' maxlength='1'>";
            echo 
    "<input type='text' name='neun' size='1' maxlength='1'>";
            echo 
    "<input type='text' name='zehn' size='1' maxlength='1'>";
            echo 
    "<input type='submit' name='submitzwei' value='OK'>";
            echo 
    "</form>";

            if(!empty(
    $_POST['submitzwei'])){
              
    $sechs $_POST['sechs'];
              
    $sieben $_POST['sieben'];
              
    $acht $_POST['acht'];
              
    $neun $_POST['neun'];
              
    $zehn $_POST['zehn'];


              
    $_SESSION['anumber2'][0] = $sechs;
              
    $_SESSION['anumber2'][1] = $sieben;
              
    $_SESSION['anumber2'][2] = $acht;
              
    $_SESSION['anumber2'][3] = $neun;
              
    $_SESSION['anumber2'][4] = $zehn;

              
    $gewinn 0;
              
    $richtige 0;


                
    // proofs if former input is numeric
                
    if (is_numeric($sechs) && is_numeric($sieben) && is_numeric($acht) && is_numeric($neun) && is_numeric($zehn)) {

                  
    //proofs if array one and array two have "right" numbers
                  
    if($_SESSION['anumberone'][0] == $_SESSION['anumber2'][0]) {

                    
    $richtige $richtige 1;
                  }

                  if(
    $_SESSION['anumberone'][1] == $_SESSION['anumber2'][1]) {

                      
    $richtige $richtige 1;
                  }
                  if(
    $_SESSION['anumberone'][2] == $_SESSION['anumber2'][2]) {

                      
    $richtige $richtige 1;
                  }
                  if(
    $_SESSION['anumberone'][3] == $_SESSION['anumber2'][3]) {

                      
    $richtige $richtige 1;
                  }
                  if(
    $_SESSION['anumberone'][4] == $_SESSION['anumber2'][4]) {

                      
    $richtige $richtige 1;
                  }
                  
    // wie viele Zahlen richtig sind
                  // $liste1[0] = $_SESSION['anumberone'][0];
                  // $liste1[1] = $_SESSION['anumberone'][1];
                  // $liste1[2] = $_SESSION['anumberone'][2];
                  // $liste1[3] = $_SESSION['anumberone'][3];
                  // $liste1[4] = $_SESSION['anumberone'][4];
                  // $liste2[0] = $_SESSION['anumber2'][0];
                  // $liste2[1] = $_SESSION['anumber2'][1];
                  // $liste2[2] = $_SESSION['anumber2'][2];
                  // $liste2[3] = $_SESSION['anumber2'][3];
                  // $liste2[4] = $_SESSION['anumber2'][4];
                  //
                  //
                  // $zahlenwerte = array_intersect($liste1,$liste2);
                  // print_r($zahlenwerte);


                  
    echo "Sie haben " $richtige "richtige an der richtigen Stelle" "<br>";


                  if (
    $richtige == 5) {
                    echo 
    "Sie haben gewonnen <br>";
                    
    $_SESSION['geraten'] = 0;
                    unset(
    $_SESSION['anumberone']);
                    unset(
    $_SESSION['anumber2']);

                  }

                }
                else {

                 echo 
    "Geben sie nur Nummern ein!";
               }
            }
          }

          
    //want to restart the game here. Howto?
          
    if ($runde 12) {

            echo 
    "sie haben verloren!";
            
    $_SESSION['geraten'] = 0;
            unset(
    $_SESSION['anumberone']);
            unset(
    $_SESSION['anumber2']);

          }



            
    ?>

  • #2
    Zumindest den Code könntest du einrücken. So ist das doch überhaupt nicht lesbar.

    Kommentar


    • #3
      irgendwie hat er meinen code entrückt.. er war ja eingerückt ich änder das nochmal.
      wahrscheinlich weil ich erst den falschen Code Button geklickt hatte.

      Kommentar


      • #4
        Wie genau soll das Spiel funktionieren? Spieler 1 gibt 5 Zahlen ein und sendet das Formular ab, dann geht Spieler 2 an die Seite (am selben PC) und rät diese 5 Zahlen. Dann wird ausgegeben wie viele richtig waren?

        Kommentar


        • #5
          Ganz genau alxy. Das Spiel soll eigentlich nur ein paar Lerninhalte testen, leider benötigt es auch ein paar Dinge mit denen ich mich noch nicht auseinandergesetzt habe, bzw bis jetzt nicht. Beispielsweise Sessions. Es hat auch teilweise bereits funktioniert. Spieler 1 konnte Zahlen eingeben und Spieler 2 hatte 12 versuche diese zu erraten. Das Spiel in seinem jetzigen Zustand überprüft ob die Zahlen von Spieler zwei mit denen von Spieler 1 übereinstimmen und zeigt an welche Zahlen am richtigen Ort erraten wurden. (Es zeigt leider noch nicht an welche Zahlen einfach nur richtig geraten wurden, sich aber nicht am richtigen Ort befinden. Dafür habe ich allerdings bereits eine Codezeile erstellt die momentan auskommentiert ist )Leider scheinen die Sessions für die Zahlenfolge von Spieler 1 und Spieler 2 nicht mehr zu funktionieren. Ich habe irgendwo beim rumbasteln einen Fehler gemacht, obwohl ich mir sicher war die laufende Version nicht bearbeitet zu haben.

          Ausserdem soll am Ende, also wenn der Spieler entweder die Zahlen erraten hat, oder 12 Runden brauchte das Spiel resettet werden. Wie sich das herstellen lässt, habe ich allerdings noch nicht herausgefunden.

          Kommentar


          • #6
            Äh, wenn man die Reihenfolge nicht berücksichtigt kann man in 12 Runden doch immer richtig raten? Spieler 2 könnte ja immer erst die Zahlen 0-4 und dann 5-9 raten, das einfach 6 mal wiederholen. Dadurch sollten doch immer alle Zahlen erwischt werden? Oder darf immer nur eine Zahl geraten werden?

            Kommentar


            • #7
              Nein du musst die Zahlen nicht nur richtig raten, sondern auch an der richtigen Stelle. Also Mal angenommen die Zahlen sind : 1,2,3,4,5 und du rätst 5,4,6,7,9 dann soll das Programm ausgeben : 2 zahlen sind richtig , 0 zahlen sind am richtigen Ort. Um zu gewinnen müssen alle Zahlen an richtigen Ort erraten werden.

              Kommentar


              • #8
                Die Session brauchst du eigentlich gar nicht.. und wenn dann nur zum bequemeren Zählen der Versuche. Könntest du auch ein hidden Feld nehmen..

                Ok dann kann man bescheissen.. Ok.. Versuche mit Session zählen und die korrekte Nummer merken.

                Für den Rest brauchst du aber keine. Denn der Tipp des Users schreibst du einfach wieder in die Formfelder rein. https://php-de.github.io/jumpto/text...en-der-eingabe

                Lösungsweg .. schnell zusammengetippt... Wenn du den Userinput noch in das Form packst hast du es im Grunde.

                PHP-Code:
                $aCorrect   = [1,2,6,4,5];
                $aUserInput = [5,4,6,7,9];


                echo 
                "Enthalten: " countarray_intersect($aUserInput$aCorrect) ) . "<br>\n";

                $aCombined array_combine($aCorrect,  $aUserInput);
                $correct 0;
                foreach (
                $aCombined as $key => $val) {
                    if (
                $key == $val) {
                        
                $correct++;
                    }
                }
                echo 
                "Korrekt: " $correct;

                /*
                Enthalten: 3
                Korrekt: 1
                */ 
                Und bei "Neustarten" machst du einen normalen Link auf die Seite dann ist das Form ja leer.

                Kommentar


                • #9
                  Cool hausl danke. Ich bin gerade ein wenig müde, daher musste ich mir das alles dreimal anschauen bevor es "klick" gemacht hat. Das scheint wirklich eine gute Lösung zu sein. Das mit dem erneuten Ausfüllen der Formularfelder habe ich noch nicht ganz verstanden, lese ich mir aber in Ruhe durch. Den Rest sollte ich so eigentlich hin bekommen. Ich setze mich über das Wochenende nochmal an den Code und probiere es aus. Immerhin funktionierte die Zählsession noch. Warum die andere plötzlich nicht mehr funktionierte ist mir immer noch ein Rätsel, aber wenn ich es auch anders lösen kann, umso besser.

                  Du verwendest viele Sachen die ich noch nicht kannte. Wieder was gelernt! Umso besser.

                  Kommentar

                  Lädt...
                  X