Moralrechner

  • Themenstarter Themenstarter koronyl
  • Beginndatum Beginndatum
K

koronyl

Hallo Leute,
ich habe das Browsergame die Stämme gespielt, in dem Spiel gibt es Moral in einem Forum habe ich gelesen die Formel ist
((Deff-Punkte/Angreifer-Punkte)*3+0,3)*100
Jetzt habe ich probiert diese Formel in einen PHP Code umzuwandeln
Mein Problem:
Bei Stämme gibt es ein Punkteverhältnis.
Man darf nur Angegriffen werden und auch nur angreifen wenn das Punkteverhältnis 20 ist also wenn ich 1000 Punkte hab darf mich keiner Angreifen der 20000 Punkte hat. Wie realisiere ich das in PHP mein Versuch war es mit if- aber es Funktioniert nicht denn er sagt mir immer Das Punkteverhältnis ist nicht korrekt :(
HELP!
PHP:
<?php
$Deff_Punkte = $_GET["Deff_Punkte"];
$Angriff_Punkte = $_GET["Angriff_Punkte"];
if ($Angriff_Punkte <= $Deff_Punkte * 20 or $Deff_Punkte <= $Angriff_Punkte * 20)
{
echo "Das Punkteverhältnis ist nicht korrekt";
}
else
{

@$Punkte = $Deff_Punkte / $Angriff_Punkte;
$Rechnung_Teil1 = $Punkte * 3;
$Rechnung_Teil2 = $Rechnung_Teil1 + 0.3 ;
$Ergebnis = $Rechnung_Teil2 * 100;

echo "Moral=$Ergebnis";
}

?>

<form action="Moralrechner.php" method="get">
<br>Angreifer Punkte:<br>
<input type="text" name="Angriff_Punkte"><br>
Verteidigerpunkte:<br>
<input type="text" name="Deff_Punkte"><br>
<input type="submit" name="Submit"></form>
 
Ich bin zwar weder Programmierer noch ein "Die Stämme"-Spieler, aber ist es vlt möglich, dass du das mit dem Verhältnis falsch verstanden hast? Ein Verhältnis von 20, so wie du es interpretiert hast, würde, wenn der Gegner 1000 Punkte besitzt, bedeuten, dass er 20.000 Punkte benötigt, um angreifen zu dürfen. Wäre das nicht auch etwas unfair? Das wäre jetzt, wenn ich auf deinen Code gucke, das mir am logisch erscheinenste Problem.
mfg
GF
 
Jop, eindeutig ein Logik-Fehler hier ;)

Hier also die Lösung für das Punkteverhältnis:

Code:
<?php

$att = $_GET['att_points'];
$def = $GET['def_points'];

if($att >= $def) {
  $moral = $att / $def;
}
else {
  $moral = $def / $att;
}

if($moral <= 20) {
  echo 'Viel Spass beim Kampf!';
}
else {
  echo 'Lass den Boon leben - du darfst nicht angreifen!';
}

?>
 
PHP:
 <?php

$att = $_GET['att_points'];
$def = $GET['def_points'];

if($att >= $def) {
@$moral = $att / $def;
}
else {
@$moral = $def / $att;
}

if($moral <= 20) {
  echo 'Viel Spass beim Kampf!';
}
else {
  echo 'Lass den Boon leben - du darfst nicht angreifen!';
}

?>
Funktioniert nicht!
Was ist Falsch?
 
Gegenfrage: Was läuft falsch?

Netiquette 15, Regeln fürs PHP Board Abschnitt a, b, c

Ich werfe mal meine Glaskugel an und prophezeie folgenden Dialog :D
Du: Es wird das Falsche angezeigt
Ich: Welchen Wert hat $moral?
Du: Weis ich nicht.
Ich: Gib ihn mit echo aus.
Du: Wie?
Ich: "echo $moral" vor die if.
Du: Da kommt nichts.
Ich: Mach mal "var_dump($att, $def);"
Du: 123 NULL
Ich Dacht ich mir weil du ein @ vor die Berechnung gemacht hast. Da kam bestimmt eine Fehlermeldung mit "division by zero" oder?
Du: Ja. Was ist falsch?
Ich: Naja. Division by zero heißt, dass $def kein Wert enthält oder 0 ist.
Du: Warum?
Ich: Du holst die Werte aus der Adresse: "foo.php?att_points=123&def_points456", wenn da nichts steht dann sind beide automatisch 0 / NULL
Du: Aber die habe ich angegeben.
Ich: $def wird trotzdem leer sein. Da steht ja $GET und nicht $_GET.
Du: Ja, stimmt. Jetz gehts.
Ich: Immer schön aufpassen bei Code den man einfach so kopiert.

Diese Abfolge sollte in deinem Kopf immer vorgehen bei der Fehlersuche. Ein innerer Monolog, der auf der einen Seite die Stellung vom PC einnimmt und auf der anderen Seite den Programmierer und Schritt für Schritt den Code durchgeht.

Wenn du mal wieder eine Fehlermeldung hast und die Übersetzung ins Deutsche dir immer noch nichts sagt dann schau hier mal nach: http://www.php-fehlermeldungen.de/topicmenu1/index0.html
Da sind einige erklärt.
 
Zuletzt bearbeitet:
Ich habe ihn etwas abgeändert jetzt funktioniert er auch mein code sieht gerade so aus:
(Komplett)

PHP:
 <?php

$att = $_GET['att_points'];
$def = $_GET['def_points'];


if($att >= $def)
         {
         @$Step1 = $att / $def;
         $Step2 = $Step1 * 3 ;
         $moralatt = $Step2 *10  ;

         }
                 else {

            @$Step1 = $def / $att;
         $Step2 = $Step1 * 3 ;
         $moraldef = $Step2*10  ;

         }

         if($moralatt >= 20 and $moralatt < 100 or $moraldef >= 20 and $moraldef < 100) {
          echo "Du darfst angreifen!<br><bR>";


         }

         else
         {
         echo 'Lass den Boon leben - du darfst nicht angreifen!';

         }


?>


und etwas weiter unten...

PHP:
<?php
if($att >= $def)
         {

         echo "Die Moral ist $moralatt" ;
         }
                 else {

         echo "Die Moral ist $moraldef";
         }


?>
 
Wow. Das ging ganz ehrlich ja richtig gut und der Code sieht auch schon schön aus.
Vor allem die Rechenschritte erst mal aufzusplitten war eine gute Idee.
Wenn du jetzt noch Kommentare zu deinem Code hinzufügs dann ist der ganz nah an Perfekt geformt ;)
 
Zurück