|
|
@ -22,82 +22,65 @@ QuizFrage erstelleFrage(const char* frage, const char* antwortA, const char* ant |
|
|
|
|
|
|
|
int spieleKategorie(Kategorie* kategorie) { |
|
|
|
size_t punktzahl = 0; |
|
|
|
int jokerVerwendet = 0; |
|
|
|
int jokerVerwendet = 0; // Joker-Flag für diese Kategorie |
|
|
|
|
|
|
|
for (int i = 0; i < kategorie->anzahlFragen; i++) { |
|
|
|
#define MAX_ANSWER_LENGTH 10 |
|
|
|
char benutzerAntwort[MAX_ANSWER_LENGTH]; |
|
|
|
char benutzerAntwort[2]; // Platz für die Benutzereingabe und das Nullzeichen |
|
|
|
|
|
|
|
printf("\nQuestion %d:\n%s", i + 1, kategorie->fragen[i].frage); |
|
|
|
|
|
|
|
char jokerAntwort[10]; |
|
|
|
|
|
|
|
do { |
|
|
|
printf("\nA) %s\nB) %s\nC) %s\nD) %s\n", kategorie->fragen[i].antwortA, kategorie->fragen[i].antwortB, kategorie->fragen[i].antwortC, kategorie->fragen[i].antwortD); |
|
|
|
|
|
|
|
if (!jokerVerwendet) { |
|
|
|
printf("\nDo you want to use the joker? (Y/N): "); |
|
|
|
scanf("%s", jokerAntwort); |
|
|
|
printf(jokerAntwort); |
|
|
|
|
|
|
|
if (toupper(jokerAntwort[0]) == 'Y') { |
|
|
|
if (kategorie->joker > 0) { |
|
|
|
kategorie->joker -= 1; |
|
|
|
jokerVerwendet = 1; |
|
|
|
printf("Joker inserted! Two incorrect answer options were deleted.\n"); |
|
|
|
|
|
|
|
char korrekteAntwort = kategorie->fragen[i].korrekteAntwort; |
|
|
|
int gestrichen = 0; |
|
|
|
|
|
|
|
for (char option = 'A'; option <= 'D'; option++) { |
|
|
|
if (option != korrekteAntwort && gestrichen < 2) { |
|
|
|
switch (option) { |
|
|
|
case 'A': |
|
|
|
strcpy(kategorie->fragen[i].antwortA, "XXXXXX"); |
|
|
|
gestrichen++; |
|
|
|
break; |
|
|
|
case 'B': |
|
|
|
strcpy(kategorie->fragen[i].antwortB, "XXXXXX"); |
|
|
|
gestrichen++; |
|
|
|
break; |
|
|
|
case 'C': |
|
|
|
strcpy(kategorie->fragen[i].antwortC, "XXXXXX"); |
|
|
|
gestrichen++; |
|
|
|
break; |
|
|
|
case 'D': |
|
|
|
strcpy(kategorie->fragen[i].antwortD, "XXXXXX"); |
|
|
|
gestrichen++; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
printf("\nA) %s\nB) %s\nC) %s\nD) %s\n", kategorie->fragen[i].antwortA, kategorie->fragen[i].antwortB, kategorie->fragen[i].antwortC, kategorie->fragen[i].antwortD); |
|
|
|
|
|
|
|
// Prüfe, ob der Joker noch nicht verwendet wurde und frage den Benutzer danach |
|
|
|
if (!jokerVerwendet) { |
|
|
|
printf("Do you want to use the joker? (Y/N): "); |
|
|
|
char jokerAntwort[2]; |
|
|
|
scanf("%1s", jokerAntwort); // Benutzerantwort für den Joker einlesen |
|
|
|
getchar(); // Leeren des Puffers |
|
|
|
|
|
|
|
if (toupper(jokerAntwort[0]) == 'Y' && kategorie->joker > 0) { |
|
|
|
printf("Joker inserted! Two incorrect answer options were deleted.\n"); |
|
|
|
|
|
|
|
char korrekteAntwort = kategorie->fragen[i].korrekteAntwort; |
|
|
|
int gestrichen = 0; |
|
|
|
|
|
|
|
for (char option = 'A'; option <= 'D'; option++) { |
|
|
|
if (option != korrekteAntwort && gestrichen < 2) { |
|
|
|
switch (option) { |
|
|
|
case 'A': |
|
|
|
strcpy(kategorie->fragen[i].antwortA, "XXXXXX"); |
|
|
|
gestrichen++; |
|
|
|
break; |
|
|
|
case 'B': |
|
|
|
strcpy(kategorie->fragen[i].antwortB, "XXXXXX"); |
|
|
|
gestrichen++; |
|
|
|
break; |
|
|
|
case 'C': |
|
|
|
strcpy(kategorie->fragen[i].antwortC, "XXXXXX"); |
|
|
|
gestrichen++; |
|
|
|
break; |
|
|
|
case 'D': |
|
|
|
strcpy(kategorie->fragen[i].antwortD, "XXXXXX"); |
|
|
|
gestrichen++; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
// Zeigt die Antworten erneut an |
|
|
|
printf("\nA) %s\nB) %s\nC) %s\nD) %s\n", kategorie->fragen[i].antwortA, kategorie->fragen[i].antwortB, kategorie->fragen[i].antwortC, kategorie->fragen[i].antwortD); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
else { |
|
|
|
printf("No Joker left. Choose a different Category.\n"); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (toupper(jokerAntwort[0]) == 'N') { |
|
|
|
break; // Beendet die Schleife, wenn der Spieler keinen Joker verwenden möchte |
|
|
|
} |
|
|
|
else { |
|
|
|
printf("Invalid input. Please type in 'Y'' for yes or 'N' for no.\n"); |
|
|
|
} |
|
|
|
|
|
|
|
// Zeigt die Antworten erneut an |
|
|
|
printf("\nA) %s\nB) %s\nC) %s\nD) %s\n", kategorie->fragen[i].antwortA, kategorie->fragen[i].antwortB, kategorie->fragen[i].antwortC, kategorie->fragen[i].antwortD); |
|
|
|
|
|
|
|
kategorie->joker--; // Verringere die Anzahl der Joker |
|
|
|
jokerVerwendet = 1; // Setze das Joker-Flag |
|
|
|
} |
|
|
|
else { |
|
|
|
break; // Wenn der Joker bereits verwendet wurde, beendet die Schleife ohne nachzufragen |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Überprüfe die Antwort des Benutzers, wenn der Joker nicht verwendet wurde |
|
|
|
if (!jokerVerwendet) { |
|
|
|
printf("Enter your choice (A/B/C/D): "); |
|
|
|
scanf("%9s", benutzerAntwort); |
|
|
|
scanf("%1s", benutzerAntwort); // Benutzereingabe einlesen |
|
|
|
getchar(); // Leeren des Puffers |
|
|
|
|
|
|
|
benutzerAntwort[0] = toupper(benutzerAntwort[0]); |
|
|
|
getchar(); |
|
|
|
|
|
|
|
if (pruefeAntwort(kategorie->fragen[i], benutzerAntwort[0])) { |
|
|
|
printf("Correct!\n"); |
|
|
@ -106,9 +89,12 @@ int spieleKategorie(Kategorie* kategorie) { |
|
|
|
else { |
|
|
|
printf("Wrong! The correct Answer is %c\n", kategorie->fragen[i].korrekteAntwort); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} while (0); |
|
|
|
// Setze das Joker-Flag für die nächste Frage zurück |
|
|
|
jokerVerwendet = 0; |
|
|
|
} |
|
|
|
|
|
|
|
return punktzahl; |
|
|
|
} |
|
|
|
|
|
|
|