Hangman --- Wort auf Buchstabe überprüfen

lz9c1j

Mitglied
Hallo zusammen
Ich bins wieder mal. Ich habe eine kleine Frage bezüglich meinem Hangman.
Es ist ein Spiel und man muss ein vorgegebenes Wort eraten. Wenn der ausgesuchte Buchstabe nicht im Wort enthalten ist, wächst das Männchen, welches aufgehängt ist, immer um ein Körperteil. (ca.8 Versuche).

Wort: Schweiz
TIPP: Land (z.B)

Meine Frage lautet, wie kann ich ein Wort auf einen Buchstaben vergleichen. Ich möchte also ein beliebiges Wort eingeben, welches dann mein Kollege erraten muss. Wenn ich also Text eintippe und mein Kollege ein e wählt, sollte

Lösung: _ _ _ _ e _ _ _ (wenn er ein e wählt)

Wenn die Lösung aber falsch ist, sollte beim Männchen ein Kopf hinkommen.
Könnte ihr mir bitte weiterhelfen.
Thx 4 hlp
 
moin


In dem du eine Liste mit der selben größe wie dein Wort erstellst in der du speicherst ob der Buchstabe angezeigt werden soll oder nicht.

Code:
bool anzeigen[10];
char wort[10];

strcpy(wort, "Schweiz");

//Benutzereingabe.....

char taste = getch();

//prüfen ob vorhanden, an welcher, Stelle, und einstellen ob es angezeigt werden soll
for(int i=0; i<strlen(wort); i++)
    if(wort[i] == taste)
        anzeigen[i]=1;

//Ausgabe
for(int i=0; i<strlen(wort); i++)
{
    if(anzeigen == 1)
        printf("%c", wort[i]);
    else
        printf("_");
}

So im Prinzip wäre ein Durchlauf.


mfg
umbrasaxum
 
danke für deine antwort. ware leider weg, seit deinem post. ich habe den code bei mir noch angepasst und nun habe ich ein weiteres problem. ich mache ja einen hangman und dann sollte man das wort von der vorhergehenden runde mitnehmen.

ist nur ein teil von dem code
Code:
 //Ablauf
int main() {
 
	 char wahlSpiel;
	 int wahlMenu=0;
	 char oberbegriff[20];
	 char wort[20];
	 char wortPruefen[20];
	 int zufallszahl;
	 int counterVersuche=0;
	 char anzeigen[10];
	 int i;
	 char taste;
	 int counterEnthalten=0;
	 int kopf=0;
	 int kopf1=0;
	 int arm1=0;
	 int arm2=0;
	 int oberkoerper=0;
	 int bein1=0;
	 int bein2=0;
	 int fuss1=0;
	 int fuss2=0;
	 int buchstabenEnthalten=0;
 
	 while (wahlMenu==0) {
 
	 Startmenu(&wahlSpiel);
 
	 switch(wahlSpiel) {
 
		 case 'N': zufallszahl = NewGameTeil1();
				 wahlMenu = 1;
		 break;
 
		 case 'A': Anleitung();
				 wahlMenu = 0;
		 break;
 
		 case 'B': ExitGame(&wahlMenu);
				 wahlMenu = 1;
		 break;
 
	 }
	 }
 
 
	 switch(zufallszahl)
	 {
	 case 1: strcpy(wort, "JAPAN");
			 buchstabenEnthalten = 5;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 2: strcpy(wort, "MEXICO");
			 buchstabenEnthalten = 6;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 3: strcpy(wort, "PERU");
			 buchstabenEnthalten = 4;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 4: strcpy(wort, "MAZEDONIEN");
			 buchstabenEnthalten = 10;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 5: strcpy(wort, "UNGARN");
			 buchstabenEnthalten = 6;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 6: strcpy(wort, "LETTLAND");
			 counterEnthalten = 8;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 7: strcpy(wort, "NIEDERLAND");
			 buchstabenEnthalten = 10;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 8: strcpy(wort, "INDIEN");
			 buchstabenEnthalten = 6;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 9: strcpy(wort, "KENIA");
			 buchstabenEnthalten = 5;
			 strcpy(oberbegriff, "Land");
	 break;
 
	 case 10: strcpy(wort, "ARMENIEN");
			 buchstabenEnthalten = 8;
			 strcpy(oberbegriff, "Land");
	 break;
	 }
 
	 while (counterEnthalten < buchstabenEnthalten && counterVersuche < 7) {
 
		 printf("\tTIPP: %s", oberbegriff);		
 
		 printf("\n\t	oooooooooo");
		 printf("\n\t	o		o");
		 printf("\n\t	o		o");
		 printf("\n\t	o	 %c%c%c", kopf, kopf, kopf);
		 printf("\n\t	o	 %c %c", kopf, kopf);
		 printf("\n\t	o	 %c %c %c %c", kopf, kopf, kopf, kopf);
		 printf("\n\t	o	 %c %c %c", kopf, kopf, kopf);
		 printf("\n\t	o	 %c %c%c%c %c", kopf, kopf1, kopf1, kopf1, kopf);
		 printf("\n\t	o	 %c %c", kopf, kopf);
		 printf("\n\t	o	 %c%c%c", kopf, kopf, kopf);
		 printf("\n\t	o	 %c %c %c", arm1, oberkoerper, arm2);
		 printf("\n\t	o	 %c %c %c", arm1, oberkoerper, arm2);
		 printf("\n\t	o	 %c%c%c", arm1, oberkoerper, arm2);
		 printf("\n\t	o		%c", oberkoerper);
		 printf("\n\t	o		%c", oberkoerper);
		 printf("\n\t	o	 %c%c%c", bein1, oberkoerper, bein2);
		 printf("\n\t	o	 %c %c", bein1, bein2);
		 printf("\n\t	o	 %c	 %c", bein1, bein2);
		 printf("\n\t	o	%c	 %c", bein1, bein2);
		 printf("\n\t	o %c%c%c%c	 %c%c%c%c", fuss1, fuss1, fuss1, fuss1, fuss2, fuss2, fuss2, fuss2);
		 printf("\n\t	o");
		 printf("\n\toooooooooo");
 
		 printf("\n\tWaehlen Sie bitte einen Buchstaben: ");
		 scanf("%s", &taste);
		 fflush(stdin);
		 //prüfen ob vorhanden, an welcher, Stelle, und einstellen ob es angezeigt werden soll
		 for(i=0; i<strlen(wort); i++)
		 {
			 if(wort[i] == taste)
			 anzeigen[i]=1;
		 }
		 //Ausgabe
		 for(i=0; i<strlen(wort); i++)
		 { 
			 if(anzeigen[i] == 1) {
			 printf("Wort: %c", wort[i]);
			 counterEnthalten++;
			 }
		 else
			 printf("_");
		 }
 
		 if (counterEnthalten==0) {
 
			 switch(counterVersuche) {
				case 0: kopf=111;
						kopf1=95;
				break;
 
				case 1: oberkoerper=111;
				break;
 
				case 2: arm1=111;
				break;
 
				case 3: arm2=111;
				break;
 
				case 4: bein1=111;
				break;
 
				case 5: bein2=111;
				break;
 
				case 6: fuss1=111;
				break;
 
				case 7: fuss2=111;
				break;
			 }
		 }
 
ich weiss nicht genau, wie ich folgendes problem lösen soll.

man gibt ja einen beliebigen buchstaben ein, welcher er in der var... taste speichert. danach überprüft die for schleife ob der gewählte buchstabe mit dem ersten buchstaben vom lösungswort üebreinstimmt, dann vergleicht man den gewählten buchstaben mit dem zweiten buchstaben des lösungwortes usw...
je nach dem erscheint dann der buchstabe oder ein _. da man bei mir im spiel 7 versuche hat um das wort rauszufinden, kann man in der 2ten runde wieder einen buchstaben eingeben. er soll aber den buchstaben von der ersten runde übernehmen.

beispiel:

1. runde:
lösungswort: HANGMAN
buchstaben: A
gibt: _A___A_

2.runde (falsch, also wie es jetzt ist):
buchstabe: G
gibt: ___G___

2.runde (richting, wie ich es gerne haben möchte)
buchstabe: G
gibt: _A_G_A_

hoffe es ist jetzt klarer
 
moin


Dein Beispiel war sehr verständlich.

Drum änder ich mein Beispiel mal ein bsichen:
Code:
char ergebnis[10];
char wort[10];

strcpy(wort, "Schweiz");

//Ergebnis mit _ füllen
for(int i=0; i<strlen(wort); i++)
{
    ergebnis[i]='_';
    ergebnis[i+1]='\0';
}

//Benutzereingabe.....
char taste = getch();

for(int i=0; i<strlen(wort); i++)
{
    if(wort[i] == taste)
        ergebnis[i]=wort[i];
}

//Ausgabe
printf("%s", ausgabe);

So sollte ein Durchlauf nun aussehen, ist aber ungetestet.
Du müsstest nun noch gucken ob ein Buchstabe zwei mal eingegeben wurde, aber das ja kein Ding.
 
moin


Wenn nicht auf Groß und Kleinschreibung geachtet werden soll, musst du :
Code:
if(wort[i] == taste)
Durch
Code:
if(wort[i] == taste || wort[i] == (taste+32) || wort[i] == (taste-32))


mfg
umbrasaxum
 
hallo ich habe erst vor ca. 1 Woche angemeldet.
Ich habe das gleiche Programm geschrieben aber will mit Wiederholungen schreiben, kann jemand mir einen Lösungsvorschlag geben?
Danke:)
 
oooo sorry weil ich neu bin weiß ich nicht so sehr
aber oben steht es egal also
das programm lautet:
Code:
#include <stdio.h>
#include <string.h>
#include <conio.h>


int main()
{

	char ergebnis[20];
	char wort[20];
	int i, laenge;

	strcpy(wort,"Deutschland");	
	laenge=strlen(wort);
	for(i=0; i<laenge; i++)
	{
		//Ergebnis mit _ füllen
		ergebnis[i]='-';
		
	}
	ergebnis[i]='\0';
	printf("\n%s",ergebnis);

	//Benutzereingabe.....
	char taste=getchar();

	for(i=0; i<laenge; i++)
	{
		if(wort[i]==taste)
		{
			ergebnis[i]=taste;
		}
	}

	//Ausgabe
	printf("%s",ergebnis);

wiederholung das heißt ich will es mehrmals wiederholen
 
wenn das genau der Code ist dann mach einfach ein
Code:
char again = "J";
an den Anfang und ein
Code:
while(again != "N" || again != "n")
{
:
cout << "Nochmal Spielen? J=Ja; N=Nein" << endl;
cin >> again;
}
um das ganze


wie das genau mit printf und scanf geht weiss ich nicht aber das kannst du dir ja denken
 
Zuletzt bearbeitet:
Zurück