000
12.09.2005, 19:08 Uhr
sf
|
Nabend...
Ich habe ein par Probleme eine Auswertung eines MasterMind Programmes durchzuführen.
Ich habe ein Array pspielfeld[5], welches die 5 Zahlen enthält, welche am Anfang vom PC gezogen werden. Diese müssen beim Mastermind ja bekanntlich erraten werden.
Weiterhin habe ich ein Array peingabe[runde][zahl]
Hierbei gilt: runde = Aktuelle Ziehrunde (da es mehrere Runden gibt und ich alle Runden immer untereinander ausgegeben haben möchte speicher ich die Runde hierein um alle Runden exakt ansteuern zu können) zahl = eine Zahl von 1 -7 welche für die Farbe steht, welcher der Nutzer will. 1 = rot 2 = gelb 3 = grün 4 = blau 5 = weiß 6 = braun 7 = orange
Nun laufen diese Eingaben ab und es soll in einer Funktion geguckt werden was alles richtig ist.
Ich habe da erstmal folgendes geprüft:
C++: |
for ( i = 0; i > 5 ; i ++ ) { if ( pspielfeld[i] == peingabe[*prunde][i] ) { cout << "x"; } } /* Ich denke das ganze ist leicht erklärt. Der Pointer kommt durch Übergabe von der Funktion das passt so. Ich gucke ob an der Stelle im Spielfeld, welche ich gerade durchlaufe (mit der for-Schleife durchlaufe ich ja nacheinander alle 5 Felder) GENAU die gleiche Zahl in der Eingabe für DIESES Feld steht. Wenn das der Fall ist gebe ich ein X aus.
*/
|
Soweit klappt das ganze auch erstmal.
Wenn eine Farbe richtig ist, aber am falschen Ort so soll ein "O" ausgegeben werden. Das bekomme ich zwar halbwegs hin, aber meinen Code hier hinzuschreiben wäre wohl wenig sinnvoll. Kurz erklärt prüfe ich alle Felder der Eingabe, ob der gleiche Zahlenwert drinsteht wie im Spielfeld.
Das bringt mir jetzt einige Probleme:
1) Wenn eine Zahl doppelt gezogen wurde (vom PC) so gibt es Fehler und es ist z.B. ein "O" zu wenig, oder Ähnliches. 2) Wenn ich bei allen 5 Eingaben die ich habe die gleiche Zahl verwende und diese irgendwo vorkommt, so bekomme ich nicht nur 1x, sondern auch ein O.
Wie bekomme ich das hin, dass diese Abfrage richtig funktioniert?
Im Anhang findet ihr noch den kompletten C++ Code, welcher allerdings noch bissl buggy ist denke ich. Würde mich freuen, wenn jemand helfen kann!
C++: |
// MASTERMIND #include <iostream> #include <stdlib.h> #include <windows.h> //Wird für die Farben benötigt #include <time.h> //Wird für Zufallsgenerator benötigt
//Farbdefinition #define blau 9 #define turkise 11 #define gruen 10 #define rot 4 #define gelb 14 #define grau 8 #define white 15
const unsigned char BB = static_cast<unsigned char>(157);
using namespace std; //--------- void textcolor(WORD color) //Funktion fuer Farbe { SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), color); } //---------
void zufall(int*); // zieht zufällig Zahlen für Array von Spielfeld int zug(int*,int*); // Zug-Funktion
//Eingabe wird als Globale Variable deklariert , weil ich Probleme mit der Übergabe eines Multidimensionales Arrays an eine Funktion hatte int eingabe[17][5];
int main() { int spielfeld[5]; int runde=1; int i; int sieg;
//Zufallfunktion zufall(spielfeld); do { sieg = zug ( spielfeld, &runde ); // ist unwichtig, weil noch nichts zurückgegeben wird... textcolor(15); cout << "\n------------------------------------------------------------\n"; runde+=1; } while(sieg!=1); system("PAUSE"); return 0; } void zufall(int* pspielfeld) { int i; srand((unsigned)time(NULL)); for(i=0;i<5;i++) { pspielfeld[i] = rand()%6+1; } } int zug(int* pspielfeld,int* prunde) { int i,j; cout << "(1) blau\n"; cout << "(2) tuerkis\n"; cout << "(3) gruen\n"; cout << "(4) rot\n"; cout << "(5) gelb\n"; cout << "(6) grau\n"; cout << "(7) weiss\n"; for (i=0; i<5;i++) { cout << "Bitte waehlen Sie aus, welche Farbe Sie ins " <<i+1<<". Feld setzen moechten:\n"; cin >> eingabe[*prunde][i]; } cout << "\n--------------------------------------------------------------\n"; cout << "RUNDE: "<<*prunde<<" - Sie haben folgende Steine gesetzt:\n"; for (i=0; i<5;i++) { if ( eingabe[*prunde][i] == 1 ) { textcolor(9); cout << BB << "\t"; } else if ( eingabe[*prunde][i] == 2 ) { textcolor(11); cout << BB << "\t"; } else if ( eingabe[*prunde][i] == 3 ) { textcolor(10); cout << BB << "\t"; } else if ( eingabe[*prunde][i] == 4) { textcolor(4); cout << BB << "\t"; } else if ( eingabe[*prunde][i] == 5 ) { textcolor(14); cout << BB << "\t"; } else if ( eingabe[*prunde][i] == 6 ) { textcolor(8); cout << BB << "\t"; } else if ( eingabe[*prunde][i] == 7 ) { textcolor(15); cout << BB << "\t"; } } textcolor(15); // AUSWERTUNG for(i=0; i<5; i++) {
if ( pspielfeld[i] == eingabe[*prunde][i] ) { cout << "x"; eingabe[*prunde][i] == 8; } if ( pspielfeld[i] == eingabe[*prunde][1] || pspielfeld[i] == eingabe[*prunde][2] || pspielfeld[i] == eingabe[*prunde][3] || pspielfeld[i] == eingabe[*prunde][4] || pspielfeld[i] == eingabe[*prunde][5] || pspielfeld[i] == eingabe[*prunde][6] ) { cout << "o"; }
} cout << "\n"; for (i=0; i<5;i++) { cout << pspielfeld[i]; } return 0; }
|
|