Announcement

Collapse
No announcement yet.

BlackJack-Spiel funktioniert bei mir noch nicht ganz. Oder, wie speichere ich ein Array längerfristig?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • BlackJack-Spiel funktioniert bei mir noch nicht ganz. Oder, wie speichere ich ein Array längerfristig?

    Hallo!

    Ich mach gerade ein BlackJack-Spiel unter PHP 4.
    Es funktioniert alles einwandfrei (Grafiken der Karten, usw.).
    Nur bekomme ich das zusammenzählen der Kartenwerte bis 21 nicht hin, da ich nicht weiß, wie ich ein Array längerfristig speichern kann.
    Sobald auf "Neue Karte" geklickt wird, erscheint jeweils immer nur der Wert der eben "gezogenen" Karte.
    Muß ich das Speichern des Wertes, damit ich die Werte nacheinander zusammenzählen kann, mit einem Cookie, in eine Datei oder gar einer Datenbank wie MySQL verwirklichen, oder geht das auch einfacher?
    Mein Code:
    <pre>
    ...
    echo(" &lt;p&gt;Derzeitiger Wert: ");
    $Bilder = array(
    "&lt;img src=\"images/0-2.png\" alt=\"2\"&gt;" , "&lt;img src=\"images/1-2.png\" alt=\"2\"&gt;" ,
    "&lt;img src=\"images/2-2.png\" alt=\"2\"&gt;" ,"&lt;img src=\"images/3-2.png\" alt=\"2\"&gt;" ,
    "&lt;img src=\"images/0-3.png\" alt=\"3\"&gt;" , "&lt;img src=\"images/1-3.png\" alt=\"3\"&gt;" ,
    "&lt;img src=\"images/2-3.png\" alt=\"3\"&gt;" ,"&lt;img src=\"images/3-3.png\" alt=\"3\"&gt;"); //Verschiedene Kartenbilder mit demselben Wert - noch nicht alle Karten hinzugefügt
    $Zahl1 = $Bilder[rand (0, 7)];
    echo($Zahl1);

    //Wertausgabe für 2
    if($Zahl1=="&lt;img src=\"images/0-2.png\" alt=\"2\"&gt;"){
    $Wert=2;
    print("&lt;br&gt;Karte $Wert");
    }
    if($Zahl1=="&lt;img src=\"images/1-2.png\" alt=\"2\"&gt;"){
    $Wert=2;
    print("&lt;br&gt;Karte $Wert");
    }
    if($Zahl1=="&lt;img src=\"images/2-2.png\" alt=\"2\"&gt;"){
    $Wert=2;
    print("&lt;br&gt;Karte $Wert");
    }
    if($Zahl1=="&lt;img src=\"images/3-2.png\" alt=\"2\"&gt;"){
    $Wert=2;
    print("&lt;br&gt;Karte $Wert");
    }
    ...
    ...

    //Hochrechnen des Wertes
    $Ergebnis = $Wert++;
    echo("&lt;p&gt;Punktestand: $Ergebnis");

    //Gewonnen-Meldung bei 21 Punkten | Verloren-Meldung bei über 21 Punkten
    if($Ergebnis==21){
    print ("&lt;br&gt;Gewonnen!");
    }
    if($Ergebnis>21){
    print ("&lt;br&gt;Verloren!");
    }
    ...
    </pre>
    Der Code sollte möglichst einfach sein. Erst danach wollte ich eventuell mit MySQL für Benutzer HighScores, usw. einbauen.

    Nebenbei: Was würde es eigentlich bringen, wenn ich die Images von PHP dynamisch mit der GD-Funktion generieren lassen würde, anstatt wie jetzt, sie einfach nur zu verlinken?

    Vielen Dank!!

  • #2
    Zuerst einmal wuerd ich die Datenstruktur anders aufbauen: Im Array wuerd ich zu jeder Karte einen ganzen Eintrag als assoziatives Array speichern: $deck = array(); $karte = array("Name" => "Pik 2", "Wert" => 2, "Bild" => "<img ...>"); ... array_push($deck, $karte) Damit ist in der Datenstruktur gleich der Wert mit dem Kartenbild verknuepft, und wann immer Du aus Deinem Kartenstapel eine Karte auswaehlst, hast Du alle noetigen Informationen.<p>
    Zum Daten "laengerfristig" speichern kannst Du prima sessions benutzen. Die ersten Versuche mit Sessions sind zwar etwas zaeh, aber wenn man es einmal gemacht hat, ist es super (dran denken, die Session nach Spielende zu beenden!). Damit sparst Du Dir eine Menge Datenbank-Trickserei.<p>
    Die Bilder von GD zusammenrechnen zu lassen bedeutet in erster Linie erhoehten Traffic auf dem Webserver und laengere Ladezeiten. Denn im Gegensatz zu statischen Bildern wie im Moment werden dynamisch generierte Bilder bei jedem Abruf neu erzeugt und koennen nur schwer im Browser-Cache gehalten werden. Sicher kann man dort tunen, aber wenn Du die Bilder der Karten eh als feste Images hast, dann bleib bei der Version.<p>
    Gruss, Marc

    Comment


    • #3
      Was kommt in $deck ?!
      Was bringt der Befehl array_push($deck, $karte)?
      Heißt das, ich schreib das dann so rein?
      <p>
      $deck = array();<br>
      $karte = array("Name" =&gt "Pik 2", "Wert" =&gt 2, "Bild" =&gt "&ltimg src=\"images/0-2.png\"&gt");<br>
      $karte = array("Name" =&gt "Karo 2", "Wert" =&gt 2, "Bild" =&gt "&ltimg src=\"images/1-2.png\"&gt");<br>
      $karte = array("Name" =&gt "Pik 3", "Wert" =&gt 3, "Bild" =&gt "&ltimg src=\"images/0-3.png\"&gt");<br>
      $karte = array("Name" =&gt "Karo 3", "Wert" =&gt 3, "Bild" =&gt "&ltimg src=\"images/1-3.png\"&gt");<br>
      <br>
      array_push($deck, $karte);
      <br>
      $Zahl1 = $karte[rand (0, 3)];<br>
      echo($Zahl1);
      </p>

      Wäre ein mehrdimensionales Array nicht besser?

      <p>
      $karte = array(<br>
      array("Name" =&gt "Pik 2", "Wert" =&gt 2, "Bild" =&gt "&ltimg src=\"images/0-2.png\"&gt"),<br>
      array("Name" =&gt "Karo 2", "Wert" =&gt 2, "Bild" =&gt "&ltimg src=\"images/1-2.png\"&gt"),<br><br>

      array("Name" =&gt "Pik 3", "Wert" =&gt 3, "Bild" =&gt "&ltimg src=\"images/0-3.png\"&gt"),<br>
      array("Name" =&gt "Karo 3", "Wert" =&gt 3, "Bild" =&gt "&ltimg src=\"images/1-3.png\"&gt")<br>);<br>
      </p>

      Wie kann ich das ganze jetzt randomizen?
      Der Zufallsgenerator scheint jetzt nicht mehr zu funktionieren?
      Macht man das bei Arrays mit dem Befehl shuffle?
      Wie laß ich mir jetzt die zufälligen Bilder anzeigen? Mit echo($karte["Bild"]rand[0,7])

      Comment


      • #4
        Also nochmal langsam: Die Datenstruktur, die ich vorgeschlagen habe, ist so aehnlich wie ein mehrdimensionales Array - es ist ein Array von Karten, und jede Karte ist ein Array von Werten.<p>
        1. Schritt: deck mit den Karten fuellen (array_push fuellt ein Array einfach nur mit Werten, darum hab ichs verwendet. Natuerlich muss man es bei JEDER Karte machen!)<p>
        2. Schritt: Mit einem Index zwischen 0 und sizeof($deck) kannst Du eine beliebige Karte ansprechen. $mycard = $deck[rand[0, sizeof($deck)]]; echo $mycard['Name'];<p>
        Eine Software steht und faellt mit einer ueberschaubaren und guten Datenstruktur, und je genauer Deine Datenstruktur der Wirklichkeit aehnelt, umso lesbareren Code kannst Du produzieren.<p>
        Statt des geschachtelten Arrays kannst Du natuerlich auch einfach 2 oder mehr einzelne Arrays benutzen, eines fuer die Werte, eines fuer die Namen, eines fuer die Bilder ... Mach das, was Du fuer einfach haelst, aber IMHO kommt ein geschachteltes Array am besten.<p>
        Gruss, Marc

        Comment

        Working...
        X