Ankündigung

Einklappen
Keine Ankündigung bisher.

Hangman Spiel Problem

Einklappen

Neue Werbung 2019

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

  • Hangman Spiel Problem

    Hey Leute!
    Ich bin ein neues Mitglied in diesem Forum PHP.DE
    2 Wochen lang beschäftigte ich mich mit einem Projekt unter Hangman-Spiel und leider klappt es immer noch nicht.
    Ich bitte euch um Hilfe
    Ein Problem liegt daran, wenn ich einen Buchstaben tippe, bleibt aber der getippte Buchstabe unsichtbar (obwohl Hangmanbilder funktionieren).
    Was soll ich eigentlich machen?
    (Ich bin gehörlos, und kann nicht so gut Deutsch :P )

    PHP-Code:
    <?php
    // Hier drinnen sind die Hangman Bilder
    include 'hangedman.php'

    $woerter = array();
    $numwoerter 0;






    function 
    Hauptseite($bild$erraten$zufall$fertig$falsch) {

    ?>

              <html>
                <head>
                  <title>Hangman-Spiel</title>
                </head>

    <body>
            <h1> QUIZ GAME </h1>
            <img src="https://lh6.ggpht.com/_XTt-E1eXRmkGRJ54V7cPk5pe-632t24eqqBfH4_Ec3JmSg7sYaVpj_PvGxm9_vj2Q=w300" width="200">
              <style>
                h1 {
                            text-align: center;  
                                    color:#FF0000; 
                                    font-size:28pt;  
                                    font-family: arial, "lucida console", sans-serif; 
                     }
                img {
                          margin-left: 375px;
                    }
              </style>
              <br>

              <pre> <?php echo $bild ?> </pre>
              <br>
              <p><strong>Wort:<?php echo $erraten ?></strong></p>
              <p>Verwendete Buchstaben:<?php echo $fertig ?> </p>
              <br>
              <form method="post" action="<?php echo $script ?>">
              <input type="hidden" name="wrong" value="<?php echo $falsch ?>" />
               <input type="hidden" name="lettersguessed" value="<?php echo $fertig ?>" />
               <input type="hidden" name="word" value="<?php echo $zufall ?>" />


    <?php  echo "Script:"$script   ;    
              for(
    $abc 'A'$abc != 'AA'$abc++) {
    ?>     
             <input type ="submit" name= "unser" value="<?php echo $abc ?>" >

    <?php   
    }
        
    ?>  

             <style>
              input { 
                             color: #ff0000;
                             border-radius: 5px; 
                             margin-left: 5px; 
                         }
              </style>



               </form>
    </body>
    </html>       
    <?php
    }
    ?>
    <?php

    function Woertergeladen() {
        global 
    $woerter;
        global 
    $numwoerter;
        
    $eingang fopen("./words.txt""r");

        while (
    true){
            
    $str fgets($eingang);
            if (!
    $str) break;
            
    $woerter[] = rtrim($str);  // warum woerter[]?
            
    $numwoerter++;   // unnötig?

       
    }    
        
    fclose($eingang);
          }

    function 
    Start() {
       global 
    $woerter;
       global 
    $numwoerter;
       global 
    $hang;

       
    $zufall rand(0$numwoerter -1);
       
    $wort $woerter[$zufall];
       
    $laenge strlen ($wort);
       
    $laenge strlen($wort);
       
    $erratungswort str_repeat("_ "$laenge);



       
    $script $_SERVER["PHP_SELF"];

       
    Hauptseite($hang[0], $erratungswort$zufall""0);


    function 
    Verloren ($wort) { 
    echo 
    "
    <!DOCTYPE html>
    <html>
     <head>
        <title>Hangman</title>
      </head>
      <body>
        <h1>You lost!</h1>
        <p>The word you were trying to guess was <em>
    {$wort}</em>.</p>
      </body>
    </html>
    "
    ;
    }

    function 
    Gewonnen($wort) {
    echo 
    "    
    <!DOCTYPE html>
    <html>
      <head>
        <title>Hangman</title>
      </head>
      <body>
        <h1>You win!</h1>
        <p>Congratulations! You guessed that the word was <em>
    {$wort}</em>.</p>
      </body>
    </html>"
    ;

    }   

    // Im gesuchten Wort wird der getippte Buchstabe und die Position gefunden werden    
    function Berechnung ($wort$erratungsbrief) {
       
    $laenge strlen($wort);
       
    $erratungswort str_repeat("_ "$laenge);

       for(
    $i =0$i $laenge$i++) {
        
    $ch strtoupper($wort[$i]);
        if (
    strstr($erratungsbrief$ch)) {
        
    $position $i;
        
    $erratungswort[$position] = $ch;   
        }    

       }
         return 
    $erratungswort;
    }   


    //
    function Erraten() {
        global 
    $woerter;
        global 
    $hang;

        
    $zufall $_POST["word"];
        
    $wort $woerter[$zufall];
        
    $falsch $_POST["wrong"];
        
    $brief $_POST["letterguessed"];
        
    $unser $_P0ST["unser"];                      
       
    $briefchen strtoupper($guess[0]);  


       if(!
    stristr($wort$unser)) {
           
    $falsch++;

           }


      
    $brief .= $unser;
      
    $erratungswort Berechnung ($wort$brief);

        if(!
    stristr($erratungswort"_ ")) {
            
    Gewonnen($wort);

        } else if (
    $falsch >= 6) {
         
    Verloren($wort);    
        } else {
         
    Hauptseite ($hang[$falsch], $erratungswort$zufall$brief$falsch);        
        }
    }



    Woertergeladen();

    $method $_SERVER["REQUEST_METHOD"];

    if (
    $method == "POST") {
        
    Erraten();
    } else {
      
    Start();

    }


    ?>

  • #2
    Willkommen hier!

    Oje, das ist aber ein ziemliches Durcheinander. Als erstes solltest du den Code sauber trennen => das "E-V-A-Prinzip" umsetzen / einhalten. https://php-de.github.io/jumpto/eva-prinzip/

    Nächster Schritt, wenn etwas nicht funktioniert, wäre die Fehlersuche - das Debuggen. Das geht so: http://php-de.github.io/jumpto/faq/#debugging

    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Hi zhenyabra,

      ich würde allenfalls PHP am Anfang des Scripts verwenden, um ein Ratewort nebst Kategorie aus einer DB zu holen.

      Den Rest würde ich mit JS machen, da JS im Browser ausgeführt wird, und man da auf eine Interaktion des Users direkt reagieren kann.

      PHP-Code:
      <?php
      /*
      * Ein Array mit Buchstaben, der Buttontext (siehe unten)
      */
      $buchstaben range("A""Z");
      $buchstaben[] = "Ä";
      $buchstaben[] = "Ö";
      $buchstaben[] = "Ü";
      /*
      * Ein Array mit Arrays Paarungen Kategorie/Begriff, typischerweise aus Datenbank
      */
      $worte = array(=> array("Sport" => "FUSSBALL"), => array("Essen" => "SCHNITZEL"), => array("Computer" => "PROZESSOR"),
                 
      => array("Geographie" => "GRANDCANYON"), => array("Film" => "HALLOWEEN"), => array("Prominente Person" => "OTTO"));
      /*
      * Eine Kategorie/Begriff Paarung zufällig auswählen
      */
      $ratebegriff $worte[rand(0count($worte)-1)];
      /*
      * Der Array-Schlüssel wird unten als Kategorie ausgegeben
      */
      $kategorie array_keys($ratebegriff);
      /*
      * begriff = zuraten
      */
      $begriff array_values($ratebegriff);
      ?>
      <!DOCTYPE HTML>
      <html>
      <head>
      <title>Untitled</title>
      <style type="text/css">
      <!--
      #btn{
       width: 10px;
       height: 20px;
       text-align: center;
      }
      //-->
      </style>
      <script src="jquery-1.10.1.js" type="text/javascript"></script>
      <script type="text/javascript">
      <!--
      $(document).ready( function(){
      /*
      * Das Wort mittels PHP/json_encode an JS übergeben
      */
       wort = <?php echo json_encode($begriff);?>;
       /*
       * Anzahl der gefundenen Buchstaben
       */
       gefunden = 0;
       /*
       * Wenn ein Button angeklickt wurde:
       * Den Button deaktivieren, die Beschriftung durchstreichen, den Text rot darstellen
       */
       $("button").click(function(){
        $(this).attr("disabled", "true");
       $(this).css("text-decoration", "line-through");
       $(this).css("color", "red");
       /*
       * Anschließend den value-Wert (ein Buchstabe) an die Funktion auswahl übergeben
       */
       auswahl($(this).attr("value"));
       });
       function auswahl(buchstabe){
        treffer = 0;
        /*
       * Das Wort liegt als Array vor, deshalb werden Wortlänge und die einzelnen Buchstaben
       * mit wort[0] . . . angesprochen
       */
        for(var i=0;i<wort[0].length;i++){
        /*
        * Stimmt ein Buchstabe im Wort mit dem übergebenen Buchstaben überein . . .
        */
        if(wort[0][i] == buchstabe){
         /*
        * . . . bekommen die ensprechenden Label (siehe unten) den Buchstaben zugewiesen
        */
         $("#" + i).html(buchstabe);
        treffer++;
        gefunden++;
        }
       }
       /*
       * Statt alert(Meldung) natürlich die Hangmangrafik(en) ausgeben :-)
       */
       if(treffer == 0) alert("Der Buchstabe " + buchstabe + " ist nicht im Wort vorhanden.");
       /*
       * Sind alle Buchstaben gefunden . . .
       */
       if(gefunden == wort[0].length){
        alert("Glückwunsch!!!");
        /*
        * Alle Buttons deaktivieren, das Spiel ist zuende
        */
        $("button").each(function(){
         $(this).attr("disabled", "true");
        });
       }
       }
      });
      // -->
      </script>
      </head>
      <body>
      <h4>Zu raten ist ein Begriff aus der Kategorie <?php echo $kategorie[0]; ?></h4>
      <h3>
      <?php
      /*
      * Die Label als Platzhalter für die Buchstaben ausgeben
      */
      for($i=0;$i<strlen($begriff[0]);$i++){ ?>
       <label id="<?php echo $i;?>">-</label>
      <?php ?>
      </h3>
      <fieldset>
      <legend>Buchstabenauswahl</legend>
      <?php
      /*
      * Die Buttons darstellen
      */
      for($i=0;$i<count($buchstaben);$i++){ ?>
       <button class="btn" value="<?php echo $buchstaben[$i]; ?>"><?php echo $buchstaben[$i]; ?></button>
      <?php ?>
      </fieldset>
      </body>
      </html>
      Gruß
      Günni

      Kommentar


      • #4
        Und ich würde PHP und HTML gar nicht erst vermischen, außer ich nutze PHP bewusst auch als Template-Engine
        [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

        Kommentar

        Lädt...
        X