Hilfe bei Spiel !


Milka-Muhkuh

Grünschnabel
Hi, habe Problem
Beschäftige mich noch nicht so lange mit C++, wollte aber ein Spiel programmieren.
Ich komm nicht weiter bei der if/else abfrage:
Seht es euch doch bitte mal an und gebt mir bitte Hinwiese oder Ratschläge!

Code:
  #include <stdlib.h>
  #include <time.h>
  #include <iostream.h>
      
  void main ()
  {
  
      int zahl;
      char y;
      char n;
      
      const int MIN = 1;
      const int MAX = 10;
  
  label:
  
  srand((unsigned)time(NULL));
  
      zahl=MIN+rand()%(MAX-MIN+1);
      
  
      
      if(zahl==1) cout<<"Gegner: ORK"<<endl;
          else if(zahl==2) cout<<"Gegner: GOBLIN"<<endl;
          else if(zahl==3) cout<<"Gegner: RIESE"<<endl;
          else if(zahl==4) cout<<"Gegner: WOLF"<<endl;
          else if(zahl==5) cout<<"Gegner: SOELDNER"<<endl;
          else if(zahl==6) cout<<"Gegner: SLAAD"<<endl;
          else if(zahl==7) cout<<"Gegner: DIEB"<<endl;
          else if(zahl==8) cout<<"Gegner: TAURE"<<endl;
          else if(zahl==9) cout<<"Gegner: SKELETT"<<endl;
          else cout<<"Gegner: DAEMON"<<endl;
  
  
          cout<<"Fliehen?  Y/N: ";
  abfrage:
          cin>>y;
  
          if(y=="y")                                     //<<-- ab hier habe ich Probleme
          {
              cout<<"Flieht"<<endl;
              goto label;
          }
          if(y=="n") cout<<"Keampfen"<<endl;
          else
              y!="y"&&"n" goto abfrage;           //<<--Darf ich das so schreiben?
  
  }
 
C

colt4ever

Code:
if(y == 'y')
{
cout<< "Flieht" <<endl;
goto label;
}
 
else if(y == 'n')
cout<< "Kaempfen" <<endl;
 
else if(y != 'n' && y != 'y')	//nicht so wie du es schreibst y != "n" && "y"
goto abfrage;

GOTO solltest du nicht verwenden, denn bei längeren Programmen kann es zur unübersichtlichkeit kommen. Und du musst in dem if Abfragen für CHAR variablen ' nehmen statt ".

Falls ich was falsches sage korrigier mich bitte.

Ahh und noch etwas:
y evtl. besser mit getche() oder getch() einzulesen, dann musst du nicht ENTER drücken
Der Unterschied:
cin<<y musst du mit ENTER abschliessen
y = getch(); das Programm geht nach tastendruck sofort weiter wobei du nicht das
gedrückte zeichen siehst
y = getche(); gleich wie bei getch nur du siehst das gedrückte zeichen



mfg colt4ever
 
Zuletzt bearbeitet von einem Moderator:

MFC openGL

Erfahrenes Mitglied
Also für getch() brauchst du die conio.h denke mal für getche() auch...

Teste es einfach mal, wenns nicht geht nochmal schreiben, und zu deinem Goto, mach einfach eine endlos while die du mit der entsprechenden Bedingung abbrichst.
 

Milka-Muhkuh

Grünschnabel
Ok. Also es hat funktioniert mit dem getche()........nun ja.... fast!
Wie greift c++ auf getche zu? denn er vertauscht irgendwie etwas!
...
cout<<"Fliehen? Y/N: ";

y=getche();
n=getche();

if(y == 'y')
{
cout<< "Flieht" <<endl;
}
...

das programm fragt erst nach Fliehen wenn ich y/n drücke
z.B: Gegner: Ork
y
Fliehen? Y/N: Flieht!
 

MFC openGL

Erfahrenes Mitglied
Milka-Muhkuh hat gesagt.:
Ok. Also es hat funktioniert mit dem getche()........nun ja.... fast!
Wie greift c++ auf getche zu? denn er vertauscht irgendwie etwas!
...
cout<<"Fliehen? Y/N: ";

y=getche();
n=getche();

if(y == 'y')
{
cout<< "Flieht" <<endl;
}
...

das programm fragt erst nach Fliehen wenn ich y/n drücke
z.B: Gegner: Ork
y
Fliehen? Y/N: Flieht!


Mach mal ein <<endl hinter deine Ausgabe "Fliehen ?"

zudem solltest du nicht

"
y=getche();
n=getche();
"
sagen, sondern eher

char result;

result = getche();

und dann das result abfragen, sonst fragt der ja 2 mal die Eingabe ab, und ich denke nicht das du das wolltest ;)

Gruss

MFC OpenGL
 
C

colt4ever

Das Programm sieht dann so aus (es könnten Fehler darin sein, weil ich es noch nicht getestet hab):


Code:
#include <stdlib.h>
#include <time.h>
#include <iostream.h>
#include <conio.h>
  
void main ()
{
 int zahl;
 char result;
 const int MIN = 1;
 const int MAX = 10;
label:
  
   srand((unsigned)time(NULL));
	zahl=MIN+rand()%(MAX-MIN+1);
	
	if(zahl==1)   cout<<"Gegner: ORK"<<endl;
	else if(zahl==2)  cout<<"Gegner: GOBLIN"<<endl;
	else if(zahl==3)  cout<<"Gegner: RIESE"<<endl;
	else if(zahl==4)  cout<<"Gegner: WOLF"<<endl;
	else if(zahl==5)  cout<<"Gegner: SOELDNER"<<endl;
	else if(zahl==6)  cout<<"Gegner: SLAAD"<<endl;
	else if(zahl==7)  cout<<"Gegner: DIEB"<<endl;
	else if(zahl==8)  cout<<"Gegner: TAURE"<<endl;
	else if(zahl==9)  cout<<"Gegner: SKELETT"<<endl;
	else 	cout<<"Gegner: DAEMON"<<endl;
  
abfrage:
 cout<<"\nFliehen?  Y/N: ";   //\n --> nächste Zeile (line feed)
	result = getche();	 //oder getch()
	if(result == 'y')	 //mit ' greifst du auf den ASCII-Wert zu
	{
	 cout<<"\nFlieht"<<endl;
	 goto label;
	}
	
	if(result == 'n') 
	 cout<<"\nKeampfen"<<endl;
	
	if(result != 'n' && result != 'y')
	 goto abfrage;
}
Aber es wäre besser statt goto eine do-while Schleife oder nur eine while Schleife zu nehmen!
 

Milka-Muhkuh

Grünschnabel
Hey, danke leute!
Habe jetzt weitergearbeitet und tolle erfolge erziehlt.
Dann wollte ich mein programm debenbei verschönern.
Wie kann ich eine Pause erstellen die mit ENTER weitergeht,
und danach die vorigen Zeilen löscht?
Ich habe hierg irgendetwas von clrsrn oder so gelesen?
Funktioniert das gut?
 

Tobias K.

Erfahrenes Mitglied
moin


Deine Pause machst du mit: cin.get();
clrscr() geht nur wenn du einen BorlandCompiler benutzt, nutzt du das Visual Studio von Microsoft wird es etwas aufwendiger.


mfg
umbrasaxum
 
C

colt4ever

Eigentlich geht es in Windows mit VC mit system("cls") dem Systembefehl, oder man programmiert es mit Winapi aus:

Code:
#include <windows.h>
 
void main()
{
	system("cls");
}
 

Neue Beiträge