mmofacts.com

Nur erste if-Abfrage geht ?!?

gepostet vor 18 Jahre, 6 Monate von Kelturio
Soa, habe nun eine Funktion, welche nach dem bau eines Gebäudes dessen neuen Kosten berechnen soll. Baue ich die Goldmine aus, funzt alles wunderbar und die Kosten werden für die nächste Stufe erhöht, aber baue ich ein anderes Gebäude wie z.b. Saegewerk, dann werden keine Kosten erhöht - so als ob diese if-Abfragen einfach übersprungen werden.

Was habe ich falsch gemacht ?

 

$Stufe = $Stufe[$Gebaeudetyp];
$Stufe++;
if ($Gebaeudetyp == "Goldmine") {
$Gold = $Gebaeudekosten["Goldmine_Gold"] * pow(1.5, $Stufe - 1);
$Holz = $Gebaeudekosten["Goldmine_Holz"] * pow(1.5, $Stufe - 1);
$Steine = $Gebaeudekosten["Goldmine_Steine"] * pow(1.5, $Stufe - 1);
$Erz = $Gebaeudekosten["Goldmine_Erz"] * pow(1.5, $Stufe - 1);
$Nahrung = $Gebaeudekosten["Goldmine_Nahrung"] * pow(1.5, $Stufe - 1);
}
if ($Gebaeudetyp == "Saegewerk") {
$Gold = $Gebaeudekosten["Saegewerk_Gold"] * pow(1.6, $Stufe - 1);
$Holz = $Gebaeudekosten["Saegewerk_Holz"] * pow(1.6, $Stufe - 1);
$Steine = $Gebaeudekosten["Saegewerk_Steine"] * pow(1.6, $Stufe - 1);
$Erz = $Gebaeudekosten["Saegewerk_Erz"] * pow(1.6, $Stufe - 1);
$Nahrung = $Gebaeudekosten["Saegewerk_Nahrung"] * pow(1.6, $Stufe - 1);
}
gepostet vor 18 Jahre, 6 Monate von Mudder
Vorweg mal.. du solltest bei Variablen keine Gross/Kleinschreibung machen. Und solche Wechsel-Ifs, wie du sie nun verwedest, solltest du am besten auch gegen switch() tauschen.

Zu deiner Frage: Pack mal ein echo "Test"; in die Saegewerk-Anweisung um zu schauen ob sie nun aufgerufen wird oder nicht. Wird sie aufgerufen dann ist dein Update fehlerhaft und wenn sie nicht aufgerufen wird dann geb davor mal echo $Gebaeudetyp; aus um zu schauen was wirklich übergeben wird.
gepostet vor 18 Jahre, 6 Monate von woodworker
sehe auf den ersten blick nix warum es nciht gehen sollte

aber $Stufe++;
und dann überall $stufe-1 ist das nicht etwas dumm?
gepostet vor 18 Jahre, 6 Monate von Kelturio
Soa, habe es nun hin bekommen.
Das Problem lag darin, dass wenn Gebäudestufe 0 vorherrscht, dass dann hinten bei Stufe - 1 gleich 0 rauskommt und somit bleiben die Kosten bei der ersten zur zweiten Gebäudestufe stehen.
Habe deshalb eine Kontrollstruktur mit eingebaut, dass wenn Stufe auf 0 ist +2 gerechnet werden soll und andernfalls eben +1. :wink:

@Mudder:
Wieso sollte man bei Variablen keine Groß-/Kleinschreibung machen ?
Ich weiß, dass so die Gefahr größer ist, dass man mal etwas klein schreibt, was groß geschrieben werden müsste und dann gibt es einen Fehler, aber ich finde es geht schon so. Ist für mich eben etwas stilvoller, wenn man es so sagen kann.
gepostet vor 18 Jahre, 6 Monate von Macavity
ob ein switch sinnvoll ist weiß ich nicht aber ein elseif würde sicher sinn machen...ich mein man wird ja nicht beides gleichzeitig bauen oder? zumindest nicht in einem befehl.

ansonsten würde ich mal schaun ob du vielleicht statt saegewerk sägewerk in der variable stehen hast.
gepostet vor 18 Jahre, 6 Monate von Kelturio
Naja, dass mit dem ae und ä ist ja letzten Endes auch egal. Hat sich bei mir irgendwie so eingebürgert, dass ich bei Variablen etc. keine Sonderzeichen verwende wie ä, ü, ö usw. :wink:
gepostet vor 18 Jahre, 6 Monate von Mudder
@Kelturio
Das mit den Variablen hat "einfach" nur einen Ordnungzweck. Natürlich kann man Gross/Kleinschreibung mischen und es funktioniert genauso. Wenn du von vorn herein an sowas gewöhnt bist, dann wirst du da sicher auch keine Probleme mit haben aber wenn du Code an 3. weiter gibst dann werden die erstmal etwas verwundert schauen was denn das für nen Zeugs ist. (und spätestens bei beruflichen Projekten sollte man soetwas lassen).

Und Umlaute haben in Variablen eigentlich noch weniger zu suchen als Gross/Kleinschreibung.
gepostet vor 18 Jahre, 6 Monate von Magic007
oder du benutzt einfach die Kamel schreibweiste sprich statt
Meine_Funktion
myFunction

die bevorzuge ich erlich gesagt...
vor allem bei funktionen/methoden und klassen aber bei variablen/eigenschaften irgendwie auch ...

ausserdem würde ich zur besseren ÜBersicht statt

if ($Gebaeudetyp == "Goldmine")

if ("Goldmine" == $Gebaudetyp)

ist übersichtlicher ...
gepostet vor 18 Jahre, 6 Monate von Sarge
Original von Magic007
ausserdem würde ich zur besseren ÜBersicht statt

if ($Gebaeudetyp == "Goldmine")

if ("Goldmine" == $Gebaudetyp)

ist übersichtlicher ...


Naja das würd ich nun absolut nicht sagen, hab ich auch so noch quasi nie gesehen.
Da siegt die Gewohnheit würd ich sagen, da man es auch sorum im Kopf liest normalerweise.
Wenn der Gebäudetyp eine Goldmine ist.. oder Wenn die goldmine der Gebäudetyp ist...
Klar logisch macht es nichts aus...

Aber umlaute sollte man auf keinen fall in variablen/funktionen namen nutzen...
gepostet vor 18 Jahre, 6 Monate von Mudder
Da muss ich Sarge zustimmen..
Das ist zwar wirklich nur nen "Popelkram", aber ich habe das ("Name" == $variable) auch noch nich vorher gesehen..
gepostet vor 18 Jahre, 6 Monate von Fornax
Ich habe es schon gesehen. Ich finde, da blick man im Code nicht durch. Man denkt im Kopf ja, ob das Geäude eine Mine ist. Und nicht "Ich habe eine Mine, und gucke, ob sie evtl. jmd bauen will".

elseif würde ich auch empfehlen, erstens wird es übersichtlicher (finde ich) und zweitens ist es performanter, da nicht bei jedem Gebäudetyp überprüft wird, ob es der ist. Wenn man also das erste baut, muss mit elseif nicht geguckt werden, ob das gebaut wird.

Variablen und Funktionen schreibe ich immer klein und ohne Sonderzeichen. Stell dir vor, du arbeitest mit einem Außländer, der keine deutsche Tastatur hat zusammen :roll:
gepostet vor 18 Jahre, 6 Monate von Magic007
mh...naja muss jeder selber entscheiden...
aber ich persönlich finde es eigentlich übersichtlicher
gepostet vor 18 Jahre, 6 Monate von TheUndeadable
>Das ist zwar wirklich nur nen "Popelkram", aber ich habe das ("Name" == $variable) auch noch nich vorher gesehen..

Das kommt aus der guten, alten C-Zeit.

Beispiel:

int x = 5;

if ( x == 6 ) -> klar, was passiert.

Folgender Tippfehler:

if ( x = 6 ) -> x bekommt 6, 6 ist ungleich 0 => immer true und x = 6, Programmierer wundert sich, wenn er das fehlende = nicht sofort entdeckt.

if ( 6 = x ) -> Fehler zur Kompilierungszeit => Programmierer wird auf den Fehler aufmerksam
gepostet vor 18 Jahre, 6 Monate von moLTe
Original von TheUndeadable
if ( 6 = x ) -> Fehler zur Kompilierungszeit => Programmierer wird auf den Fehler aufmerksam


Jo das kann einem sehr hilfreich sein, wenn man sich von anderen Programmiersprachen (welche kein "==" kennen, sondern nur mit "=" arbeiten) auf eine C ähnliche umstellt.

mfg
moLTe

Auf diese Diskussion antworten