do Schleife wird nicht richtig durchlaufen
-
Da ich gerade versuche meine 100000 Gotos durch eine Schleife zu ersetzen um auf die Vorschläge von vielen anderen einzugehen, fang ich gerade bei der simulierten Ki für mein kleines Konsolenbasiertes Strategiespiel an...
Vorher mit Gotos hat alles funktioniert.Mein Problem jetzt, die Schleife wird beendet obwohl ihr Ziel nicht erfüllt ist.
Ich habe bestimmt was vergessen, aber ich komm nicht drauf.
Jedenfall funktionierst, solange bis case:1 in frage kommt.Hier nun der Code:
int main() { do { for (gegHolz = 1; gegHolz < gegEnde; gegHolz++); clrscr(); cout << "___________________" << endl; cout << "Holzproducktion: " << gegHolz << endl; cout << "Holzreserven: " << gegHolzspeicher << endl; cout << "Erzproducktion: " << gegErz << endl; cout << "Erzreserven: " << gegErzspeicher << endl; cout << "___________________" << endl; gegHolzspeicher = gegHolzspeicher + gegHolz; gegErzspeicher = gegErzspeicher + gegErz; cout << "" << endl; cout << "" << endl; cout << "Holzfaeller: " << gegHolzfaeller << " Haueser: " << gegHaus << " Minen: " << gegMine << endl; cout << "Kaserne: " << gegKaserne << " Werkstatt: " << gegWerkstatt << endl; cout << "Soldaten: " << gegSoldaten << endl; if (gegMine >= 1) { for (gegErz = 1; gegErz < gegErzende; gegErz++); } //KI errechnet einen Wert von 1-6 //srand((unsigned int)time(0)); int Entscheidung = rand() % (1 + 1 + 1 + 1 + 1 + 1 + 1)+ 1; cout << Entscheidung; Sleep(20); if (Entscheidung == 1) { if (gegHolzspeicher >= 100) { cout << "Holzfaeller wird gebaut!" << endl; gegHolzfaeller = gegHolzfaeller + 1; gegHolzspeicher = gegHolzspeicher - 100; gegEnde = gegEnde + 100; Sleep(200); break; } } if (Entscheidung == 2) { if (gegHolzspeicher >= 500) { cout << "Haus wird gebaut!" << endl; gegHaus = gegHaus + 1; gegHolzspeicher = gegHolzspeicher - 500; gegSoldatenlimit = gegSoldatenlimit + 200; //GegSoldatenlimit muss hier noch hin! Sleep(200); break; } } if (Entscheidung == 3) { if (gegHolzspeicher >= 1000) { cout << "Mine wird gebaut!" << endl; gegMine = gegMine + 1; gegHolzspeicher = gegHolzspeicher - 1000; gegErzende = gegErzende + 100; Sleep(200); break; } } if (Entscheidung == 4) { if (gegHolzspeicher >= 10000) { if (gegErzspeicher >= 5000) { cout << "Kaserne wird gebaut!" << endl; gegKaserne = gegKaserne + 1; gegHolzspeicher = gegHolzspeicher - 10000; gegErzspeicher = gegErzspeicher - 5000; Sleep(200); break; } } } if (Entscheidung == 5) { if (gegHolzspeicher >= 50000) { if (gegErzspeicher >= 35000) { cout << "Werkstatt wird gebaut!" << endl; gegWerkstatt = gegWerkstatt + 1; gegHolzspeicher = gegHolzspeicher - 50000; gegErzspeicher = gegErzspeicher - 35000; Sleep(200); break; } } } if (Entscheidung == 6) { if (gegKaserne >= 1) { if (gegHaus >= 1) { if (gegHolzspeicher >= 1000) { if (gegSoldaten <= gegSoldatenlimit) { cout << "Soldaten werden produziert!" << endl; gegSoldaten = gegSoldaten + 100; gegHolzspeicher = gegHolzspeicher - 1000; Sleep(200); break; } } } } } Sleep(20); clrscr(); } while (1 < 100000); }
aber dannach sollte sie wieder durchlaufen werden.
Solang keine case zutrifft funzt es.mfg
Last-Boyscout
-
Mit break springst du aus der Schleife raus.
-
MFK schrieb:
Mit break springst du aus der Schleife raus.
Das erklärt einiges, aber wie springe ich da wieder rein ohne Goto?
Mir wurde gesagt das ich das ohne Goto mit ner Schleife lösen soll, siehe Thread switch case...Soll ich irgendwie return stattdessen benutzen oder was gibbet da, ich muss auf jedenfall wieder zurück an den Anfang.
Schonmal thx dafür.
mfg
Last-Boyscout
-
Das geht doch von ganz allein, dafür hast du doch die Schleife.
Wenn du unbedingt willst, kannst du mit continue direkt zum nächsten Schleifendurchlauf gelangen. Aber das brauchst du hier nicht mal. Nimm die breaks raus und gut ist.
Und deine Hochzählschleifen kannst du durch einfache Zuweisungen ersetzen.
-
Lass die Schleife von allein auslaufen
-
Ich war einmal mehr zu langsam
-
Ich seh den Wald vor lauter Bäumen nicht mehr!^^
Danke für eure Hilfe, troz dieser dummen Frage!
mfg
Last-Boyscout
-
Btw, eine Endlosschleife kannst du auch einfach mit
while (true)
erzeugen. Dafür brauchst du nicht den Vergleich.
Manche Compiler mögen auch lieber
for (;;)
-
Wie wäre es denn mal mit einem Buch über C++ oder zumindest einem guten Tutorial? Ich glaube nicht, dass es Sinn macht, ein Strategiespiel mit C++ programmieren zu wollen, ohne wengistens mit den absoluten Grundkonstrukten (und so viele sind es nun wirklich nicht) umgehen zu können...
Nichtsdestotrotz weitherhin viel Erfolg!