3 Werte unter Bestimmten Umständen ändern

    • WBB 3.1.x

      3 Werte unter Bestimmten Umständen ändern

      Hallo zusammen,
      ich stehe gerade vor einer kleinen Herausforderung, über die ich mir Gedanken gemacht habe, aber zu dem Schluss gekommen bin, dass es so nicht funktioniert.

      Und zwar möchte ich, dass sich bestimmte Werte unter bestimmten Bedingungen ändern. Und das jedes mal aufs neue.
      Da es hier um eine Spielwährung geht, verdeutliche ich das direkt damit.

      Gold | Silber | Bronze
      0 | 0 | 0
      0 | 0 | 100

      Jetzt soll jedes mal, wenn Bronze den Wert 100 erreicht, Silber um 1 Steigen und Bronce wieder auf 0 abfallen.
      Das an sich bekomm ich hin, allerdings soll das jetzt jedes mal geschehen, wenn die 100 erreicht wird. Da ich mich noch nie mit variabler Mathematik in PHP beschäftigt habe ist das ne ziemliche Nuss für mich.
      Außerdem soll jedes mal, wenn der Broncewert unter 0 Fällt von Silber eins abgezogen werden.

      Ist sowas überhaupt realisierbar??
      Mit freundlichen Grüßen
      Sebastian S.

      Die hab ich allerdings, wenn genau der Wert 100 erreicht wird, wird das leider nicht umgesetzt.
      Und das auch nur, wenn das mit 2 verschiedenen Einzahlungen erreiche.

      PHP Source Code

      1. if($this->accBalanceBronce >= 100 || $this->accBalanceBronce == 100) {
      2. $this->accBalanceSilver = $this->accBalanceSilver + 1;
      3. $this->accBalanceBronce = $this->accBalanceBronce - 100;
      4. }
      Mit freundlichen Grüßen
      Sebastian S.

      Wie meinst du das jetzt? Es wird als Zahl gespeichert, aber ich möchte dem System aus dem Spiel so nach wie möglich kommen, dafür ist eine Umrechnung einfach nötig.
      Gibt es ne Möglichkeit, die if-Abfragen solange zu wiederholen, bis die Bedingung nicht mehr erfüllt wird?
      Mit freundlichen Grüßen
      Sebastian S.

      Post was edited 1 time, last by “Sebastian S.” ().

      warum so kompliziert - zähle doch einfach nur die Cent in einer Variable $money, und dann

      PHP Source Code

      1. $money = intval($money);
      2. $bronze = $money % 100;
      3. $silber = (($money - $bronze) / 100) % 100;
      4. $gold = ($money - ($money % 10000)) / 10000;

      bin auf die Schnelle nicht auf 'ne vernünftige div-Funktion gekommen ;)
      Der Kopf ist rund, damit das Denken die Richtung wechseln kann (Francis Picabia)
      es gibt keine variable money, es gibt auch keine centbeträge. Hier gehts um virtuelle Währung.

      100 Bronze = 1 Silber
      100 Silber = 1 Gold

      Wenn bronze = 100 oder höher soll silber um 1 erhöht und bronze so lange um 100 reduziert werden, bis es unter 100 ist.
      Hab in Erfahrung gebracht, dass das auch nur auftritt, wenn silber schon größer 0 ist.

      Darstellungsseite

      PHP Source Code

      1. if($this->accBalanceBronce >= 100 || $this->accBalanceBronce == 100) {
      2. $this->accBalanceSilver = $this->accBalanceSilver + 1;
      3. $this->accBalanceBronce = $this->accBalanceBronce -100;
      4. }
      5. if($this->accBalanceSilver >= 100 || $this->accBalanceSilver == 100) {
      6. $this->accBalanceGold = $this->accBalanceGold + 1;
      7. $this->accBalanceSilver = $this->accBalanceSilver - 100;
      8. }


      Formular

      PHP Source Code

      1. if($this->bronce >= 100) {
      2. $this->silver = $this->silver + 1;
      3. $this->bronce = $this->bronce - 100;
      4. }
      5. if($this->silver >= 100) {
      6. $this->gold = $this->gold + 1;
      7. $this->silver = $this->silver - 100;
      8. }
      Mit freundlichen Grüßen
      Sebastian S.

      Post was edited 3 times, last by “Sebastian S.” ().

      hmm, ich bin trotzdem hartnäckig ;)
      es lohnt sich schon, eine virtuelle Variable einzuführen - du kommst damit weg von if-Bedingungen (die wahrscheinlich sogar besser while()-Schleifen sein sollten)

      PHP Source Code

      1. <?php
      2. // bof test
      3. // nur Init der Glanzwährung für Test
      4. $bronze = -2;
      5. $silber = -2;
      6. $gold = 2;
      7. echo "<p>bronze=".$bronze."</p>";
      8. echo "<p>silber=".$silber."</p>";
      9. echo "<p>gold=".$gold."</p>";
      10. // eof test
      11. // in virtuelle Cent transferieren
      12. $cent = (10000*$gold) + (100 * $silber) + $bronze;
      13. echo "<p>".$cent."</p>";
      14. // zurück in Glanzwährung
      15. $bronze = $cent % 100;
      16. $silber = (($cent - $bronze) / 100) % 100;
      17. $gold = ($cent - ($silber * 100) - $bronze) / 10000;
      18. echo "<p>bronze=".$bronze."</p>";
      19. echo "<p>silber=".$silber."</p>";
      20. echo "<p>gold=".$gold."</p>";
      21. ?>


      mit bronze=-2, silber=-2 und gold=2 kommt dann bronze=98, silber=97 und gold=1,
      mit bronze=102, silber=99 und gold=2 kommt dann bronze=2, silber=0 und gold=3 heraus...

      keine if()-Bedingungen oder while()-Schleifen - einfache Mathematik ;)
      Der Kopf ist rund, damit das Denken die Richtung wechseln kann (Francis Picabia)
      Eine while-schleife hab ich ausprobiert, komischerweiße ist die nie gestoppt.
      Dein Besipiel verstehe ich, aber das umzusetzen ist mir jetzt echt zu viel. Da muss ich über Vererbungen springen usw.

      Außerdem ist das allgemein PHP und nicht OOP.

      Eingefallen ist mir nun folgendes:
      Wenn Bronze aus der Datenbankabfrage mehr als 200 ergibt kann die if-Abfrage ja maximal einmal die 100 umwandeln, da mehr ja nicht gemacht werden soll. Also müsste ich theoretisch schon bei der Abfrage eine while-schleife einfügen, oder?



      Bzw. könnte jemand den Fehler der Schleife Prüfen?

      PHP Source Code

      1. while(!$this->accBalanceBronce <= 100) {
      2. $this->accBalanceSilver = $accBalanceSilver + 1;
      3. $this->accBalanceBronce = $accBalanceBronze - 100;
      4. }
      Mit freundlichen Grüßen
      Sebastian S.

      Post was edited 1 time, last by “Sebastian S.” ().

      Deine If()-Bedingungen sind ja nun auch nicht gerade OOP, und ob du die Werte nun in einer if()-Bedingung veränderst oder in 4 Zeilen mit ein paar Rechenfunktionen ist unerheblich - wenn das eine funktionert, funktioniert das andere auch..
      Ob die Variable jetzt $bronze oder $this->accBalanceBronce heißt ist letztendlich ebenfalls völlig egal ;)

      Und: mit den beschrieben 4 Zeilen brauchst du keine weiteren if()-Bedingungen um andersherum zurück zu rechnen
      Der Kopf ist rund, damit das Denken die Richtung wechseln kann (Francis Picabia)