[PHP] bräuchte etwas hilfe für hangman

Dieses Thema im Forum "Webentwicklung" wurde erstellt von taker875, 25. April 2007 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 29. April 2007
    AW: bräuchte etwas hilfe für hangman

    Und war es jetzt schlimm dass ich dir das empfohlen hab? Nö oder, du kommst shcon ein bißchen besser mit klar oder? Hast dus soweit alles verstanden was du bisher oben geschrieben hast?

    Also erstmal was mich stört an dem Script (Was nicht heißt das es falsch ist) ...
    1. HTML und PHP gehören für meinen Geschmack nicht in ein Script.
    2. Falls du kein PHP 5 nutzt solltest du array_rand vorher "initialisieren" PHP: array_rand - Manual
    3. Du machst dir zuviel Arbeit mit den echo - Befehlen! Schau dir mal Echo an und du wirst dir viele getippte Zeichen sparen.
    4. Du solltest in Zukunft auf manipulierte Formulare achten, siehe z.B. Cross-Site-Scripting – Wikipedia
    5. $_SESSION['suchwort']{$i} = $_POST['buchstabe']; Hier bei der und ähnlichen Zeilen kann es z.B. zu Problemen kommen da in $_POST['buchstabe'] durchaus mehr drin stehen kann.
    6. Groß - und Kleinschreibung musst du noch eliminieren, bei eingegebenen Wörtern/Buchstaben.

    So und bei dem Rest ...
    Für die fehlerhaften Buchstaben machst du ein Array in die Session wo Buchstaben reinkommen. Sollte jemand etwas nicht richtiges eingetragen haben, machst du über den in_array Vergleich eine Kontrolle und schreibst dann diesen Buchstaben in das Array, ausgeben kannst du das array z.B. mit implode .

    Für das Fehlerzählen ist auch relativ einfach, da inkrementierst du einen Zähler in der Session. Und wenn der das Limit erreicht hat, löscht du wieder die session, dass neu gestartet werden muss. Um dann den Hangman darzustellen, machst du (ich würde es nicht so machen, passt aber zu deinem Script) eine Forschleife und zählst die bis zu dem Zählerstand hoch. Für jede Zahl existiert dann auch ein Hangman - bild, welches du dann so darstellen kannst.
     
  2. 29. April 2007
    AW: bräuchte etwas hilfe für hangman

    schonmal vielen dank für die antwort.
    jop also was ich oben geschrieben habe, habe ich alles so weit verstanden. ich hatte auch schon einen versuch gestartet, um die fehler zu zählen, aber irgendwie wollte das noch nicht so ganz. werde mich da nochmal etwas versuchen.

    achja was meinst du mit
    also ich habe das textfeld so begrenzt, dass man nur einen buchstaben eingeben kann. dadurch kann es ja nicht passieren, dass mehrere buchstaben eingegeben werden und wenn der buchstaben öfter im wort vorhanden ist, dann tauscht er ihn auch öfter aus. also da treten keine probleme auf. oder habe ich das jetzt falsch verstanden?

    jo das habe ich mir auch gedacht. aber ich weiß nicht so genau wie ich das machen muss. nur ne überlegung, aber sollte man vielleicht jeden buchstaben, der eingegeben wird in php, in einen großen buchstaben umwandeln, sodass er das wort dann nur nach großen buchstaben durchsucht (die wörter dann halt alle groß schreiben).

    zu 2. muss ich das so initialisieren? (wie es dort auf der seite beschrieben ist)
     
  3. 29. April 2007
    AW: bräuchte etwas hilfe für hangman

    Also du hast ja am Abschluss deines Scriptes, was recht nah noch bei meinem ist, eine Verzweigung nach Erfolg und Fehler. Bei dem Fehler - Arm hier einfach eine Variable wie $_SESSION['FehlerAnzahl'], die hier dann immer ein +1 bekommt.

    Also mein Script war so, gedacht dass es Zeichenweise Buchstaben kontrolliert und bei Übereinstimmung ersetzt, du hast angenommen, dass es reichen würde, das HTML - Formular auf ein Zeichen zu begrenzen. Aber ein böswilliger Besucher könnte das HTML - Formular auf seinem Computer speichern, das HTML Formular ändern, die Daten an deine Internetseite schicken, und schon würde das Script nichtmehr so laufen wie du es willst.

    Jo ist ja im Endeffekt egal ob es als kleingeschriebens Wort, oder als großgeschriebens Wort kontrolliert wird. Doch ich als "normaler" User tippe meistens kleingeschriebene Buchstaben ein. Weil ein Großgeschriebener Buchstabe mindestens ein Tastendruck mehr als nötig zur Eingabe erfordert. Eine Funktion die dir da helfen könnte wäre strtolower .... schau dir nochmal meine Codequelle vom Anfang an, ich hab sie dahingehend etwas geändert.

    Solltest du nicht PHP5 nutzen, solltest du es so initialisieren, wie es auf der Seite steht, ja!
     
  4. 1. Mai 2007
    AW: bräuchte etwas hilfe für hangman

    so.
    ich danke euch schonmal für eure hilfe. ich habe nun eine version fertig, die ich so auch meiner info. lehrerin abgeben (zeigen) werde wahrscheinlich. fände es gut, wenn vielleicht der ein oder andere nochmal was dazu sagen würde.

    http://taker875.ta.ohost.de/hangman/hangman.php

    da ist das script mal hochgeladen. ist jetzt nicht das beste, was man hätte machen können (ich weiß), aber ich bin ja noch ein anfänger in php und dafür finde ich es schon nicht schlecht. aber bin für kritik offen und auch dankbar.

    mfg taker875
     
  5. 1. Mai 2007
    AW: bräuchte etwas hilfe für hangman

    funkioniert noch nicht einwandfrei.
    bei dem wort "test" zb wir ein "e" nicht gezählt...
     
  6. 1. Mai 2007
    AW: bräuchte etwas hilfe für hangman

    hmm, das wundert mich jetzt. eigentlich sollte es funktionieren. der fehler ist mir zumindest noch nicht aufgefallen. also wenn man einen großen buchstaben eingibt, zählt er das als fehler (da er nur mit kleinen buchstaben arbeitet). also eigentlich sollte er das richtig zählen.

    Spoiler
    PHP:
    <? php
    error_reporting
    ( E_ALL );

        
    session_start ();
    ?>
    <center>
    <h1>HANGMAN</h1>
    Bitte geben Sie hier Ihren Buchstaben ein.
    <form action="hangman.php" method="post">
        <input type="text" name="buchstabe" maxlength="1" size="1"/>
        <input type="submit" value="OK" />
    </form>

    <?php


        $wordliste 
    = array(
                    
    'katze' ,
                    
    'auto' ,
                    
    'salzstreuer' ,
                    
    'haus' ,
                    
    'autowerkstatt' ,      //Liste aller Wörter, die zur Verfügung stehen
                    
    'test' ,
                    
    'hubschrauber' ,
                    
    'eckball' ,
                    
    'kranwagen' ,
                    );
        if (empty(
    $_SESSION [ 'Fehlversuche' ])) {
            
    $_SESSION [ 'Fehlversuche' ] =  0 ;
        }
        if (empty(
    $_SESSION [ 'NochMoeglich' ])) {
            
    $_SESSION [ 'NochMoeglich' ] =  6 ;
        }
        if (empty(
    $_SESSION [ 'wort' ])) { //Kontrolle, ob schon ein Suchwort gespeichert wurde
            
    $_SESSION [ 'wort' ] =  $wordliste [ array_rand ( $wordliste )]; //Zufällige auswahl des Wortes, welches ausgewählt wird
            
    $_SESSION [ 'suchwort' ]   =  str_pad ( "" strlen ( $_SESSION [ 'wort' ]),  "-" ); //Hier wird das Suchwort gespeichert
        
    }

        if (!empty(
    $_POST [ 'buchstabe' ])) {
            if (
    $_SESSION [ 'Fehlversuche' ] <=  5 ){
                if ((!empty(
    $_POST [ 'buchstabe' ]) && ( strpos ( $_SESSION [ 'wort' ],  $_POST [ 'buchstabe' ]) !==  false ))) { //Hier wird kontrolliert, ob der angegebene Buchstabe im Wort vorhanden ist
                     
    for ( $i  0 ; $i < strlen ( $_SESSION [ 'wort' ]); $i ++) { //For-Schleife für jeden Buchstaben des Wortes (zur Überprüfung)
                          
    if ( $_SESSION [ 'wort' ]{ $i } ===  $_POST [ 'buchstabe' ]) { //Sollte der eingegebene Buchstabe im Lösungswort vorhanden sein ...
                              
    $_SESSION [ 'suchwort' ]{ $i } =  $_POST [ 'buchstabe' ]; //...trägt er es in das Rästelwort ein  $i ist dabei die Position, an der sich der Buchstabe im Lösungswort befindet
                          
    }
                     }
    //Ende - For - Schleife für jeden Buchstaben des Lösungswortes
                
    } //Ende - Kontrolle ob der angegebene Buchstabe vorhanden ist
                
    else {
                echo 
    "Schade. <b>" . $_POST [ 'buchstabe' ]. "</b> ist leider nicht im Wort enthalten</br >\n" ;     //Ausgabe, falls der Buchstabe nicht im Wort enthalten ist
                
    $_SESSION [ 'Fehlversuche' ]++;
                
    $_SESSION [ 'NochMoeglich' ] =  7 - $_SESSION [ 'Fehlversuche' ];
                }

                
    //Kontrolle, ob das Wort bereits vollständig erraten wurde
                
    if ( $_SESSION [ 'suchwort' ] ===  $_SESSION [ 'wort' ]) { //Wenn dies der Fall ist ->
                    
    echo  "<h2>Herzlichen Glückwunsch, Sie haben das Rätsel erfolgreich gelöst</h2>" ;
                    echo 
    "Das Wort war <b>" . $_SESSION [ 'wort' ]. "</b></br >\n" ;     //Die Meldung, dass das Wort gelöst wurde
                    
    echo  "<a href=\"hangman.php\">Neues Spiel!</a>" ;
                    
    session_unset (); //löschen der Session-ID nach erfolgreichem lösen des Rätsels
                
    }
                else {  
    //Wenn es nicht übereinstimmt, weiter machen.
                    
    $suchwort  $_SESSION [ 'suchwort' ];
    echo <<<WEITER
    </br >\n
    Das gesuchte Wort ist: </br >\n          //Ausgeben des Suchwortes
    $suchwort
    </br >\n
    WEITER;

                    echo 
    "Sie haben bereits " . $_SESSION [ 'Fehlversuche' ]. " Fehlversuch/e gebraucht</br >\n" ;   //Ausgabe der möglichen Versuche
                    
    echo  "Sie haben noch " . $_SESSION [ 'NochMoeglich' ]. " Versuch/e</br >\n" ;
                }
    //Ende - Kontrolle, ob das Lösungswort gelöst wurde
            
    } //Ende - Kontrolle, ob noch Versuche vorhanden sind
            
    else {
               echo 
    "Schade. Sie haben leider zu viele Versuche gebraucht.</br >\n" ;
               echo 
    "Das Wort wäre <b>" . $_SESSION [ 'wort' ]. "</b> gewesen.</br >\n" ;                   //Meldung, falls alle Versuche verbraucht worden sind
               
    echo  "<a href=\"hangman.php\">Neues Spiel!</a>" ;
               echo 
    "</br >\n<img src=\"hang_7.gif\"> </br >\n" ;
               
    session_unset (); //löschen der Session-ID nach nicht erfolgreichem lösen des Rätsels
            
    }
        }
        else {
        echo 
    "Bitte geben Sie einen Buchstaben ein" ;        // Wenn kein Buchstabe eingegeben wurde, wird man darauf aufmerksam gemacht
        
    $suchwort  $_SESSION [ 'suchwort' ];
    echo <<<WEITER
    </br >\n
    </br >\n
    Das gesuchte Wort ist: </br >\n
    $suchwort
    </br >\n
    WEITER;
        }
        if (empty(
    $_SESSION [ 'Fehlversuche' ])) {       
        
    $_SESSION [ 'Fehlversuche' ] =  0 ;
        }

        
    $fehlversuche  $_SESSION [ 'Fehlversuche' ];   //Schreiben der Session-Variablen in eine normale Variable

        
    if ( $fehlversuche  ===  1 ) {
            echo 
    "<img src=\"hang_1.gif\">" ;
            echo 
    "</br >\n" ;
            }

        if (
    $fehlversuche  ===  2 ) {
            echo 
    "<img src=\"hang_2.gif\">" ;                // Hier wird geschaut, wieviele Fehlversuche bereits verbraucht wurden
            
    echo  "</br >\n" ;                                // und welcher "Hangman" angezeigt werden soll
            
    }

        if (
    $fehlversuche  ===  3 ) {
            echo 
    "<img src=\"hang_3.gif\">" ;
            echo 
    "</br >\n" ;
            }

        if (
    $fehlversuche  ===  4 ) {
            echo 
    "<img src=\"hang_4.gif\">" ;
            echo 
    "</br >\n" ;
            }

        if (
    $fehlversuche  ===  5 ) {
            echo 
    "<img src=\"hang_5.gif\">" ;
            echo 
    "</br >\n" ;
            }

        if (
    $fehlversuche  ===  6 ) {
            echo 
    "<img src=\"hang_6.gif\">" ;
            echo 
    "</br >\n" ;
            }

    ?>

    </center>
    das ist mal mein script. wäre super, wenn man einer rüber schauen könnte, weil eigentlich sollte er da das "e" bei "test" richtig annehmen. ich weiß es ist an vielen stellen sehr umständlich geschrieben^^ aber so habe ich das alleine geschrieben und so verstehe ich es^^. also möchte ich es auch gerne so lassen.
     
  7. 2. Mai 2007
    AW: bräuchte etwas hilfe für hangman

    so habe nochmal was verändert, werde es dann morgen abgeben. nochmals vielen dank für eure hilfe. habt mir wirklich viel geholfen. deswegen schließe ich hier mal.

    mfg taker875
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.