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