Alles zurück auf Null

zorro2711

Grünschnabel
Hallo
ich habe ein kleines spiel programmiert, um mein wissen zu testen da ich mir alles im selbstudium bebringe,
ja und nun spiele ich und manchmal sterbe ich so, aber wenn ich sterbe sind meine HP unter null, gut dann werder ich zurück ins menü zurück geworfen, aber was sehe ich meine hp sind immer noch unter null ich würde sie gerne wieder auf null zurück setzten
wie geht das bitte

hier ist mein programm ich hoffe mir reist jetzt keiner den kopf ab ^^
Code:
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <string>
#include <ctime>

using namespace std;
//variable
char name[30];
int Hp=100;
int Geld=40;
int Trank=1;

//prototypen 
void name2();
void start();
void nimmTrank();
void kaufTrank();
void wald();
void checkgeldfortrank();

int main()
{
	char Menü;
do
	{
		
cout<<string (8,'\n');
cout<<string (3,'\t')<<"<S>piel Starten"<<endl;				//noch bearbeiten
cout<<string (3,'\t')<<"<N>ame deines Helden"<<endl;		//bearbeitet
cout<<string (3,'\t')<<"<O>tionen"<<endl;					//noch bearbeiten
cout<<string (3,'\t')<<"<B>eenden des Spieles"<<endl;		//noch bearbeiten
	
	
	cin>>Menü;
switch (Menü)
{	
	case ('s'):
	case ('S'):
	{
		start();
	

	}break;

	case ('o'):
	case ('O'):
	{
		cout<<"Optionen";
	
	}break;
	
	case ('N'):
	case ('n'):
		{

	getchar();   //warum muss das da Rein?

	  name2();

		}
	break;

	case ('B'):
	case ('b'):
	{
		cout<<"Spiel Beendet jetzt";
	
	}break;
	
	default: 
		{

		}break;

	}

}while ( Menü != 'b' &&  Menü != 'B');



system("pause");
return 0;
}

void name2 ()
{
	 char ch=0; 

   do 
   { 
	system("cls");
	cout <<string(7,'\n');
	cout <<string(3,'\t');
    cout<<"Wie lautet dein Name?\n"<<string(3,'\t'); 
    cin.get (name,30); 
	cout <<string(2,'\n');
	cout <<string(3,'\t');
    cout<<"ist dein name \n\n"<<string(3,'\t')<<name<< " ?  \n\n " <<string(3,'\t') << "<J>a oder <N>nein"<<endl; 
      
    cin.get(ch);   
    cin.clear();
	cin.get(ch); // damit die eingabe forderung umgangen wird (\n oder endl) 

   
    }while (ch != 'j' && ch != 'J'); 
 

   system("cls");



}

void start()
{

	char game;


	do
	{
	system("cls");
	


	
	cout<<"\n\n\t\tHallo "<<name<<" viel Spass\n";

	cout<<"\n\tDeine HP: "<< Hp << "\tDeine Taler: " << Geld << "\tDeine Traenke: "<< Trank;
	cout<<"\n\twas willst du tun?";

	cout<<string (2,'\n');
	cout<<string (3,'\t')<<"<1>Trank nehmen"<<endl;
	cout<<string (3,'\t')<<"<2>In den Laden gehen"<<endl;
	cout<<string (3,'\t')<<"<3>In den Wald gehen"<<endl;
	cout<<string (3,'\t')<<"<4>In die Ruinen gehen"<<endl;
	
	cin>>game;
	switch (game)
		{
	case ('1')://tränke
			{
			}break;

	case ('2')://laden
			{			
			}break;

	case ('3')://wald
			{			
			}break;

	case ('4')://ruine
			{			
			}break;
		}


	if (game=='1')		//trank
	{
	nimmTrank();
	}

	if (game=='2')		//laden
	{		
	kaufTrank();	
	}

	if (game=='3')		//wald
	{
	wald();
	}

	if (game=='4')		//ruine
	{
	
	}




	getchar();
	
	
	
	} while (Hp > 0);
}

void nimmTrank()
{
	if (Trank > 0)
		{
		cout<<"Du fühst dich jetzt schon viel besser\n";
		Trank-=1;
		Hp+=30;

		}

	else if (Trank <= 0)
		{
		cout<<"nein";	
		}
	getchar();
}

void kaufTrank()
{
 char ch=0; 

   do 
   { 
	cout << "\n\n\tWillkommen im Trankladen\n";
	cout << "Hier Kannst du Traenke kaufen ein \ntrank kostet 40 taler und heilt 30 Hp Willst du ein tank kaufen**** \n <j>a oder <N>ein\n";
	cin.get(ch);

	cin>>ch;
	switch (ch) 
		case ('j'):
	{
	}

	if (ch=='j')
	{
	checkgeldfortrank();
	getchar();
	}break;

	  
    

   
    }while (ch != 'j' && ch != 'J'); 
 
}

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);

	system("cls");	
	cout<<"OH nein da ist ein Monster es will Dich ankreifen!!\n";
	
	do
	{
	cout<< "Das Monster hat "<< monHP<<"Lebenspunkte!!\n\n";
	
		cout<<"Machen einen Aktion\n";
		cout<<"<1>Schlag"<<endl;
		cout<<"<2>Treten"<<endl;
		cout<<"<3>Kopfnuss"<<endl;
		cout<<"<4>Wegrennen"<<endl;
	
	cin>>aktion;
	switch (aktion) 
	{
	case ('1'):
	case ('2'):
	case ('3'):
		{
	
		
		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);
		system("cls");
		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();
		
		if (monHP < 1)
		{
			cout<<"du hast das monster besiegt.\nund du bekommst als belohnung 30 taler ";
			Geld+=30;
			
		}

		}break;
		case ('4'):
		{

		cout<<"warum weg?";
		getchar();
		}break;
	}

	}while (aktion != '4' && monHP > 1 && Hp > 1);


} 

void checkgeldfortrank()
{
	int trankgeld =40;

	if (Geld >= trankgeld)

	{
	Trank+=1;
	Geld-=30;
	cout <<"Hier bitte ist ein Trank für dich";
	}

	else if (Geld < trankgeld)

	{
	cout <<"OH, Leider hast du nicht genug Taler!";
	}

}

so das prgramm ist noch net 100%ig ferdig fehlen noch feinheiten

was geht nicht
wenn ich verlierre ''reseten'' meine HP nicht
und vieleicht ich würde gerne int HP=100 auf ein maximal wert einstellen (also wenn ich ein trank nehme das ich nicht mehr als 100 lebnspunkte habe

wenn ihr mir helfen würde wäre ich sehr glücklich
und ich bedanke mich eurer ronny
 
Hi

am Beispiel HP:
Statt
C++:
int Hp=100;
machst du nur
C++:
int Hp;
und dafür die Wertzuweisung vor dem Menü, aber in der do-while-Schleife.
Also
C++:
int main()
{
    char Menü;
    do
    {
        Hp = 100;

        cout<<string (8,'\n');
        cout<<string (3,'\t')<<"<S>piel Starten"<<endl;      
...

Noch ein paar Tipps zum Programmierstil:
Globale Variablen vermeiden.
Mehr auf Zeileneinrückungen achten.
Variablennamen nicht mit großen Anfangsbuchstaben.

Gruß
 
ah do while dachte ich mir schon aber mir fällt keine bedingung ein
und da gehts auch nichts anderes ? (ok dann werde ich mir die whill schleifen durch lesen ^^)

(zu deinen tipps: (erst mal danke)
mit den zeilen einrückungen bin ich voll deiner meinung^^
und mit der groß und kleinschreibung das ist von programmierer zu programmierer unterschiedlich (zumindest sagen das zwei autoren deren bücher ich lese)
und warum keiner globalen varialbeln ich meine ok lokale sind besser die kann ich in jeden block schreiben aber global kann ich in jeden block verwenden (wenn ich jetzt richtig gelsen habe wäre eine alternative wäre zeiger oder?)

edit:
äh ich hatte je schon ne schleif ich depp^^
ja ich hab den wert jetzt IN die schleife geschriebn und jetzt klapp es mit resten ^^
 
Zuletzt bearbeitet von einem Moderator:
Warum Bedingung, Schleifen durchlesen...? :confused:

Du brauchst da keine zusätzliche Schleife.
Du sollst nur unter dem do einer Schleife einen anderen Code hinschreiben, siehe oben.

Zur Groß-/Kleinschreibung:
Prinzipiell ist es in C/C++ schon egal, aber bestimmte Schreibweisen haben sich eingebürgert.
Und wenn man dann mit anderen Programmierern an einem Projekt arbeitet, wird erwartet,
dass alle das gleiche Schreibsystem verwenden. Wenn jeder irgendwas macht,
geht die Zusammenarbeit schwer.
Häufig findet man zB. "dasIstMeineFunktion",
also alles außer dem ersten Wort mit großen Anfangsbuchstaben.
In zB. Java ist das Ganze noch strenger als in C,
dort jammert nämlich sogar der Compiler, dass Klassennamen groß beginnen müssen usw.

Zu den globalen Variablen: Alternative wären einfach Parameter:
C++:
int funktion(int a, int b){...}
Und ja, manchmal braucht man dann auch Zeiger, wo mit globalen Variablen keine nötig waren.
Der Grund für diese scheinbare Verkomplizierung:
Einmal geschriebene Funktionen kann man problemlos auch in anderen Programmen weiterverwenden. Wenn sie sich auf glob. Variablen verlassen, ist das je nach Programmgröße schwierig bis unmöglich, ohne die Funktion ändern zu müssen. Das dauert länger, ist ein Fehlerrisiko,
...und wenns kommerziell ist wirds durch die verlängerte Dauer auch teurer
und ärgert die Kunden. Schlecht.

Und bitte Netiquette 15 beachten.

Gruß
 
Da möchte ich doch noch was anmerken:
Grade in C/C++, Variablen IMMER auf irgendeinen Wert setzen. Es sollte sich immer ein halbwegs vernünftiger Default finden lassen.

Sonst läuft man garantiert irgendwann in einen undefinierten Wert. Meistens dann, wenn man nicht damit rechnet.
 
Zurück