Hangman

stergu

Grünschnabel
Hallo!
ich habe eine problem beim hangman programmieren in C++.
hier mal die angabe:
Schreiben Sie ein Programm, das es zwei Personen ermöglicht, das Spiel 'Hangman' zu spielen. Die erste Person gibt ein geheimes Wort mit höchstens 79 Zeichen ein, das vom Computer gespeichert wird (um den Inhalt des Bildschirms nach der Eingabe zu löschen, so dass die zweite Person das eingegebene Wort nicht lesen kann, können Sie den Befehl system("clear") innerhalb Ihres Programms verwenden.

Mögliche Ausgabe des Programms (Benutzereingaben sind mit <> markiert)

Bitte geben Sie ein geheimes Wort ein: <lehen> //Hier sollte der Bildschirminhalt jetzt gelöscht werden


Bitte wählen Sie einen Buchstaben: <e>


-e-e-


1. Versuch: <lesen> falsch
2. Versuch: <leben> falsch


Bitte wählen Sie einen Buchstaben: <l>


le-e-


1. Versuch: <leser> falsch
2. Versuch: <lehen> korrekt


hier mein ansatz:

Code:
#include <iostream>

using namespace std;
int main()
{

  char wort[80];
  char tipp;
  char wortTipp[80];
  int i=0;
  
    cout <<"geben sie ein wort ein.";
    cin>> wort;




  cout <<"wählen sie einen Buchstaben: " << endl;
  cin >> tipp;


for (i=0;wort[i]!= '\0';i++)
  
  if (wort[i]==tipp)
    cout << tipp;
  else
    cout <<"-";

  cout <<"Geben sie das geheime Wort ein: " <<endl<< "1.Versuch: ";
  cin >> wortTipp; 

    if (wortTipp==wort)
    cout <<"Gratuliere" <<endl; 
  
    else 
    cout <<"versuchen sie es nocheinmal"<<endl<<"2. Versuch: ";
    cin >>wortTipp;

      
    



return 0;
}

mein problem ist jetzt, dass nun der 2te spieler einen weiteren buchstaben erraten soll, der als erstes geratene buchstabe soll dabei nicht verloren gehen.
also würde das zu erratene wort "lesen" sein, war mein erster tipp "e".
dann sieht das ganze so aus:
-e-e-
wenn ich jetzt als nächstes "l" tippe, sollte das so aussehen:
le-e-

an dieser stelle komme ich leider nicht weiter... und bitte um hilfe!

LG und danke im voraus
 
Hallo,
als erstes solltest du das ganze etwas besser einrücken, das ist sehr schwer zu lesen.

Nach deinem Code kann so nie "le-e-" erscheinen weil du ja nur das aktuell eingegebene Zeichen mit dem Wort prüfst. Auch weitere Buchstaben nicht. Du musst auf jeden Fall die schon geratenen Buchstaben zwischen speichern und auch prüfen, oder das Ratewort in ein weiteres Array speichern und nur den neuen Buchstaben ggf hinzufügen.

Dann solltest du die ganze Abfrage in eine while-Schliefe packen, wobei abgebrochen wird, wenn das Wort gelöst wurde.

Grüße,
Jennesta
 
Hi und Willkommen bei tutorials.de,

Paar allgemeine Tipps zuerst:

Auf Zeileneinrückungen zu achten würde dir selbst sicher auch helfen
(uns Anderen jedenfalls schon).

Willst du in C oder C++ programmieren? Zurzeit ists etwas gemischt.
Auch möglich, aber nicht das, was Lehrer normalerweise wollen.

char-Array-Strings werden nicht mit == verglichen.
== überprüft, ob es sich um ein. und dasselbe Array handelt, zB. wortTipp==wortTipp
Zum Inhaltsvergleich braucht man strcmp
(oder selbst in einer Schleife alle einzelnen chars auf Gleichheit prüfen).


Zum Programmablauf: Da ist einiges durcheinander...was hast du mit wortTipp vor?
Idee: In wortTipp speicherst du zu jedem Buchstaben von wort 1 oder 0,
ob der betreffende Buchstabe schon erraten wurde (und damit angezeigt werden darf).
Das bleibt dann auch dauerhaft über mehrere Buchstabeneingaben erhalten.

Programmablauf ca.
Code:
Wort einlesen
Worttipp mit Nullen füllen (noch nichts erraten)

Wiederholen
{
    Tipp einlesen
    In Worttipp alle Stellen auf 1, wo der entsprechende Buchstabe in Wort==Tipp
    Alle Buchstaben von Wort ausgeben: Buchstabe nur, wenn 1 in Worttipp, bei 0 den Strich

    Wenn alles Einser in Worttipp: Fertig geraten, Schleife beenden
    Sonst gehts bei "Wiederholen" oben wieder weiter
}
 
Danke für eure schnellen Antworten!

ja das mit der form des codes hab ich jetzt selbst gesehen. der lehrer hat uns gestern erklärt wie man in einer schönen struktur programmiert :)

also der tipp mit dem geratenen wort in ein array zu speichern hat mir sehr weiter geholfen, ebenso wie die funktion strcmp.

habe das programm dann gestern fertigstellen können ;)

vielen dank für die schnelle hilfe!

LG
 
Zurück