Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Rechner | Hilfe bei realisierung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Rechner | Hilfe bei realisierung

    Hallo Leute,

    Ich sitze gerade an einem, mehr oder weniger, kleinem Rechner dran.
    Dieser beinhaltet fünf Faktoren. Den Startrang, den Zielrang, die Seltenheit, die Energiekosten und die Energie des Items zum fusionieren.

    Der Startrang reicht von 0>9, der Zielrang von 1>10, die Seltenheit von 1>3.

    Mein Problem ist nun die Berechnung der Energiekosten.
    Jeder Rang braucht das doppelte an Energie vom vorigen Rang, sprich von 0>1 benötigt es 4, von 1>2 benötigt es 8, von 2>3 benötigt es 16.

    Wenn man nun von 0>3 aufstufen will werden die obigen Werte addiert und man benötigt 28 Energie.

    Die Energie des Items beträgt 36, sprich um die Anzahl der benötigten Items zu ermitteln würde die Rechnung so aussehen Energiekosten/36.

    Jedoch komme ich auf keinen vernünftigen Weg die Energiekosten zu speichern bzw. zu ermitteln.

    Hat jemand von euch eine Idee?

    Mit freundlichem Gruß,
    Kazuto

    ~EDIT~
    Mir fiel gerade auf das jeder Rang ein Faktor von 2 ist.
    Rang 1 braucht 2^2, Rang 2 braucht 2^3, Rang 3 braucht 2^4.
    Die Formel zum berechnen der Energiekosten auf Seltenheit 1 von Rang 0 zu Rang 10 aus könnte also wie folgt aussehen: 2^(Zielrang+1)/36
    Und von z.B. Rang 9 auf Rang 10 müsste es dann so aussehen: (2^(Zielrang+1)-2^(Startrang+1))/36

    Bei Seltenheit 2 werden die Energiekosten verdoppelt und bei Seltenheit 3 verdreifacht.


  • #2
    (2 hoch neue Stufe) * 2

    PHP-Code:
    pow2$newLevel ) * 
    für mehr Stufensprünge dementsprechend die Zwischenschritte mitberechnen

    Kommentar


    • #3
      Vielen Dank für deine Hilfe.
      Das mit dem *2 ist wesentlich angenehmer als 2^(Rank+1)

      Mein Code sieht derzeit so aus:
      PHP-Code:
      <?php
                
      if (isset($_POST["calc"]))
                {
              
      $_sRank $_POST['startrank'];
              
      $_tRank $_POST['targetrank'];
              
      $_mRarity $_POST['rarity'];
              
      $_sEnergy pow (2$_sRank) * 2;
              
      $_tEnergy pow (2$_tRank) * 2;
              
              echo 
      $_sEnergy' '$_tEnergy;

              }
          
      ?>
      Wie kann ich denn die Zwischenschritte mitberechnen?

      Ich kenne mich mit PHP nicht wirklich aus und habe es mit Mühe und Not geschafft eine kleine dynamische Signatur mit API zu schreiben

      Kommentar


      • #4
        Rangsysteme und dessen assoziierte Kosten sind irgendwo Konfigurationen, ich würde diese auch als solche Behandeln. Falls du irgendwann hingehst und die Ränge variieren willst bist du so flexibler:

        PHP-Code:
        <?php

        $energyRangCosts 
        = array(
            
        => 4,
            
        => 8,
            
        => 16,
            
        => 32,
            
        => 64,
            
        => 128,
            
        => 256,
            
        => 512,
            
        => 1024,
            
        => 2048,
        );

        $inboundStartRank 0;
        $inboundTargetRank 3;

        $energyCosts array_sum(
            
        array_slice(
                
        $energyRangCosts
                
        $inboundStartRank
                
        $inboundTargetRank
            
        )
        );

        var_dump($energyCosts);
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Vielen Dank für die Hilfe tr0y.
          Es funktioniert nun soweit ganz gut, lediglich eine Abfrage nach der Seltenheit muss ich noch machen und dann ggf. die Energiekosten duplizieren oder verdreifachen.

          ~EDIT~

          Ich habe es gelöst
          Zwar etwas umständlich aber es funktioniert.

          PHP-Code:
          <?php
          $cRangCosts 
          = array(
                  
          => 4,
                  
          => 8,
                  
          => 16,
                  
          => 32,
                  
          => 64,
                  
          => 128,
                  
          => 256,
                  
          => 512,
                  
          => 1024,
                  
          => 2048,
          );

          $uRangCosts = array(
                  
          => 8,
                  
          => 16,
                  
          => 32,
                  
          => 64,
                  
          => 128,
                  
          => 256,
                  
          => 512,
                  
          => 1024,
                  
          => 2048,
                  
          => 4096,
          );
          $rRangCosts = array(
                  
          => 12,
                  
          => 24,
                  
          => 48,
                  
          => 96,
                  
          => 192,
                  
          => 384,
                  
          => 768,
                  
          => 1536,
                  
          => 3072,
                  
          => 6144,
          );
                    
          if (isset(
          $_POST["calc"]))
              {
                  
          $_sRank $_POST['startrank'];
                  
          $_tRank $_POST['targetrank'];
                  
          $_mRarity $_POST['rarity'];
                  if (
          $_mRarity == 1)
                  {
                      
          $energyRangCosts $cRangCosts;
                      }
                  if (
          $_mRarity == 2)
                  {
                      
          $energyRangCosts $uRangCosts;
                      }
                  if (
          $_mRarity == 3)
                  {
                      
          $energyRangCosts $rRangCosts;
                      }
                  
          $energyCosts array_sum(
                      
          array_slice(
                      
          $energyRangCosts
                        
          $_sRank
                      
          $_tRank));
              }
              
          ?>
          Wenn einer eine besseren Weg kennt könnt ihr ihn mir gerne verraten

          Kommentar


          • #6
            Nutze doch einfach ein mehrdimensionales Array, dann kannst du direkt mit $_mRarity rechnen. Außerdem würde ich noch einige Prüfungen bevorzugen, momentan könnte man als Rarität auch 4 übergebe und damit komische Ergebnisse bekommen.
            mysql ist veraltet Mails senden: Ohne Probleme und ohne mail()
            PHP-Code:
            echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>'

            Kommentar


            • #7
              Vielen Dank für deinen Tipp.
              Da der Rechner derzeit nur für engere Bekannte gemacht ist, denke ich nicht dass es zu einem Sicherheitsrisiko kommen könnte.
              Zumal wird ja nichts in eine Datenbank geschrieben :3

              Mit mehrdimensionalen Arrays werde ich mich mal auseinander setzen ^^

              Kommentar


              • #8
                Was ChrisvA meint ist sowas hier:

                PHP-Code:
                <?php

                $energyRankCostsByRarity 
                = array(

                    
                /** rarity => energy level array */

                    
                => array(

                        
                /** level => next level up costs */

                        
                => 4,
                        
                => 8,
                        
                => 16,
                        
                => 32,
                        
                => 64,
                        
                => 128,
                        
                => 256,
                        
                => 512,
                        
                => 1024,
                        
                => 2048,

                    ),
                    
                    
                => array(

                        
                /** level => next level up costs */

                        
                => 8,
                        
                => 16,
                        
                => 32,
                        
                => 64,
                        
                => 128,
                        
                => 256,
                        
                => 512,
                        
                => 1024,
                        
                => 2048,
                        
                => 4096,

                    ),

                    
                => array(

                        
                /** level => next level up costs */

                        
                => 12,
                        
                => 24,
                        
                => 48,
                        
                => 96,
                        
                => 192,
                        
                => 384,
                        
                => 768,
                        
                => 1536,
                        
                => 3072,
                        
                => 6144,

                    ),

                );

                $inboundStartRank 0;
                $inboundTargetRank 3;
                $rarity 2;

                $energyCosts array_sum(
                    
                array_slice(
                        
                $energyRankCostsByRarity[$rarity], 
                        
                $inboundStartRank
                        
                $inboundTargetRank
                    
                )
                );

                var_dump($energyCosts);
                [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                Kommentar


                • #9
                  Oh, vielen Dank tr0y ^^

                  Ich denke damit wäre das Thema dann geklärt.
                  Vielen Dank für eure Hilfe

                  Kommentar


                  • #10
                    Mir ist gerade ein Fehler aufgefallen und zwar berechnet er zwar den richtigen Wert für Rang 0 > Rang Y, wenn jedoch Rang 0 nicht 0 ist, berechnet er den Wert nicht richtig.

                    Er addiert nicht die Energie der vorigen Ränge und subtrahiert diese von der Gesamtanzahl sondern subtrahiert lediglich den Wert des Ranges.

                    Bsp.: Seltenheit 1 Rang 2 auf Rang 4 wäre normalerweise 60-12. In diesem Fall ist es jedoch 60-8, da Rang 1 (4 Energie) nicht zum aktuellen Rang addiert wird.

                    Mein Code sieht derzeit so aus:
                    PHP-Code:
                    <?php
                    $energyRankCostsByRarity 
                    = array(

                        
                    /** rarity => energy level array */

                        
                    => array(

                            
                    /** level => next level up costs */

                            
                    => 4,
                            
                    => 8,
                            
                    => 16,
                            
                    => 32,
                            
                    => 64,
                            
                    => 128,
                            
                    => 256,
                            
                    => 512,
                            
                    => 1024,
                            
                    => 2048,

                        ),
                        
                        
                    => array(

                            
                    /** level => next level up costs */

                            
                    => 8,
                            
                    => 16,
                            
                    => 32,
                            
                    => 64,
                            
                    => 128,
                            
                    => 256,
                            
                    => 512,
                            
                    => 1024,
                            
                    => 2048,
                            
                    => 4096,

                        ),

                        
                    => array(

                            
                    /** level => next level up costs */

                            
                    => 12,
                            
                    => 24,
                            
                    => 48,
                            
                    => 96,
                            
                    => 192,
                            
                    => 384,
                            
                    => 768,
                            
                    => 1536,
                            
                    => 3072,
                            
                    => 6144,

                        ),

                    );
                              
                    if (isset(
                    $_POST["calc"]))
                        {
                            
                    $_sRank $_POST['startrank'];
                            
                    $_tRank $_POST['targetrank'];
                            
                    $_mRarity $_POST['rarity'];
                            
                    $energyCosts array_sum(
                                
                    array_slice(
                                
                    $energyRankCostsByRarity[$_mRarity], 
                                  
                    $_sRank
                                
                    $_tRank));
                        }
                        
                    /** Common Fusion **/
                        
                    $cR1Core ceil($energyCosts/3.1);
                        
                    $cR2Core ceil($energyCosts/4.1);
                        
                    $cR3Core ceil($energyCosts/5.9);
                        
                    $cPMod ceil($energyCosts/2);
                        
                    $cUMod ceil($energyCosts/1);
                        
                        
                    /** Uncommon Fusion **/
                        
                    $uR0Core ceil($energyCosts/4);
                        
                    $uR5Core ceil($energyCosts/19);
                        
                    $uPMod ceil($energyCosts/4);
                        
                    $uUMod ceil($energyCosts/2);
                        
                        
                    /** Rare Fusion **/
                        
                    $rR0Core ceil($energyCosts/6);
                        
                    $rR5Core ceil($energyCosts/36);
                        
                    $rPMod ceil($energyCosts/6);
                        
                    $rUMod ceil($energyCosts/3);
                        
                        
                    /** Duplicate **/
                        
                    $dRarity $_mRarity;
                        
                    $dMod ceil($energyCosts/$dRarity);
                        
                    $rCredits 300 $_mRarity;
                        
                    $dCredits number_format($dMod $rCredits);
                        
                        
                    /** Common Credits **/
                        
                    $cR1Credits number_format($cR1Core 450);
                        
                    $cR2Credits number_format($cR2Core 600);
                        
                    $cR3Credits number_format($cR3Core 750);
                        
                    $cPCredits number_format($cPMod 300);
                        
                    $cUCredits number_format($cUMod 300);
                        
                        
                    /** Uncommon Credits **/
                        
                    $uR0Credits number_format($uR0Core 600);
                        
                    $uR5Credits number_format($uR5Core 2100);
                        
                    $uPCredits number_format($uPMod 600);
                        
                    $uUCredits number_format($uUMod 600);
                        
                        
                    /** Rare Credits **/
                        
                    $rR0Credits number_format($rR0Core 900);
                        
                    $rR5Credits number_format($rR5Core 3150);
                        
                    $rPCredits number_format($rPMod 900);
                        
                    $rUCredits number_format($rUMod 900);
                        
                        
                    ?>
                    ~EDIT~
                    Ich schaffe es zwar die gesamte Energie zu berechnen, jedoch mag array_splice mich nicht und will die Werte im Array nach dem Rang nicht entfernen.

                    PHP-Code:
                    $rangEnergy array_sum(
                                
                    array_splice(
                                
                    $energyRankCostsByRarity[$_mRarity],$_sRank)); 
                    Ich habe extra ein echo zum ausgeben des Wertes, leider gibt es den gesamten Wert an und entfernt somit die Werte nach dem Rang nicht.

                    Kommentar


                    • #11
                      Der dritte [man]array_slice[/man] Parameter ist eine Anzahl, keine Position.
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar


                      • #12
                        Von Rang 0 auf Rang 10 funktioniert ja auch alles, sprich er summiert alle Werte im Array und dividiert sie durch die Energie der Gegenstände.

                        Ich habe versucht mit array_sum und array_splice die Werte nach dem Rang im Array zu entfernen und zu summieren, jedoch entfernt er diese nicht und summiert alle Werte im Array.

                        PHP-Code:
                        $rangEnergy array_sum(
                                    
                        array_splice(
                                    
                        $energyRankCostsByRarity[$_mRarity],$_sRank)); 

                        Kommentar


                        • #13
                          array_slice nicht array_splice.
                          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                          Kommentar


                          • #14
                            Ich habe es jetzt folgendermaßen gelöst:

                            PHP-Code:
                            $sEnergy array_sum(
                                    
                            array_slice(
                                    
                            $energyRankCostsByRarity[$_mRarity],0$_sRank));
                            $tEnergy array_sum(
                                    
                            array_slice(
                                    
                            $energyRankCostsByRarity[$_mRarity],0$_tRank));
                            $energyCosts $tEnergy $sEnergy
                            Es funktioniert, nur weiß ich nicht ob es die effizienteste Methode ist

                            Kommentar


                            • #15
                              tr0y hat doch bereits geschrieben, wo der Fehler liegt....

                              PHP-Code:
                                      $energyCosts array_sum(
                                          
                              array_slice(
                                          
                              $energyRankCostsByRarity[$_mRarity], 
                                            
                              $_sRank
                                          
                              $_tRank $_sRank)); 

                              Kommentar

                              Lädt...
                              X