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ählen

    ich 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 sagen

    danke 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.


Anmelden zum Antworten