Beispiellösung des Galgenmännchen-Spieles
#include <iostream>
#include <cstring>
using namespace std;
int main() {
// Galgenmännchenspiel
// Problem: Vergleich der Zeichenketten
// Lösungsansätze:
// - zeichenweiser Vergleich
// - hochzählen einer int-Variable bei jedem erfolgreichen Raten
// Problem: nicht möglich, Zeichenkette abzufragen bzw. einzugeben
// Problem: <Enter> notwendig nach Eingabe, Buchstabe wird
// * -> Zeiger ("Pointer")
// Speicher reservieren für die zu ratende Zeichenkette
// char *gesuchtesWort = "CPlusPlus-Spass am Abend";
// Alternativ
char zeichenkette[6];
// Adresse des Arrays "zeichenkette" im Arbeitsspeicher ausgeben
// Adressoperator: &
// cout << "Adresse: " << &zeichenkette;
// cout << endl << endl;
zeichenkette[0] = 'A';
zeichenkette[1] = 'b';
zeichenkette[2] = 'e';
zeichenkette[3] = 'n';
zeichenkette[4] = 'd';
// Stringterminator: String-abschließendes Zeichen
zeichenkette[5] = '\0';
// cout << zeichenkette;
// Jedes einzelne Zeichen der Zeichenkette ausgeben, bis '\0' erreicht ist
for (int i = 0; i < 6; i++) {
if (zeichenkette[i] != '\0') {
// cout << zeichenkette[i] << endl;
}
}
char *gesuchtesWort = "CPlusPlus-Spass am Abend";
int laenge = strlen(gesuchtesWort);
char *ausgabeString;
// Manuelle dynamsich Speicher reservieren
ausgabeString = new char[laenge + 1];
// Ausgabezeichenkette zurücksetzen
for (int i = 0; i < laenge; i++) {
ausgabeString[i] = '_';
}
// String manuell terminieren
ausgabeString[laenge] = '\0';
// Anzahl der maximalen Ratevorgänge
int rateAnzahl = 15;
// Speichert den aktuell eingegebenen Buchstaben
char buchstabe;
// Schleifenvariable
int counter;
// Variable für den Spielfluss
bool ingame = true;
// Hält fest, ob jedes Zeichen der Eingabezeichenkette erraten wurde
bool allesErraten = false;
// Let's go
cout << "Gesucht wird eine Zeichenkette mit " << laenge << " Buchstaben: " << ausgabeString << endl;
while (rateAnzahl > 0 && ingame == true) {
cout << "*** " << rateAnzahl << "mal duerfen Sie noch raten. ***" << endl;
cout << "Bitte geben Sie ein Zeichen ein, das Sie im gesuchten Wort vermuten: ";
cin >> buchstabe;
// Die Verarbeitung der Zeichenkette l?uft so lange, bis das string-terminierende Zeichen '\0' gefunden wurde
for (counter = 0; gesuchtesWort[counter] != '\0'; counter += 1) {
if (gesuchtesWort[counter] == ' ') {
ausgabeString[counter] = ' ';
} else if (gesuchtesWort[counter] == buchstabe) {
ausgabeString[counter] = buchstabe;
}
}
cout << ausgabeString << endl;
cout << endl;
// Annehmen, dass nun alle Zeichen erraten wurden
allesErraten = true;
// Pr?fen, ob tats?chlich alle Buchstaben erraten wurden
for (counter = 0; ausgabeString[counter] != '\0'; counter += 1) {
// Wenn sich in der Ausgabezeichenkette ein Unterstrich findet, dann wurde
// noch nicht alles erraten
if (ausgabeString[counter] == '_') {
allesErraten = false;
}
// Beende die Verarbeitung, wenn jedes Zeichen erraten wurde
if (allesErraten == false) {
break;
}
}
// Wurden alle Buchstaben erraten, so beende das Spiel und gebe eine
// Erfolgsmeldung aus
if (allesErraten == true) {
cout << "GLUECKWUNSCH! SIE HABEN DAS SPIEL GEWONNEN!";
ingame = false;
}
rateAnzahl--;
}
cout << endl << endl;
// Speicher freigeben
delete ausgabeString;
return 215;
}