Vous êtes sur la page 1sur 6

# include <stdio.h> # include <string.h> # include <stdlib.

h> # # # # define define define define MAXJUGA 3 MAXPRE 65 MAXRESP 3 MAXPUNTOS 10

/********************************************* El formato del archivo csv es: categoria pregunta t espuestaCorrecta respuesta1 respuesta2 respuesta3 cada campo debe ir l lleva coma sino un a y nunca se pone el c y no se deja nunguna separado por comas excepto del ultimo que no salto de linea titulo de cada columna linea en blanco en el archivo

ejemplo arte,quien es Mozart?,a,musico,zapatero,mi papa deporte,quien es Javier hernadez?,c,no se,mi hermano,futbolista **********************************************/ struct jugador{ char nombre[50]; int puntaje ; }; struct reactivo { char categoria[20]; char pregunta[200]; //int opciones[3]; // almacena la respuesta correcta char respCorrecta; char respuestas[MAXRESP][200]; // almacena las respuestas int contestado ; // es decir si ya paso la pregunta }; typedef struct jugador jgdr; typedef struct reactivo reac; //crea el tipo de dato reactivo

reac *cargarArchivoCSV(int *numRe); void gestionarJuego(reac reactivos[], int numReac); void jugar(); int preguntaAleatoria(int rangoMax); int main() { jugar(); getchar(); } reac *cargarArchivoCSV(int *numRe) { char ruta[200] = " "; char cadena[200];

char delimitadores[5] = ",\n"; // delimitadores del csv char *ptrToken; FILE *archivo; int bandera = 0; reac preguntas[MAXPRE]; // crea arreglo de reactivos con 65 reactivos int indiceP = 0; int indiceSeparador = 1; // comenzamos a contar desde la pregunta no des de la categoria while(strcmp(ruta , " ") == 0 strcmp(ruta , "\0") == 0 archivo == NULL) //ruta incorrecta { printf("\nPor favor indique la ruta del archivo de reactivos\n") gets(ruta); if( (archivo = fopen(ruta, "r")) != (FILE *)NULL ) { printf("\nSe cargo el archivo %s correctamente !!!\n " ,ruta) }else { printf("\nError no se encuenta el archivo %s\n", ruta); archivo = NULL; } } while(fgets(cadena, 200 , archivo)!= NULL) { printf("\nCargando preguntas ...\n"); ptrToken = strtok(cadena, delimitadores ); // Primera llamada => Primer token strcpy(preguntas[indiceP].categoria, ptrToken ); //printf("%s\n",preguntas[indiceP].categoria ); while( (ptrToken = strtok( NULL, delimitadores )) != NULL ) { switch(indiceSeparador) { case 1: // es una pregunta oken ); nta ); strcpy(preguntas[indiceP].pregunta, ptrT //printf("%s\n",preguntas[indiceP].pregu break; case 2: // carga la respuesta correcta preguntas[indiceP].respCorrecta = *ptrTo //printf("%c\n",preguntas[indiceP].respC break; case 3: // es la respuesta a la opcion a strcpy(preguntas[indiceP].respuestas[0]

ken; orrecta);

,ptrToken ); estas[0]);

//printf("%s\n",preguntas[indiceP].respu break; case 4: // es la respuesta a la opcion b strcpy(preguntas[indiceP].respuestas[1], //printf("%s\n",preguntas[indiceP].respu break; case 5: // es la respuesta a la opcion c strcpy(preguntas[indiceP].respuestas[2] //printf("%s\n",preguntas[indiceP].respu break; default:

ptrToken ); estas[1]);

, ptrToken ); estas[2]);

o este mal llenado"); ificalo\n");

printf("\nError: puede que el formato del archiv printf("\n o no sea el archivo de preguntas, ver bandera = 0; } indiceSeparador++;

te reactivo

} indiceSeparador = 1; // regresamos el indice a 1 para el siguien indiceP++; bandera = 1;

if(bandera) { printf("\n Numero de reactivos cargados: %d \n ", indiceP); *numRe = indiceP; return &preguntas[0]; } } return NULL;

void gestionarJuego(reac reactivos[], int numReac) { jgdr participantes[MAXJUGA]; int indJugador = 0; // generamos el jugador por defecto que se llama ignorancia strcpy(participantes[indJugador].nombre, "Ignorancia"); participantes[indJugador].puntaje = 0; // asigna puntaje inicial indJugador++; int pregunta; int indice;

char respuesta; while(indJugador < MAXJUGA) { do{ %d\n", indJugador ); printf("\nPor favor ingrese el nombre del jugador numero gets(participantes[indJugador].nombre);

}while(strcmp(participantes[indJugador].nombre , " ") == 0 s trcmp(participantes[indJugador].nombre , "\0") == 0 ); participantes[indJugador].puntaje = 0; // asigna puntaje inicial indJugador++; } printf("\nEl juego esta listo\n"); printf("\nLos participantes son: \n"); for( indJugador = 0 ; indJugador < 3 ; indJugador++) { printf("\nEl participante numero %d es : %s", indJugador + 1, p articipantes[indJugador].nombre ); } printf("\n"); indJugador = 0; // comenzamos con ignorancia

do{

pregunta = preguntaAleatoria(numReac); if(reactivos[pregunta].contestado != 1) { indJugador = 0 ; // regresamos a el jugador Ignoracia int inciso = 65; // A del ascii printf("\ny la categoria es: %s\n",reactivos[pregunta].c ategoria); printf("pregunta: %s", reactivos[pregunta].pregunta); printf("\n posibles respuestas: \n"); for(indice = 0; indice < MAXRESP; indice++) { if(indice == 0) { printf(" %c ) %s \n", inciso, reactivos[ pregunta].respuestas[indice]); } else { printf(" %c ) %s \n", ++inciso, reactivo s[pregunta].respuestas[indice]); } } inciso = 65; // vuelve a poner el inciso en A

do{ indJugador++; printf("\nEs turno es para: %s\n", participantes[indJugador].nombre)

do{ );

printf("\nEscriba la letra del inciso para responder\n" scanf("%c",&respuesta); getchar();

}while(respuesta == (int) " "

respuesta == (int) "\0");

if(reactivos[pregunta].respCorrecta == respuesta reactivos[pr egunta].respCorrecta == respuesta + 32 ) { printf("\nrespuesta correcta, mas un punto!!"); printf("Punto para %s", participantes[indJugador].nomb re); participantes[indJugador].puntaje++; printf("\nPuntaje: %d", participantes[indJugador].punta je); break; // rompe el cliclo por que la respuesta es corre cta y no hay mas que hacer }else {

if(indJugador == MAXJUGA - 1 ) // el ultimo jugador quie re decir que nadie contesto bien { printf("\nrespuesta incorrecta!!\n"); a ignorancia ); e); gnorancia } }while(indJugador < MAXJUGA); if(participantes[indJugador].puntaje == MAXPUNTOS ntaje == MAXPUNTOS ) { break; } }while(1); participantes[0].pu participantes[0].puntaje++; // le suma un punto printf("Punto para %s", participantes[0].nombre printf("\nPuntaje: %d", participantes[0].puntaj break; // rompe el ciclo porque gano el punto i }

// al llegar al puntaje maximo se termina el juego

if(participantes[0].puntaje == MAXPUNTOS)

{ }else { or].nombre); } }

printf("\nEl gandador es: %s\n", participantes[0].nombre); printf("\n\n!!!El ganador es : %s!!!\n\n",participantes[indJugad

void jugar() { int numReactivos = 0; reac *reactivos; if ( (reactivos = cargarArchivoCSV( &numReactivos)) != NULL) gestionarJuego(reactivos , numReactivos ); } int preguntaAleatoria(int rangoMax) { int M = rangoMax; int num; srand (time(NULL) * getpid()); num = 0 + rand() % M ;// Este est entre M y N } return num;

Vous aimerez peut-être aussi