Mastermind!
-
Hallo,
ich habe hier ein kleines Problem. Ich will das Spiel Mastermind programmieren und habe zu Beginn des Spiels eine Auswahl, ob man Mastermind oder Supermastermind (A oderspielen will! Jedoch will ich, dass wenn man hier einen anderen Buchstaben eingibt, aufgefordert wird, nochmal A oder B einzugeben!
Da weiß ich noch nicht so recht wie ich das machen soll!
Es geht um Zeile 86 und folgendes!Hier mein bisheriger Code! Und nein, ich studiere nicht Informatik, sondern brauch das nur damit ich endlich mal den Programmierkurs abschließen kann
# include <stdio.h> # include <stdlib.h> # include <time.h> long vergleiche(long n,long code[],long eingabe[]) { long k,i,s=0,r=0; // Deklarationen for(i=1;i<=n;i++) if(code[i]==eingabe[i]) r++ ; printf("\n An richtiger Position: %ld",r); // an richtiger Position for(k=1;k<=n;k++) { for(i=1;i<=n;i++) { if(code[k]==eingabe[i]) {s++; eingabe[i]=0; break; } } } printf("\n An falscher Position: %ld",s-r); // an falscher Position return r; } long lese_code(long k,long n,long eingabe[]) { long i,fehler=0; for(i=1;i<=n;i++) { scanf("%ld",&eingabe[i]); // Code einlesen if(eingabe[i]<1||eingabe[i]>k) fehler=1; // Code auf Richtigkeit überprüfen } return fehler; } int main() { long code[6],eingabe[6],i,k=0,versuch=0,codelength,versuchmax,n; char wahl; // Deklarationen srand(time(NULL)); // Zufall initialisieren do { printf("\n Bitte Spielvariante waehlen!"); printf("\n\n A: Mastermind"); printf("\n B: SuperMastermind"); printf("\n\n A oder B? "); scanf(" %c",&wahl); // Spielvariante wählen switch(toupper(wahl)) { case 'A': printf("\n Logikspiel Mastermind\n"); printf("\n Regeln:"); printf("\n Zu Beginn generiert der Computer einen 4-stelligen Zahlencode,"); printf("\n der aus den Ziffern 1-6 besteht."); printf("\n Der Spieler muss diesen Code erraten"); printf("\n Hierzu muss ein Vergleichscode eingegeben werden."); printf("\n Der Computer gibt nun an, wie viele Zeichen an der richtigen "); printf("\n Stelle stehen und wie viele zwar richtig, jedoch falsch platziert sind."); printf("\n Die Anzahl der Versuche ist auf 10 beschraenkt."); printf("\n\n Viel Spass!"); codelength=4;versuchmax=10;n=6; break; case 'B': printf("\n Logikspiel SuperMastermind\n"); printf("\n Regeln:"); printf("\n Zu Beginn generiert der Computer einen 5-stelligen Zahlencode,"); printf("\n der aus den Ziffern 1-8 besteht."); printf("\n Der Spieler muss diesen Code erraten."); printf("\n Hierzu muss ein Vergleichscode eingegeben werden."); printf("\n Der Computer gibt nun an, wie viele Zeichen an der richtigen "); printf("\n Stelle stehen und wie viele zwar richtig, jedoch falsch platziert sind."); printf("\n Die Anzahl der Versuche ist auf 20 beschraenkt."); printf("\n\n Viel Spass!"); codelength=5;versuchmax=20;n=8; break; // Regeln erklären default: printf("\n A oder B eingeben!!"); return 0; } for(i=1;i<=codelength;i++) code[i]=rand()%n+1; //for(i=1;i<=codelength;i++) printf("%d",code[i]); // Zufallscode generieren while(k!=codelength&&versuch<versuchmax) { // Spiel starten printf("\n\n %ld.ter Versuch",++versuch); printf("\t Ihr Code: "); if(lese_code(n,codelength,eingabe)) { printf("\n Bitte nur Zahlen zwischen 1 und %d!",n); printf("\n Bitte nochmal eingeben! "); versuch--; continue; // Code lesen + Fehlerwarnung } k=vergleiche(codelength,code,eingabe); // Code vergleichen } if(versuch>=versuchmax) { printf("\n\n Sie haben zu viele Versuche benoetigt!"); printf("\n Der richtige Code war "); for(i=1;i<=codelength;i++) printf("%d ",code[i]); } // Zu viele Versuche benötigt else { printf("\n\n Herzlichen Glueckwunsch!! Ihr Code ist richtig!"); printf("\n Sie haben dafuer %ld Versuche gebraucht!",versuch); } k=0; versuch=0; // Variablen für neue Runde zurücksetzen printf("\n\n Neues Spiel? (j/n) ");fflush(stdin); // Neues Spiel? } while( toupper(getchar())=='J'); }
-
Du musst die Eingabeschleife einfach solange wiederholen, bis der Benutzer eine gültige Eingabe macht. Die Eingabeschleife würde dann deinen scanf-Ausruf und die paar printf's davor beinhalten.
-
Ich habs jetzt so gelöst!
# include <stdio.h> # include <stdlib.h> # include <time.h> long vergleiche(long n,long code[],long eingabe[]) { long k,i,s=0,r=0; // Deklarationen for(i=1;i<=n;i++) if(code[i]==eingabe[i]) r++ ; printf("\n An richtiger Position: %ld",r); // an richtiger Position for(k=1;k<=n;k++) { for(i=1;i<=n;i++) { if(code[k]==eingabe[i]) {s++; eingabe[i]=0; break; } } } printf("\n An falscher Position: %ld",s-r); // an falscher Position return r; } long lese_code(long k,long n,long eingabe[]) { long i,fehler=0; for(i=1;i<=n;i++) { scanf("%ld",&eingabe[i]); // Code einlesen if(eingabe[i]<1||eingabe[i]>k) fehler=1; // Code auf Richtigkeit überprüfen } return fehler; } int main() { long code[6],eingabe[6],i,k=0,versuch=0,codelength,versuchmax,n; char wahl; // Deklarationen srand(time(NULL)); // Zufall initialisieren do { printf("\n Bitte Spielvariante waehlen!"); printf("\n\n A: Mastermind"); printf("\n B: SuperMastermind"); printf("\n N: Programm verlassen"); printf("\n\n A,B oder N? "); scanf(" %c",&wahl); // Spielvariante wählen start: switch(toupper(wahl)) { case 'A': printf("\n Logikspiel Mastermind\n"); printf("\n Regeln:"); printf("\n Zu Beginn generiert der Computer einen 4-stelligen Zahlencode,"); printf("\n der aus den Ziffern 1-6 besteht."); printf("\n Der Spieler muss diesen Code erraten"); printf("\n Hierzu muss ein Vergleichscode eingegeben werden."); printf("\n Der Computer gibt nun an, wie viele Zeichen an der richtigen "); printf("\n Stelle stehen und wie viele zwar richtig, jedoch falsch platziert sind."); printf("\n Die Anzahl der Versuche ist auf 10 beschraenkt."); printf("\n\n Viel Spass!"); // Regeln erklären codelength=4;versuchmax=10;n=6; // Variablen der Spielvariante anpassen break; case 'B': printf("\n Logikspiel SuperMastermind\n"); printf("\n Regeln:"); printf("\n Zu Beginn generiert der Computer einen 5-stelligen Zahlencode,"); printf("\n der aus den Ziffern 1-8 besteht."); printf("\n Der Spieler muss diesen Code erraten."); printf("\n Hierzu muss ein Vergleichscode eingegeben werden."); printf("\n Der Computer gibt nun an, wie viele Zeichen an der richtigen "); printf("\n Stelle stehen und wie viele zwar richtig, jedoch falsch platziert sind."); printf("\n Die Anzahl der Versuche ist auf 20 beschraenkt."); // Regeln erklären printf("\n\n Viel Spass!"); codelength=5;versuchmax=20;n=8; // Variablen anpassen break; case 'N': exit(1); //Programm verlassen default: printf("\n Bitte A,B oder N eingeben!!"); printf("\n\n A,B oder N? "); scanf(" %c",&wahl); goto start; } for(i=1;i<=codelength;i++) code[i]=rand()%n+1; //for(i=1;i<=codelength;i++) printf("%d",code[i]); // Zufallscode generieren while(k!=codelength&&versuch<versuchmax) { // Spiel starten printf("\n\n %ld.ter Versuch",++versuch); printf("\t Ihr Code: "); if(lese_code(n,codelength,eingabe)) { printf("\n Bitte nur Zahlen zwischen 1 und %d!",n); printf("\n Bitte nochmal eingeben! "); versuch--; continue; // Code lesen + Fehlerwarnung } k=vergleiche(codelength,code,eingabe); // Code vergleichen } if(versuch>=versuchmax) { printf("\n\n Sie haben zu viele Versuche benoetigt!"); printf("\n Der richtige Code war "); for(i=1;i<=codelength;i++) printf("%d ",code[i]); } // Zu viele Versuche benötigt else { printf("\n\n Herzlichen Glueckwunsch!! Ihr Code ist richtig!"); printf("\n Sie haben dafuer %d Versuche gebraucht!",versuch); } k=0; versuch=0; // Variablen für neue Runde zurücksetzen printf("\n\n Neues Spiel? (j/n) ");fflush(stdin); // Neues Spiel? } while( toupper(getchar())=='J'); }
-
Pack die ganzen Textausgaben doch bitte in entsprechende Strings bzw. Char Arrays und gibt dann über eine einzige printf Funktion dann den entsprechenden String aus.
Ist ja furchtbar der Code.
-
Schlechte Lösung.
goto
ist böse, mach es lieber so, wie ich vorgeschlagen habe.