@ -4,13 +4,13 @@
# include <string.h>
# include <ctype.h>
int pruefeAntwort ( QuizFrage frage , char antwort ) {
int pruefeAntwort ( const QuizFrage frage , const char antwort ) {
return ( frage . korrekteAntwort = = antwort ) ;
}
QuizFrage erstelleFrage ( const char * frage , const char * antwortA , const char * antwortB , const char * antwortC , const char * antwortD , char korrekteAntwort ) {
QuizFrage neueFrage ;
strcpy ( neueFrage . frage , frage ) ;
snprintf ( neueFrage . frage , sizeof ( neueFrage . frage ) , " %s " , frage ) ;
strcpy ( neueFrage . antwortA , antwortA ) ;
strcpy ( neueFrage . antwortB , antwortB ) ;
strcpy ( neueFrage . antwortC , antwortC ) ;
@ -21,82 +21,66 @@ QuizFrage erstelleFrage(const char* frage, const char* antwortA, const char* ant
}
int spieleKategorie ( Kategorie * kategorie ) {
in t punktzahl = 0 ;
int jokerVerwendet = 0 ;
size_ t punktzahl = 0 ;
int jokerVerwendet = 0 ; / / Joker - Flag für diese Kategorie
for ( int i = 0 ; i < kategorie - > anzahlFragen ; i + + ) {
char benutzerAntwort [ 10 ] ;
char benutzerAntwort [ 2 ] ; / / Platz für die Benutzereingabe und das Nullzeichen
printf ( " \n Question %d: \n %s " , i + 1 , kategorie - > fragen [ i ] . frage ) ;
char jokerAntwort [ 10 ] ;
do {
printf ( " \n A) %s \n B) %s \n C) %s \n D) %s \n " , kategorie - > fragen [ i ] . antwortA , kategorie - > fragen [ i ] . antwortB , kategorie - > fragen [ i ] . antwortC , kategorie - > fragen [ i ] . antwortD ) ;
if ( ! jokerVerwendet ) {
printf ( " \n Do 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 ( " \n A) %s \n B) %s \n C) %s \n D) %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 ( " \n A) %s \n B) %s \n C) %s \n D) %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 " ) ;
}
}
else {
break ; / / Wenn der Joker bereits verwendet wurde , beendet die Schleife ohne nachzufragen
/ / Zeigt die Antworten erneut an
printf ( " \n A) %s \n B) %s \n C) %s \n D) %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
}
}
printf ( " Your answer: " ) ;
scanf ( " %s " , benutzerAntwort ) ;
/ / Ü berprüfe die Antwort des Benutzers , wenn der Joker nicht verwendet wurde
if ( ! jokerVerwendet ) {
printf ( " Enter your choice (A/B/C/D): " ) ;
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 " ) ;
@ -105,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 ;
}
@ -130,6 +117,9 @@ void quizduell() {
Kategorie kategorien [ MAX_CATEGORIES ] ;
kategorien [ 0 ] . fragen = ( QuizFrage * ) malloc ( MAX_QUESTIONS_PER_CATEGORY * sizeof ( QuizFrage ) ) ;
if ( kategorien [ 0 ] . fragen = = NULL ) {
exit ( EXIT_FAILURE ) ;
}
kategorien [ 0 ] . fragen [ 0 ] = erstelleFrage ( " Whats the height of the Zugspitze? " , " 2482 Meter " , " 2867 Meter " , " 2962 Meter " , " 3173 Meter " , ' C ' ) ;
kategorien [ 0 ] . fragen [ 1 ] = erstelleFrage ( " In which Federal State is the Zugspitze? " , " Bayern " , " Baden-Wuerttemberg " , " Hessen " , " Thueringen " , ' A ' ) ;
kategorien [ 0 ] . fragen [ 2 ] = erstelleFrage ( " Which Mountain is the highest following after the Zugspitze? " , " Grossglockner " , " Watzmann " , " Feldberg " , " Meissner " , ' B ' ) ;
@ -137,6 +127,9 @@ void quizduell() {
kategorien [ 0 ] . joker = 1 ;
kategorien [ 1 ] . fragen = ( QuizFrage * ) malloc ( MAX_QUESTIONS_PER_CATEGORY * sizeof ( QuizFrage ) ) ;
if ( kategorien [ 1 ] . fragen = = NULL ) {
exit ( EXIT_FAILURE ) ;
}
kategorien [ 1 ] . fragen [ 0 ] = erstelleFrage ( " Which Ingredient is used traditionally for Pesto? " , " Tomatoes " , " Basil " , " Spinach " , " Oregano " , ' B ' ) ;
kategorien [ 1 ] . fragen [ 1 ] = erstelleFrage ( " Which meal is known for its usage of rice? " , " Lasagna " , " Sushi " , " Pizza " , " Hamburger " , ' B ' ) ;
kategorien [ 1 ] . fragen [ 2 ] = erstelleFrage ( " Which color has a ripe banana? " , " Red " , " Green " , " Yellow " , " Orange " , ' C ' ) ;
@ -144,6 +137,9 @@ void quizduell() {
kategorien [ 1 ] . joker = 1 ;
kategorien [ 2 ] . fragen = ( QuizFrage * ) malloc ( MAX_QUESTIONS_PER_CATEGORY * sizeof ( QuizFrage ) ) ;
if ( kategorien [ 2 ] . fragen = = NULL ) {
exit ( EXIT_FAILURE ) ;
}
kategorien [ 2 ] . fragen [ 0 ] = erstelleFrage ( " In which sport is the term 'home run' used? " , " Soccer/Football " , " Baseball " , " Tennis " , " Golf " , ' B ' ) ;
kategorien [ 2 ] . fragen [ 1 ] = erstelleFrage ( " How many players are there normally on the pitch in a soccer/football team? " , " 9 " , " 11 " , " 7 " , " 5 " , ' B ' ) ;
kategorien [ 2 ] . fragen [ 2 ] = erstelleFrage ( " What sport is played on a pitch and has a 'wicket'? " , " Rugby " , " Cricket " , " American Football " , " Hockey " , ' B ' ) ;
@ -156,9 +152,11 @@ void quizduell() {
zeigeVerfuegbareKategorien ( kategorien ) ;
printf ( " Your selection: " ) ;
scanf ( " %s " , auswahl ) ;
fgets ( auswahl , sizeof ( auswahl ) , stdin ) ;
auswahl [ strcspn ( auswahl , " \n " ) ] = ' \0 ' ;
int auswahlIndex = - 1 ;
typedef int CategoryIndex ;
CategoryIndex auswahlIndex = - 1 ;
for ( int i = 0 ; i < MAX_CATEGORIES ; i + + ) {
if ( kategorien [ i ] . fragen ! = NULL & & strcmp ( auswahl , " Mountains " ) = = 0 ) {