Hangman



  • Hallo wir sollen 'n Hangman programmieren, an sich ja kein Problem..:

    #include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    #include <wchar.h>
    #include <windows.h>
    #define SCHWARZ 0
    #define GRAU 7
    
    void farbe(int a)
    {
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char ergebnis[20];
    	char wort[20];
    	int i, laenge, punkte = 0;
    	char taste;
    	int versuch = 0; 
    	printf("Spieler A: Denken sie sich ein Wort aus !\n");
    	fflush(stdin);
    	farbe(SCHWARZ);
    	scanf("%s", wort);
    	farbe(GRAU);
    	laenge = strlen(wort);
    
    	for(i = 0; i < laenge; i++)
    	{
    		//Ergebnis mit - füllen + Wort in Kleinbuchstaben umwandeln
    		ergebnis[i] = '-';
    		wort[i] = towlower(wort[i]);
    
    	}
    
    	ergebnis[i] = '\0';
    	//Wort als ----- ausgeben 
    	printf("\n%s\n", ergebnis);
    
    	//Eingabe Spieler B.....
    	printf("\nSpieler B: Erraten Sie das Wort nach und nach mit einzelnen Buchstaben!\n");
    	while(strcmp(ergebnis, wort) != 0)//Wenn Eingabe & Ergebnis nicht gleich sind...
    	{
    		fflush(stdin); //Darf Spieler B raten
    		scanf("%c", &taste);
    		taste = towlower(taste);
    		//Buchstabe an die richtige Stelle setzen
    		versuch = 0;
    		for(i = 0; i < laenge; i++)
    		{
    			if(wort[i] == taste)
    			{
    				ergebnis[i] = taste;
    				versuch = 1;
    			}
    		}
    		//Ausgabe
    		printf("%s\n", ergebnis); 
    		if(versuch == 0)
    		{	
    			printf("Sie haben einen Strafpunkt erhalten!\n\n");
    			++punkte;
    		}
    		printf("Strafpunkte: %d\n\n",punkte);
    		if(punkte == 10)
    		{
    
    			printf("FAIL!\n");
    			printf("Gesuchtes Wort: \"%s\"\n", wort);
    			break;
    		}
    	}
    	return 0;
    }
    

    nur sollen wir jetzt noch Bedingungen reinschreiben:
    - Spieler A darf keine Zahlen oder Sonderzeichen eingeben
    - Spieler B genauso wenig (Strafpunkt soll nicht mitgezählt werden)
    - Wenn Spieler B 'n Buchstaben doppelt eingibt, soll ihm das Programm dies mitteilen (incl. Resultat der Überprüfung) und der Strafpunkt soll nicht mitgezählt werden.

    Edit: für's Merken hab ich mir übelregt halt einfach vairablen zu machen, aber dann hab ich anchher 10 stück und das ist irgendwie auch scheiße...gibts dafür keine andre lösung?



  • Am einfachsten ist ein boolean Array mit 26 werten für das merken, wo du dann für die bisher ausgewählten Buchstaben den jeweiligen Array eintrag mit einer 1 füllst. (die Position innerhalb das Array berechnest du mittels dem Ascii Wert des eingegebenen Buchstaben)

    Beispiel (Pseudocode ausschnitt, denn du sollst ja lernen! 😉 )

    char taste;
    bool abc[26];
    int Asciiwert = 0;
    
    // füll abc[0] ... abc[25] mit 0
    //hier beginnt dein Spiel (Schleife)
    // Benutzer wählt 'a'
    Asciiwert = taste - x // x = der Wert der abgezogen werden muss, damit du bei 'a' auf 0 kommst (die anderen buchstaben folgen in der Reihe) 
    // (für die erste Stelle des abc Arrays)
    
    // Überprüfe ob der Buchstabe schon gedrückt wurde:
    if abc[Asciiwert] == 1)
    {
    // Buchstabe wurde schonmal gewählt
    } else
    {
    // buchstabe ist noch frei, füll abc[Asciiwert] mit 1 (true) und mach weiter
    }
    

    P.S. ich bin gerade nicht sicher ob der datentyp bool schon Ansi C ist, aber da du ja auch schon eine windows.h in deinem Source hast, wird das wohl bei dir klappen 😉



  • danke für die Hilfe, das mit dem buchstaben wiederholen funzt schonma ^^


Anmelden zum Antworten