doppelte Ausgabe ?!?! [beantwortet danke]
-
hallo und sorry das ich euch wieder belästige

ich hab da ein problem das ich einfach nicht wegbekomme.
erst einmal was passieren soll:
zwar komme ich in den wald und da treffe ich auf ein Monster. es wird angezeigt Das da ein Monster ist und das es mich ankreifen will und dann wieviel Hp es hat (wird per zaufall gemacht, genau wie Mein schaden, sowie schaden von monster).
dann kann ich eine von 3 atacken machen die alle im endefeckt das gleiche machen (ich will das so) und bei 4 kann ich weg gehn, also flüchten.
so dann wird angezeigt wieviel HP das Monster noch hat
dann welchen schaden ICH mache
danach wieviel schaden das Monster macht und dann wied meine rest hp ausgerechnet.und dann will ich wieder die atacke wählen#
aber er rechnet mir die zeilen (die dick geschrieben sind) zweimal aus und ich kann auch nicht mehr die atacken wählenich finde den fehler trotz ausgieblicher suche leider nicht

so Hier ein auszug aus den programm
void wald() { char aktion; int zuMIN=33; int zuMAX=66; int zuDIFF = zuMAX-zuMIN; srand((unsigned int)time (0)); int monHP= zuMIN + (rand () %zuDIFF+1); cout<<"OH nein da ist ein Monster es will Dich ankreifen!!\n"; do { cout<< "Das Monster hat "<< monHP<<"Lebenspunkte!!\n"; cout<<"Machen einen Aktion\n"; cout<<"<1>Schlag"<<endl; cout<<"<2>Treten"<<endl; cout<<"<3>Schlag"<<endl; cout<<"<4>Wegrennen"<<endl; cin>>aktion; switch (aktion) { case ('1'): case ('2'): case ('3'): { do { int zuMIN2=7; int zuMAX2=19; int zuDIFF2 = zuMAX2-zuMIN2; int youDMG= zuMIN2 + (rand () %zuDIFF2+1); int zuMIN1=5; int zuMAX1=12; int zuDIFF1 = zuMAX1-zuMIN1; int monDMG= zuMIN1 + (rand () %zuDIFF1+1); cout<<"\nDas Monster hat noch >>>> "<<monHP<<" Lebenspunkte"<<endl; cout<<"Du fuehrst eine Atacke aus, die "<< youDMG<<"schaden macht\n"; monHP=monHP-youDMG; cout<<"Oh Nein jetzt kreift das monster an!\n"; cout<<"und es macht genau "<<monDMG<<" Schaden!\n"; Hp-=monDMG; cout<<"du hast jetzt noch " << Hp <<endl; getchar(); }while (monHP > 1 && Hp > 1); cout << "gewonnen"; getchar(); }break; case ('4'): { cout<<"warum weg?"; getchar(); }break; } }while (aktion != '4' && monHP > 1 && Hp > 1);es ist jetzt nur ein teil wo ich der Meinung bis das es hier liegt
und wenn jetzt das ganze programm posten soll bitte sagendanke ronny
-
Du kannst keine weitere Attacke wählen, weil die innere do/while - Schleife läuft, bis das Monster tot ist (Zeile 55).
-
Warum formatierst du den Quelltext nicht übersichtlich

Und dann der Spaghetti-Code. Geht bei deinem PC keine rote Lampe an, wenn du mehr als 50 Zeilen in eine Funktion packst
Keine Ahnung warum und wo bei deinem Quelltext eine doppelte Ausgabe stattfindet.
MfG f.-th.
-
Die zweite While-Schleife läuft so lange bis monHP und Hp > 1 sind. Wenn dies nicht mehr der Fall ist beendet sich diese Schleife. Danach wird die äussere Schleife fortgesetzt. Bei der existiert ebenfalls die gleiche Bedingung (bis noch auf den Teil mit der Auswahl vom Fall 4). Naja, da die Bedingung jedoch danach nicht mehr erfüllt werden kann (was sich schon dadurch zeigt, da die innere Schleife beendet wurde), beendet sich das Ganze.
Noch was: Angreifen nid Ankreifen...
Mfg
LEARNcpp
-
LEARNcpp schrieb:
Die zweite While-Schleife läuft so lange bis monHP und Hp > 1 sind.
Nein, sie läuft so lange, wie monHP und Hp > 1 sind.
-
Belli schrieb:
LEARNcpp schrieb:
Die zweite While-Schleife läuft so lange bis monHP und Hp > 1 sind.
Nein, sie läuft so lange, wie monHP und Hp > 1 sind.
Ich denke das war verständlich...
Was soll das?
-
Es war verständlich. Es war aber falsch.
-
danke aber ich weiß halt nicht wie ich zeile 36 bis 52 wieder hole und das ich immer eine neue aktion ausführen kann
ich wollte erst eine schleife machen aber mir fällt nicht ein wie ich das machen soll (also die bedingung )
hat jemand vieleicht ein vorschlag ??
-
Einfach mal die innere Schleife weglassen:
#include <iostream> #include <ctime> using namespace std; void wald() { char aktion; int zuMIN=330; int zuMAX=66; int zuDIFF = zuMAX-zuMIN; srand((unsigned int)time (0)); int monHP= zuMIN + (rand () %zuDIFF+1); int Hp = 400; cout<<"OH nein da ist ein Monster es will Dich ankreifen!!\n"; do { cout<< "Das Monster hat "<< monHP<<"Lebenspunkte!!\n"; cout<<"Machen einen Aktion\n"; cout<<"<1>Schlag"<<endl; cout<<"<2>Treten"<<endl; cout<<"<3>Schlag"<<endl; cout<<"<4>Wegrennen"<<endl; cin>>aktion; switch (aktion) { case ('1'): case ('2'): case ('3'): { //do //{ int zuMIN2=7; int zuMAX2=19; int zuDIFF2 = zuMAX2-zuMIN2; int youDMG= zuMIN2 + (rand () %zuDIFF2+1); int zuMIN1=5; int zuMAX1=12; int zuDIFF1 = zuMAX1-zuMIN1; int monDMG= zuMIN1 + (rand () %zuDIFF1+1); cout<<"\nDas Monster hat noch >>>> "<<monHP<<" Lebenspunkte"<<endl; cout<<"Du fuehrst eine Atacke aus, die "<< youDMG<<"schaden macht\n"; monHP=monHP-youDMG; cout<<"Oh Nein jetzt kreift das monster an!\n"; cout<<"und es macht genau "<<monDMG<<" Schaden!\n"; Hp-=monDMG; cout<<"du hast jetzt noch " << Hp <<endl; // getchar(); //}while (monHP > 1 && Hp > 1); //cout << "gewonnen"; //getchar(); }break; case ('4'): { cout<<"warum weg?"; getchar(); }break; } }while (aktion != '4' && monHP > 1 && Hp > 1); } int main() { wald(); }
-
ah jetzt ist das was ich machen wollte
und ich dachte er macht endlos weiter wenn die schleife nicht da ist
muss noch viel üben bis ich so die meisten tricks raus habe ^^
aber danke euch für die hilfe war nett von euch
-
Versuch vll. noch in Zukunft manchmal den Ablauf auf Papier darzustellen. So kann man es oft besser nachvollziehen.