Galgenmännchen - erratene Buchstaben



  • Hey,

    ich habe aus langeweile angefangen, das Spiel "Galgenmännchen" als Konsolenanwendung nachzuprogrammieren.
    Nun stehe ich vor einem Problem:
    Ich setze die Buchstaben, die erraten wurden, in einen string ein und gebe diesen aus. Wenn nun ein weiterer Buchstabe erraten wird, soll dieser auch eingesetzt werden. Mit dem momentanen Code würden allerdings die alten Buchstaben verschwinden.

    #include "class.h"
    #include <time.h>
    #include <string>
    #include <iostream>
    using namespace std;
    
    string Words[2] = {"Testword","Hey"};
    
    Player::Player()
    {
    	srand(time(NULL));
    	char b;
    
    	cout	<< " Es wurde ein zufaelliges Wort ausgewahlt." << endl
    			<< " Du hast nun 20 Versuche, um dieses zu erraten!" << endl << endl;
    
    	m_randIndex = rand()%2;
    	int k = 0;
    	while(k!= Words[m_randIndex].length())
    	{
    		cout	<< "_ ";
    		k++;
    	}
    
    	cout	<<  Words[m_randIndex];
    	cin >> b;
    	system("cls");
    	CheckCIN(b);
    
    }
    
    void Player::CheckCIN(char word)
    {
    	system("cls");
    	for(int i = 0, j = Words[m_randIndex].length(); i<j;i++)
    	{
    		cout << "_ ";
    		if(Words[m_randIndex].at(i) == word)
    		{
    			cout << Words[m_randIndex].at(i);
    		}
    		else
    		{
    
    		}
    	}
    	char state;
    	cin	>> state;
    	CheckCIN(state);
    
    }
    

    Hat jemand einen Tipp für mich?

    grüße


  • Mod

    Merk dir eben irgendwie, welche Buchstaben schon erraten wurden.

    Dein Programm ist schrecklich:

    • Globale Variablen
    • Deine Bezeichner sind vollkommen unpassend. class.h? "Player" für irgendwas, das nicht im entferntesten mit einem Spieler zu tun zu haben scheint. Und so weiter.
    • Deine Funktionen haben alle möglichen Aufgaben scheinbar zufällig verteilt. Der Konstruktor von Player scheint irgendwie ein halbes Spiel zu spielen und macht lauter anderes Zeugs, aber konstruiert keinen Player. CheckCIN spielt irgendwie die andere Hälfte eines Spiels und checkt dann nebenher ein bisschen cin.
    • Willst du da wirklich Rekursion benutzen? Weißt du überhaupt, was du da getan hast?
    • Zeile 43-46: Wirklich?
    • Und vieles mehr. Ich habe fast den Verdacht, dass sich hier jemand einen Scherz erlaubt.


  • Die seltsame Rekursion und das Andere will ich nicht weiter kommentieren.

    Hier mal ein erster unfertiger Entwurf (ohne Klasse):

    #include <iostream>
    #include <string>
    #include <vector>
    #include <time.h>
    
    using namespace std;
    
    int InsertInWord(const string &word, string &ratemal, char b)
    {
      int n=0;
    
      for(unsigned k=0; k<word.length(); k++) {
          if(word[k] == b) {
             ratemal[k] = b;
             n++;
             }
      }
    
      return n;
    }
    
    bool IsNotSolved(string &ratemal)
    {
        // ...
        return true;
    }
    
    int main()
    {
        // Add Words to list
        vector<string> AllWords;
        AllWords.push_back("Testword");
        AllWords.push_back("Crossplay");
        AllWords.push_back("Heywood");
    
        srand((unsigned)time(NULL));
        int randIndex = rand() % AllWords.size();
    
        cout << " Es wurde ein zufaelliges Wort ausgewahlt." << endl
             << " Du hast nun x Versuche, um dieses zu erraten!" << endl << endl;
    
        string ratemal("");
        for(unsigned k=0; k<AllWords[randIndex].length(); k++) 
            ratemal += "_";
    
        cout << "gesuchtes Wort:" << ratemal << endl;
    
        char b;
        int k;
        for(k=1; IsNotSolved(ratemal); k++) {
    
            cout << " Versuch " << k << ": ";
            cin >> b;
    
            int n = InsertInWord(AllWords[randIndex], ratemal, b);
    
            if(n>0) 
                cout << n << " Buchstaben sind enthalten; das Wort ist nun " << ratemal << endl;
            else
                cout << "Buchstabe ist nicht enthalten" << endl;
    
        }
    
        cout << "Sie haben " << k << " Versuche benötigt" << endl;
    }
    

Anmelden zum Antworten