Berechnungsfehler, aber wo und wieso?

  • Berechnungsfehler, aber wo und wieso?

    Hallo,

    ich habe folgenden PHP Quellcode:

    Quellcode

    1. function InputMethods($text)
    2. {
    3. $ret = 0;
    4. $eql = 0;
    5. preg_match("'/roll[ ]{0,}?([1-9])([^0-9]+)?([2-9][0-9]{0,2})[ ]{0,}?([\+\-][1-9][0-9]{0,})?'is", $text, $ret);
    6. $rest = (int)$ret[4];
    7. for($i = 1; $i<$ret[1] + 1;$i++)
    8. {
    9. $c = rand(1, $ret[3]);
    10. $rest += $c;
    11. $eql .= "[" . $c . "] ";
    12. }
    13. $text = preg_replace("'/roll[ ]{0,}?([1-9])([^0-9]+)?([2-9][0-9]{0,2})[ ]{0,}?([\+\-][1-9][0-9]{0,})?'is", "<label id='roll'>Wurf:</label> <label id='roll_tsk'>\\1W\\3</label><br><label id='eql'>Erg&auml;bnis:</label> <label id='roll_eql'>$eql</label><br><label id='eql_all'>Summe: </label><label id='end_all'>$rest</label>", $text);
    14. return $text;
    15. }
    Alles anzeigen

    Mein Ziel ist es, wenn in einem String der Text /roll ZahlZaheln+/-Zahl vorkommt, dann gibt er mir ZahlWZahlen Zahl mal Zufallszahl zwischen 1 und Zahlen und zum schluss alle Ergäbnisse zusammen +/- Zahl.

    Bei - funktioniert es wunderbar und ich bekomme EINEN korrekten Wert zurück.
    Bei + jedoch nicht, da bekomme ich alle Ergäbnisswerte(als eine Summe) und die dazu zu addierende Zahl. (ca. so bei ergäbnissen 2,9,3 und modifikator +2 bekomme ich 14 2, bei einem modifikator von -2 kommt dan 12 heraus.)

    Ich habe keine Ahnung was PHP da hat und habe schon vieles herumprobiert, z.B. die Konvertierung durch pow(wert, 1) zu erzwingen, kein Erfolg.

    #EDIT

    Problem irgentwie durch irgentetwas gelöst, wodurch wösste ich aber selber gerne.
    Fertiger Quellcode:

    Quellcode

    1. function InputMethods($text)
    2. {
    3. preg_match("#/roll[ ]{0,}?([1-9])([^0-9]+)?([2-9][0-9]{0,2})[ ]{0,}?([\+\- ][1-9][0-9]{0,})?#is", $text, $ret);
    4. if($ret[4] > 0)
    5. {
    6. $x = " +" . $ret[4];
    7. }
    8. else if($ret[4] < 0)
    9. {
    10. $x = " " . $ret[4];
    11. }
    12. else
    13. {
    14. $x = "";
    15. }
    16. for($i = 1; $i<$ret[1] + 1;$i++)
    17. {
    18. $c = rand(1, $ret[3]);
    19. $ende += $c;
    20. $eql .= "[" . $c . "] ";
    21. }
    22. $ende += $ret[4];
    23. $text = preg_replace("#/roll[ ]{0,}?([1-9])([^0-9]+)?([2-9][0-9]{0,2})[ ]{0,}?([\+\- ][1-9][0-9]{0,})?#is", "<label id='roll'>Wurf:</label> <label id='roll_tsk'>\\1W\\3$x</label><br><label id='eql'>Erg&auml;bnis:</label> <label id='roll_eql'>$eql</label><br><label id='eql_all'>Summe: </label><label id='end_all'>" . $ende . "</label>", $text);
    24. return $text;
    25. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ViktorM ()