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 ^^