Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Zombie-Würfel

Einklappen

Neue Werbung 2019

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

  • PHP Zombie-Würfel

    Problem: Zombie-Würfel

    Hallo,

    meine Mitstudentin und ich verzweifeln derzeit an unserem Projekt für den PHP-Kurs.
    Aufgabe ist es, das Gesellschaftsspiel "Zombiewürfel" in PHP umzusetzen.
    Da die Spielregeln relativ komplex sind hier nochmal eine kurze Anleitung: https://www.youtube.com/watch?v=M0BUKQaR32g
    Derzeit stehen wir vor dem Problem, dass wir nicht wissen wie wir es schaffen sollen, dass man die gewürfelten "Füße" behält und in der nächsten Runde mit ihnen weiterspielt. Wenn jemand eine Idee dafür hätte wären wir sehr dankbar.

    Zudem besteht noch das Problem, dass es sich nur ganz zu Beginn den Namen des ersten Spielers merken kann, jedoch ab dann wieder alles vergisst und gar keine Namen mehr anzeigt.


    Danke im Vorraus!

    PHP-Code:
    <html>

    <head>
        <titel>Willkommen beim Spiel</titel>
    </head>

    <body>

    <?php if (!isset($_POST["sz"])) {
        
    $_POST["sz"] = "0";
    }

     if (!isset(
    $_POST["spieler_flag"]))
          {
    $_POST["spieler_flag"] = 0;}


    if (!isset(
    $_POST["spieleranzahl"])){?>

        <form method="POST">
            <p>Anzahl der Spieler:</p>
            <input type="text" name="spieleranzahl" value=""/>
            <input type="submit" name="go" value="Los"/>
            <input type="hidden" name="sz" value="1"/>
        </form>
    <?php ?>

    <?php if ($_POST ["sz"] == 1) { ?>

        <form method="POST">

            <?php
            
    for ($_POST["spieler_flag"]= 1$_POST["spieler_flag"] <= $_POST["spieleranzahl"]; $_POST["spieler_flag"]++) {

                if (!isset(
    $_POST["go"])) {
                    
    $_POST["go"] = "";
                }

                if (!isset(
    $_POST["spieler"][$_POST["spieler_flag"]])) {
                    
    $_POST["spieler"][$_POST["spieler_flag"]] = "";
                }
                
    ?>

                <p>Spieler <?php echo $_POST["spieler_flag"]; ?></p>
                <input type="text" name="spieler[<?php echo $_POST["spieler_flag"]; ?>]" value="<?php echo $_POST ["spieler"][$_POST["spieler_flag"]]; ?>"/>
                <?php // <input type="text" name="Ergebnis[<?php echo $i; ?>
            <?php ?>
            <input type="hidden" name="sz" value="2"/>
            <input type="hidden" name="spieleranzahl" value="<?php echo $_POST["spieleranzahl"]; ?> "/>
            <input type="submit" name="go" value="los"/>
            <input type="hidden" name="spieler[<?php echo $_POST["spieler_flag"]; ?>]" value="<?php echo $_POST ["spieler"][$_POST["spieler_flag"]]; ?>"/>

        </form> <?php ?>

    <?php
    if ($_POST ["sz"] == 2)
    {
    ?>
    <form method="POST">
        <?php
        $sz_flag 
    2;

        
    // neuer Spieler = neuer Würfelbecher
        
    if (!isset($_POST["spieler_flag"]))
            {
    $_POST["spieler_flag"] = 0;}

      
    // echo "Spielerflag Start:" . $_POST["spieler_flag"];

        
    if ($_POST["spieler_flag"] < 1)
            {
            
    $_POST["spieler_flag"] = 1;
           echo 
    "neuer wuerfelbecher 1";
    if(!isset(
    $wuerfelbecher)){
        
    $wuerfelbecher "";
    }
           
    $wuerfelbecher = [$wuerfel[1], $wuerfel[2], $wuerfel[3], $wuerfel[4], $wuerfel[5], $wuerfel[6], $wuerfel[7], $wuerfel[8], $wuerfel[9], $wuerfel[10], $wuerfel[11], $wuerfel[12], $wuerfel[0]];

           
    $wuerfel[1] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Flinte"=> "Flinte"];
           
    $wuerfel[2] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Flinte"=> "Flinte"];
           
    $wuerfel[3] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Flinte"=> "Flinte"];
           
    $wuerfel[4] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Flinte"=> "Flinte"];
           
    $wuerfel[5] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Hirn"=> "Flinte"];
           
    $wuerfel[6] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Hirn"=> "Flinte"];
           
    $wuerfel[7] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Hirn"=> "Flinte"];
           
    $wuerfel[8] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Hirn"=> "Flinte"];
           
    $wuerfel[9] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Hirn"=> "Flinte"];
           
    $wuerfel[10] =[=> "Hirn"=> "Hirn"=> "Füße"=> "Füße"=> "Hirn"=> "Flinte"];
           
    $wuerfel[11] =[=> "Hirn"=> "Flinte"=> "Füße"=> "Füße"=> "Flinte"=> "Flinte"];
           
    $wuerfel[12] =[=> "Hirn"=> "Flinte"=> "Füße"=> "Füße"=> "Flinte"=> "Flinte"];
           
    $wuerfel[0] =[=> "Hirn"=> "Flinte"=> "Füße"=> "Füße"=> "Flinte"=> "Flinte"];

            }
       
    $w1 $zufallswuerfelausbecher rand(0count($wuerfelbecher) - 1); $wuerfelseite rand(16);
       
    $w2 $zufallswuerfelausbecher rand(0count($wuerfelbecher) - 1); $wuerfelseite rand(16);
       
    $w3 $zufallswuerfelausbecher rand(0count($wuerfelbecher) - 1); $wuerfelseite rand(16);
        }



        if (!isset(
    $_POST["Hirnsumme"])) {
            
    $_POST["Hirnsumme"] = 0;
        }
        if (!isset(
    $_POST["Flintesumme"])) {
            
    $_POST["Flintesumme"] = 0;
        }
        if (!isset(
    $_POST["Fuessesumme"])) {
            
    $_POST["Fuessesumme"] = 0;
        }

        if (
    $zufallswuerfelausbecher[$wuerfelseite] == "Hirn") {
            
    $_POST["Hirnsumme"]++;
        }
        if (
    $zufallswuerfelausbecher[$wuerfelseite] == "Flinte") {
            
    $_POST["Flintesumme"]++;
        }
        if (
    $zufallswuerfelausbecher[$wuerfelseite] == "Füße") {
            
    $_POST["Fuessesumme"]++;
        }

        unset(
    $wuerfelbecher[$zufallswuerfelausbecher]);
        
    print_r($wuerfelbecher);
        
    sort($wuerfelbecher);
        
    print_r($wuerfelbecher);

        
    //abfrage ob der nächste Spieler dran ist bzw ob es den Spieler mit der Nummer gibt sonst wieder spieler 1

    $hilfe=$_POST["spieler_flag"];
    if (!isset (
    $_POST["spielpunkte[$hilfe]"]))
            {
    $_POST["spielpunkte[$hilfe]"] = 0;}

        if (
    $_POST["spielpunkte[$hilfe]"] == 13)
            {
    $sz_flag 3;}


        if (
    $_POST["go"] == "go")
        {

            
    $_POST["spielpunkte[$hilfe]"] = $_POST["spielpunkte[$hilfe]"] + $_POST["Hirnsumme"];
            
    $_POST["spieler_flag"] = (integer)$_POST["spieler_flag"] + 1;


            
    // nächster Spieler = neuer Würfelbecher
            
    echo "neuer wuerfelbecher 2";

            if (
    $_POST["spieler_flag"] > $_POST["spieleranzahl"])
                {
    $_POST["spieler_flag"] = 1;}
        } else {
            if (!isset(
    $_POST["wuerfelbecher"])) {
                
    $_POST["wuerfelbecher"] = $wuerfelbecher;
            } else {
                
    $wuerfelbecher $_POST["wuerfelbecher"];
            }
        }


    $hilfe=$_POST["spieler_flag"]; ?>

        <p>Spieler <?php echo $_POST["spieler_flag"];?><?php echo $_POST["spieler[$hilfe]"];?> </p>
        <input type="hidden" name="spieler[<?php echo $hilfe?>]" value="<?php echo $_POST["spieler"][$hilfe]; ?>"/>



        <?php if ($_POST["Flintesumme"] > 2) {
            
    $_POST["Hirnsumme"] = 0;
            echo 
    "Der nächste Spieler ist dran";
            
    $_POST["spieler_flag"]++;
        }
        
    ?>
        <br/>Spielerpunkte:
        <input type="text" name="spielpunkte[<?php echo $_POST["spieler_flag"];?>]"
               value="<?php echo $_POST["spielpunkte[$hilfe]"];?>"/><br/>
        <input type="text" name="w1" value="<?php echo $w1?>"/>
        <input type="text" name="w2" value="<?php echo $w2?>"/>
        <input type="text" name="w3" value="<?php echo $w3?>"/>

        <br/>
        Hirnsumme:<br/><input type="text" name="Hirnsumme" value="<?php echo $_POST["Hirnsumme"]; ?>"/>
        <br/>
        Flintensumme:<br/><input type="text" name="Flintesumme" value="<?php echo $_POST["Flintesumme"]; ?>"/>
        <br/>
        Füßesumme:<br/><input type="text" name="Fuessesumme" value="<?php echo $_POST["Fuessesumme"]; ?>"/>
        <br/>
        <input type="hidden" name="sz" value="<?php echo $sz_flag?>"/>
        <input type="hidden" name="spieleranzahl" value="<?php echo $_POST["spieleranzahl"];?>"/>
        Spielerflag: <input type="text" name="spieler_flag" value="<?php echo $_POST["spieler_flag"];?>"/>
        <?php foreach ($wuerfelbecher as $key => $value) { ?>
            <input type="hidden" name="wuerfelbecher[<?php echo $key?>]" value="<?php echo $value?>"/>
        <?php ?>
        <?php if ($_POST["Flintesumme"] < 3) { ?>
            <input type="submit" name="go" value="stay"/>
        <?php ?>
        <input type="submit" name="go" value="go"/>
        <input type="hidden" name="spieler[<?php echo $_POST["spieler_flag"]; ?>]" value="<?php echo $_POST ["spieler"][$_POST["spieler_flag"]]; ?>"/>

    </form>
    <pre>
        <?php
        
    //  print_r($_POST);



        
    ?>

        <?php
        
    if ($_POST ["sz"] == 3) {
            echo 
    "Ende - Gewonnen!";
        }
        
    //pls no bugs ?>

    </pre>

    </body>
    </html>

  • #2
    und was ist Deine präzise Frage zur Programmierung? Einfach Deinen Kram hnknallen und sagen macht mal => ist hier nicht. Hier geht es um konkrete Programmierprobleme von Anfängern.

    finde raus was wo etwas unerwartetes tut und behebe das oder stelle dazu Deine Fragen

    Wenn Du Hilfe bei einem Projekt brauchst wäre wahrscheinlich die Scriptbörse das bessere Forum.
    PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

    Kommentar


    • #3
      Hier noch zum Debugging: https://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


      • #4
        Ich finde das ganze sehr unübersichtlich und sicher liesse sich der code oprtimieren.
        Es ist auch immer fair, den geposteten code soweit zu küzen, daß er das problem anschauilich darstellt --- meist findet man dann den fehler.
        du hast zwei form tags, das könnte ein indiz sein, ich weiss es nicht.
        wilkommen im forum.

        Kommentar


        • #5
          Übrigens, wenn ihr sauber programmieren wollt, solltet ihr den Code an das EVA-Prinzip anpassen. Derzeit ist das ein schlimmer HMTL/PHP Mischmasch. https://php-de.github.io/jumpto/eva-prinzip/

          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


          • #6
            Ihr braucht etwas um Spielzustände serverseitig über die Runden hinweg speichern zu können. All diese Informationen von Formular zu Formular mitzuschleppen (wie auch immer, hidden-felder) führt euch nicht zum Ziel.
            Um diese Spielzustände zu speichern sind Datenbanken gut geeignet. SQLite in Verbindung mit PDO ist dafür eine gute Wahl. Wenn ihr mit Datenbanken noch keine Erfahrung habt, könnt ihr es auch gerne mit der Klasse

            SqliteObjectStore

            probieren. Für jeden Spieler ein Array oder Objekt anlegen und das für jede Runde unter den Namen (Key) ablegen/holen.

            Kommentar


            • #7
              Ergänzend zu dem Vorschlag von jspit möchte ich noch Sessions aufführen, je nach Komplexität auch in Verbindung mit einer Datenbank.
              "Software is like Sex, it's best if it's free." - Linus Torvalds

              Kommentar


              • #8
                Ich hab mal aus Übermut ne Spieleanleitung gegoogelt:
                http://www.wuerfelblog.de/wurfelspiel-zombie-dice/

                Ich kann die Anleitung schwer im dem Code oben zusammenbringen;
                wie speichern ?
                optimalerweise jeden Zug ohne neuladen hinkriegen, also js.
                dann braucht man ja nur noch die Punkte je Spieler übergtragen, das kann man zur Not auch als hidden field, besser wohl als readonly, damit jeder den spielstand der anderen sieht.
                wenn du mit neuladen arbeiten willst, um das ganze js zeugs erst ein mal auszuklammenrn, würde ich ein field mit aktuellem zug übertragen.

                ein serverseitiges speichern, ein nutzen von session, dies alles ist klar besser.

                Kommentar


                • #9
                  Hallo, ich kann euch die Verwendung von Cookies empfehlen. Cookies erlauben Daten über einen längeren Zeitraum lokal auf dem Benutzercomputer zu speichern.

                  Sitzungen werden nur so lange gespeichert wie der Browser offen ist, sobald ein Nutzer seinen Browser schließt erhält er bei der erneuten Ausführung eine neue Identifikationsnummer und wird als "Neu" angesehen. Eine Datenbankanbindung wäre natürlich für den Lerneffekt eine nützliche Option scheint mir aber für dieses Anfangsprojekt überdimensioniert.

                  [IMG2=JSON]{"data-align":"none","data-size":"full","src":"https:\/\/becker-software.de\/assets\/img\/signature.png"}[/IMG2]

                  Kommentar


                  • #10
                    Zitat von Becker Software Beitrag anzeigen
                    Hallo, ich kann euch die Verwendung von Cookies empfehlen. Cookies erlauben Daten über einen längeren Zeitraum lokal auf dem Benutzercomputer zu speichern.

                    Sitzungen werden nur so lange gespeichert wie der Browser offen ist, sobald ein Nutzer seinen Browser schließt erhält er bei der erneuten Ausführung eine neue Identifikationsnummer und wird als "Neu" angesehen. Eine Datenbankanbindung wäre natürlich für den Lerneffekt eine nützliche Option scheint mir aber für dieses Anfangsprojekt überdimensioniert.
                    Cookies lassen sich aber relativ einfach manipulieren (wobei zugegebenermaßen der Sicherheitsaspekt hier relativ niedrig sein dürfte). Bei Sessions tut man sich da schon eher schwer.
                    Je nachdem ob alle Spieler vor einem Client sitzen oder verteilt, wäre eine Datenbank (oder ähnliches) sowieso unumgänglich und der Aspekt der ablaufenden Sessions andererseits auch hinfällig.
                    "Software is like Sex, it's best if it's free." - Linus Torvalds

                    Kommentar

                    Lädt...
                    X