Würfel mit mehreren Würfen

phpnewguest

Grünschnabel
Hallöchen zusammen,

ich habe da mal wieder ein Henne Ei Problem.

Ich würde gerne aus einem Formular die Würfe entgegen nehmen mit denen man dann 2 würfel würfelt und am Ende jeder Wurf runde die Summe zusammenzählt.
Beispiel
WurfW1W2Gesamt
1347
2516


PHP:
<!DOCTYPE html><html><head><meta charset="utf-8">
<h2>Anzahl der Würfe.</h2>
<form method="post" action="test.php">

Anzahl:
<input name="wurf" size=8><br><p>
<input type="submit" name="submit" value="Würfeln simulieren">
<?php

        if (isset($_POST["wurf"]))
        {
            $_wurf = $_POST["wurf"];

            srand((double)microtime()*1000000);
            function wuerfel()
                {
                        for($i=1; $i<=$_POST["wurf"]; $i++)
                        //echo '<br>'.'Wurf Runde ' . " $i" . '<p>';  
                        yield mt_rand(1,6);

                        //var_dump ($i);
                    }
                        foreach(wuerfel() as $wert)
                        echo '<br>'. "$wert ". '<p>';
        }
?>
</body></html>

Wenn ich mir den Echo in der for Schleife anzeigen lasse, sehe ich die Wurfrunden, aber nicht die werte. und dann habe ich ja noch das problem, dass er mir den letzten Durchgang wo die schleife bei 1 anfangen würde mir die 1 anzeigt.

Gruß

Edit, wollte kein neuen Beitrag schreiben.

Ich habs mit ner Kopf und Fussgesteuerten Schleife probiert.
Der zeigt mir natürlich immer den initialwert wert an.

PHP:
function wuerfel()
                {

            $i = 0;

    while ($i < $_POST["wurf"])
    {
        echo $i.'<br />';

        $i++;
    }
                    }
 
Zuletzt bearbeitet:

Yaslaw

alter Rempler
Moderator
die Yield-Funktion wuerfel gibt ein Iterator zurück. Du kannst diesen in einen Array wandeln und dann zusammenzählen

PHP:
            $wuerfe = iterator_to_array(wuerfel());
            $summe = array_sum($wuerfe);
            foreach($wuerfe as $wert) echo '<br>'. "$wert ". '<p>';
            echo $summe;
 

Zvoni

Erfahrenes Mitglied
Wenn ich das sehe, gratuliere ich mir selbst, kein PHP-ler/JS-ler zu sein :p
In jeder "normalen" Programmiersprache wäre das ein 2D-Array:
Waagrecht (Spalten): Anzahl Würfel (Variable $j)
Senkrecht (Reihen): Anzahl Würfe (Variable $i)
Pseudo-Code
PHP:
For($i=1;$i<=Wurf;$i++){
    For($j=1;$j<=Würfel;$j++){
        MeinWurf[$i][$j]=mt_rand(1,6);
        }
    }
 

Sempervivum

Erfahrenes Mitglied
gratuliere ich mir selbst, kein PHP-ler/JS-ler zu sein :p
In jeder "normalen" Programmiersprache wäre das ein 2D-Array:
In dieser Hinsicht sind PHP und JS schon normale Programmiersprachen, denn 2D-Arrays sind natürlich kein Problem. Es liegt am Programmierer wenn davon kein Gebrauch gemacht wird. Ich habe schon erlebt, dass jemand ein Damespiel programmieren wollte und die Felder eindimensional in einem langen Array abgelegt hat. In Ausnahmefällen wird es jedoch so gehandhabt, z. B. beim Canvas in Javascript. Möglicher Weise aus Performance-Gründen.
Das yield das hier verwendet wird ist eine fortgeschrittene und trickreiche Technik, die in manchen Situationen von Vorteil sein kann.
 
Zuletzt bearbeitet:

Zvoni

Erfahrenes Mitglied
In dieser Hinsicht sind PHP und JS schon normale Programmiersprachen, denn 2D-Arrays sind natürlich kein Problem. Es liegt am Programmierer wenn davon kein Gebrauch gemacht wird. Ich habe schon erlebt, dass jemand ein Damespiel programmieren wollte und die Felder eindimensional in einem langen Array abgelegt hat. In Ausnahmefällen wird es jedoch so gehandhabt, z. B. beim Canvas in Javascript. Möglicher Weise aus Performance-Gründen.
Das yield das hier verwendet wird ist eine fortgeschrittene und trickreiche Technik, die in manchen Situationen von Vorteil sein kann.
OK, ich will jetzt nicht einen Flamewar starten, aber der Hauptgrund, warum mir PHP so missfällt ist, dass Variablen keinen "Typ" haben (oder zumindest erkennbar einen Typ --> Bsp. "int c;" (C/C++), "Dim s As String" (VB)).
Seit ich vor 5 Jahren angefangen habe in Freepascal zu programmieren (nach ca. 20 Jahren Visual Basic), habe ich die starke Typisierung zu schätzen gelernt. Macht das Debugging um Faktoren leichter.
Ich kann mich gut erinnern, dass es in VB6 (und früher) möglich war, einfach eine Variable zu verwenden, ohne sie vorher zu deklarieren (war halt ein Variant), aber wehe du hattest nen Tippfehler.

Andererseits: Algorithmen bleiben Algorithmen, egal in welcher Sprache sie dann umgesetzt werden.
Das war so eher der Grund für meine "Spitze" oben... :sneaky::sneaky::sneaky:;);););)
 

Yaslaw

alter Rempler
Moderator
VB ist ein schlechtes Beispiel. Viel zu häufig sieht man dort den Typ Variant.
Anderseits ist der Typ Variant die einzige Mäglichkeit um mit ein Funktionsaufruf mit verschiedenen Typen zuzulassen. Das was man in Java mit überladen macht.