Mastermind programmieren?
-
Hallo,
ich muss für die Uni das Spiel Mastermind programmieren. Ich komm gerade nicht weiter. Irgendwie klappt das nicht was ich bisher gemacht hab. Ich hoff ihr findet den Fehler# include <stdio.h> # include <stdlib.h> # include <time.h> void sortiere (long n,long f[] ) { long i, j, imin, t; for( i = 1 ; i < n ; i++ ) { imin = i; for( j = i+1 ; j <= n ; j++ ) if( f[j] < f[imin] ) imin = j; t = f[i]; f[i] = f[imin]; f[imin] = t; } } long vergleiche(long x[],long y[]) { long i,s,r; for(i=1,r=0;i<=4;i++) { if(x[i]==y[i]) r++ ;} printf("\n An richtiger Position: %d",r); sortiere(4,x); sortiere(4,y); for(i=1,s=0;i<=4;i++) if (x[i]==y[i]) s++; if(s-r>=0) printf("\n An falscher Position: %d",s-r); else printf("\n An falscher Position: 0"); return r; } void lese_code(long x[]) { long i; for(i=1;i<=4;i++) { scanf("%ld",&x[i]); //printf("%d",x[i]); } } int main() { // Deklarationen: long code[5],eingabe[5],i,k=0,versuch=1; // Regeln erklären: 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\n Viel Spass!"); // Zufallscode generieren: srand(time(NULL)); for(i=1;i<=4;i++) code[i]=rand()%6+1; //code[i]=i; for(i=1;i<=4;i++) printf("%d",code[i]); // Runden // Code raten while(k!=4) { printf("\n\n %d.ter Versuch",versuch); printf("\t Ihr Code: "); lese_code(eingabe); // Code vergleichen k=vergleiche(code,eingabe); versuch++; } // Spielende printf("\n\n Herzlichen Glueckwunsch!! Ihr Code ist richtig!"); printf("\n Sie haben dafuer %d Versuche gebraucht",versuch-1); // neues Spiel? fflush(stdin) ; getchar(); }
-
http://www.c-plusplus.net/forum/p987834#987834 Ganz Wichtig: die erste Zeile
Den Beitrag davor aber auch beachten
-
Also das Problem ist, dass manchmal der Code den ich eingebe und die Auswertung danach nicht zusammenpassen. Ich glaube, dass das irgendwie an meiner Vergleichsfunktion liegt. Was muss ich daran noch verändern, damit der eingegebene Code richtig mit dem generierten Code verglichen wird.
-
Ich dechiffriere jetzt keinen Quelltext, der nur nichtssagende, einbuchstabige Variablennamen enthält. Was mir (beziehungsweise meinem Compiler) aber direkt auffällt ist, dass deine Ausgaben falsch sind. %d ist nicht der Formatspezifizierer für long int.
-
Und was noch auffällt ist, daß die Vergleichsfunktion den vorgegebenen Code umsortiert. Dadurch ändert sich auch die Position, die in den weiteren Versuchen als "richtig" angesehen wird.
PS: Zu "fflush(stdin);" sage ich jetzt nichts
-
warum long und nicht int? oder erwartest du da Probleme?
Sollte beides funktionieren. Aber int wären ein paar Zeichen Quelltext wenigerEin paar Kommentare im Quelltext:
int main() { // Deklarationen: long code[5],eingabe[5],i,k=0,versuch=1; // warum nicht versuch = 0 ? // Regeln erklären: ... // Zufallscode generieren: srand(time(NULL)); for(i=0; i<4; i++) code[i]=rand()%6+1; //code[i]=i; for(i=0; i<4; i++) printf("%d",code[i]); // nur zum Test // Runden // Code raten while(k!=4) // warum "!=" und nicht "<" oder ">" ? { printf("\n\n %d.ter Versuch",versuch); printf("\t Ihr Code: "); lese_code(eingabe); // prüfe was hier in "eingabe" steht? // Code vergleichen k=vergleiche(code,eingabe); versuch++; } // Spielende printf("\n\n Herzlichen Glueckwunsch!! Ihr Code ist richtig!"); printf("\n Sie haben dafuer %d Versuche gebraucht",versuch-1); // siehe oben -> anpassen // neues Spiel? fflush(stdin) ; // siehe FAQ hier im Forum getchar(); }
Nicht alles sind Fehler, aber an den Stellen würde ich das anders lösen.