Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Werteabweichung Mit While-Schleife
#1
Abend,

und zwar geht´s um folgendes.
Ich schreib mir grad meine eigene DSlan(deshalb auch unter Spielerprojekte), da ich nicht genau weiß, wie lang wir hier noch auf die nächste Version warten müssen und außerdem ein bisschen üben wollte.
Jetzt steh ich aber vor einem Problem.
Und zwar sitze ich grad an der Config, zuerst war mein Plan, für jedes einzelne Gebäude und jeden einzelnen Rohstoff einen Wert zu definieren. Das war mir aber zu langweilig, außerdem wusste ich auch nicht, wie sich das auf die Performance auswirkt, wenn ich auf jeder Seite eine 1500 Zeilen lange Config mit 3-dimensionalen Arrays include.
Jetzt hab ich´s mit einer while Schleife probiert.

PHP Code:
$config = array();

$main['wood'] = array();

$config['buildings']['main']['wood'][0] = 90;
$i 1
while ($i <= 30) {
    
$config['buildings']['main']['wood'][$i] = $config['buildings']['main']['wood'][$i-1] * 1.25999415396;
    
settype($config['buildings']['main']['wood'][$i],int);
    
$i++;
}
echo 
$main['wood'][30]; 

Das mit den Arrays war jetzt vielleicht ein bisschen übertrieben, aber na ja Big Grin

Das Problem ist, dass ich dann am Ende Werte hab, die etwa(beim Beispiel) 20.000 Ressis vom tatsächlichen Wert entfernt liegen.

Was wäre also euer Vorschlag, wie soll ich das Problem lösen?
Die Wertabweichung einfach ignorieren oder für jede Stufe einzeln definieren(da hätt ich dann nachher noch das Problem mit Cheatbuden).

MfG,
Benny

PS. Ggf. könnte ich auch an der DSlan 2.0 mitwirken, die Übung hätte ich dann sicherlich auch Smile
Reply
#2
(16.02.2013, 22:13)GoldenEye* Wrote: while ($i <= 30) {
$config['buildings']['main']['wood'][$i] = $config['buildings']['main']['wood'][$i-1] * 1.25999415396;
settype($config['buildings']['main']['wood'][$i],int);

$i++;
}

Hi,

bin zwar noch Programmieranfänger und möchte auch gerne berichtigt werden, wenn ich falsch liege aber:
Du multiplizierst einen Gleitkommawert (double) mit den Gebäudestufen des arrays und versuchst das array anschließend in den Datentyp Integer umzuwandeln.
Dir ist schon bewusst, was dann mit den Nachkommastellen passiert oder? Die werden nämlich einfach abgeschnitten.
Mal als Beispiel:
Holzfäller ist auf Stufe 1. Die Stufe wird mit 1.25999415396 multipliziert.
-> Holzfäller ist auf Stufe 1 mit dem Wert 1.25999415396
Anschließend wird das Array auf Int gesetzt. Folglich:
Holzfäller ist auf Stufe 1 mit dem Wert 1.
Zu dem Faktor kann ich nicht wirklich viel sagen, ob der auch richtig ist.. Gibt im DS Forum da so nen Thread mit paar Formeln zu DS:
http://forum.die-staemme.de/showthread.p...97-Formeln

VG Jonsn
 Du suchst ein Tool? Dann sieh doch mal in meine Toolsammlung!
Reply
#3
Ich glaub du hast das so verstanden, dass ich die Stufe ausrechnen wollte.
Ich will aber von einem Gebäude(main->Hauptgebäude) wissen, wie viel Holz es für die nächste Stufe benötigt.
Diesen Wert hab ich auf einen Integer gesetzt, da ich schlecht 106,7 Holz verbauen kann. Sinnvoller wäre es wahrscheinlich den Teil erst nach der Schleife zu machen, dann wird das Ergebnis etwas genauer. Aber ich komm nicht Mal annähernd an den von Inno 'vorgegebenen' Wert.

Rohstoffkosten eines Gebäudes oder einer Einheit
ROHSTOFF*(ROHSTOFF_FAKTOR^GEBÄUDE_LEVEL)
Das ist die Formel, die ich etwas verkompliziert benutz.

Und das größere Problem ist, dass ich den ROHSTOFF_FAKTOR nicht weiß und auch nicht darauf schließen kann.

Okay, ich hab meinen Fehler selbst gefunden.
Ich hab nicht die 30. Stufe, sondern die 31. Stufe ausgerechnet, darum stimmt´s nicht mit der Wiki überein.

Kann geclosed werden & Sorry für Doppelpost.

Danke dir, Jonsn, für den Link, der wird mir noch helfen Wink
Reply
#4
Nachtrag:
Für alle Werte, die mit Faktoren arbeiten:

PHP Code:
// $baseLevel = Niedrigste Stufe (in der Regel 0 oder 1)
// $base = Wert auf Stufe $baseLevel
// $maxLevel = Höchste Stufe
// $max = Wert auf Stufe $maxLevel
function value($level)
{
    return 
round($base pow($max $base, ($level $baseLevel) / ($maxLevel $baseLevel)));


So kann man die Faktoren weglassen und es wird noch ein bisschen genauer Wink

LG
Molt
Reply




Users browsing this thread: 1 Guest(s)