 por kingwar » Sab Dic 17, 2011 4:24 pm
por kingwar » Sab Dic 17, 2011 4:24 pm 
			
			como tenia que recordar C, que mejor forma de hacerlo que con un juego. aqui esta el codigo:
- Código: Seleccionar todo
- #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 #include <time.h>
 
 #define MAX_PAL_OPCION 5
 #define MAX_PALABRAS 30
 #define MAX_FALLIDAS 5
 #define SALIR 4
 
 
 int menu(void)
 {
 //funcion que muestra al usuario un menu y regresa una opcion del mismo
 char linea[MAX_PAL_OPCION+1];
 int opcion=0;
 
 do
 {
 system("cls");
 printf("\nEscoje mi dificultad:");
 printf("\n1)bebe");
 printf("\n2)ninyo");
 printf("\n3)joven");
 printf("\n4)<-Salir");
 
 printf("\n\nTu opcion:");gets(linea);sscanf(linea,"%d",&opcion);
 if (opcion<1||opcion>4)
 printf("Aun no tengo ese nivel, intenta de nuevo.!\n");
 }while(opcion<1||opcion>4);
 
 return opcion;
 }
 
 char *obtener_palabra(int nivel )
 {
 //funcion que regresa una palabra del nivel solicitado
 char palabras[3][16][MAX_PALABRAS]={{"pelota","prueba","perro","oso","avion","maletin","foca","culebra","cueva","ayuda","facil","hombre","animal","vida","esfera","televisor"},
 {"aguijon","aguinaldo","plantilla","cavar","estrenar","lindo","queso","lenguaje","jubilado","reconocer","conocimiento","ahorcarse","programacion","isla","informar","abispa"},
 {"secuela","traslacion","clavicula","cleopatra","clandestino","mirador","esperanza","sabiduria","terraquio","aguila","difunto","perdonar","sobrevalorar","autoestima","eucaristia","leopardo"}};
 int index_aleatorio=(int) ((double) rand() / ((double) RAND_MAX + 1) * 15);
 return palabras[nivel][index_aleatorio];
 }
 
 
 int reemplazar(char letra,char palabra[],char palabra_reemplazar[])
 {
 //esta funcion reemplaza en la posicion donde coincida 'letra' en 'palabra', 'letra' en la misma posicion pero de 'palabra_reemplazar'
 int i=0,reemplazado=0;
 while(palabra[i]!='\0')
 {
 if(palabra[i]==letra)
 {
 palabra_reemplazar[i]=letra;
 reemplazado=1;
 }
 i++;
 
 }
 return reemplazado;
 }
 
 int buscar(char letra,char palabra[])
 {
 //busca 'letra' en 'palabra' si lo encuentra regresa 1
 int i=0;
 while(palabra[i]!='\0')
 {
 if(palabra[i]==letra)
 {
 palabra[i]=letra;
 return 1;
 }
 i++;
 
 }
 return 0;
 }
 
 int G_ayudado; //variable que me dira si ya ayude o no al usuario
 char G_palabra[MAX_PALABRAS],G_palabra_anterior[MAX_PALABRAS]={"null"},G_palabra_oculta[MAX_PALABRAS],G_letras_tecleadas[MAX_PALABRAS];
 
 void palabra_nueva(int opcion)
 {
 int long_palabra;
 do
 strcpy(G_palabra,obtener_palabra(opcion-1));
 while(!strcmp(G_palabra,G_palabra_anterior));//mientras no sean iguales la palabra anterior con la nueva (para que no se repitan las mismas palabras)
 strcpy(G_palabra_anterior,G_palabra);//se actualiza la anterior con la nueva
 
 long_palabra=strlen(G_palabra);
 memset(G_palabra_oculta,'_',long_palabra);//se establecen los cuadritos de 'G_palabra_oculta'
 G_palabra_oculta[long_palabra]='\0';
 
 G_letras_tecleadas[0]='\0';
 G_ayudado=0;
 }
 
 
 int main(void)
 {
 int perdio=0,opcion=0,puntaje,vidas,fallidas,i,palabras_descubiertas;
 char linea[MAX_PAL_OPCION],probar_letra='\0';
 
 srand( (unsigned)time( NULL ) );
 while(1)
 {
 
 opcion=menu(); //se optiene la opcion del usuario
 if(opcion==SALIR)break;
 
 //VALORES INICIALES
 palabra_nueva(opcion);
 puntaje=0;
 vidas=3;
 fallidas=0;
 perdio=0;
 G_ayudado=0;
 palabras_descubiertas=0;
 
 while(!perdio)//mientras no halla perdido
 {
 i=0;
 system("cls");//se borra la pantalla -creo que solo sirve para windows-
 printf("COMANDOS:\n");
 printf("\"retirarse\" me regresa al menu\n");
 printf("\"ayuda\" me obliga a ayudarte\n\n");
 
 //DIBUJA LA PALABRA CON ESPACIOS
 while(G_palabra_oculta[i]!='\0')
 {
 printf("%c ",G_palabra_oculta[i]);
 i++;
 
 }
 printf("\n\nPuntaje:%d\n",puntaje);
 printf("Vidas:%d\n",vidas);
 printf("Palabras completadas:%d\n",palabras_descubiertas);
 printf("ERRORES:%d\n",fallidas);
 if (!strcmp(G_palabra_oculta,G_palabra))//si descubrio la palabra
 {
 palabras_descubiertas+=1;
 if(palabras_descubiertas==10)
 {
 printf("\nMe has descubierto 10 palabras. Deseas continuar \?(Y/N):");gets(linea);sscanf(linea,"%c",&probar_letra);
 if(toupper(probar_letra)=='N')
 {
 printf("\nTe reconozco como un buen contrincante...\n\n");
 system("PAUSE");
 break;
 }
 printf("\n\n");
 palabras_descubiertas=0;
 }
 else
 printf("\nHas descubierto la palabra...!\n\n");
 palabra_nueva(opcion);
 fallidas=0;
 system("PAUSE");
 
 }
 else
 {
 printf("\nLetras tecleadas:%s",G_letras_tecleadas);
 printf("\nProbar con:");gets(linea);
 if(!strcmp(linea,"retirarse"))
 {
 system("cls");
 printf("\nTE RENDISTES POR IGNORANTE...!\n\n");
 system("PAUSE");
 perdio=1;
 }
 else if(!strcmp(linea,"ayuda"))
 {
 if(!G_ayudado)
 {
 int index_ayuda=0;//index de la palabra con la que se quiere ayudar
 
 //ESTO ES PARA ASEGURARME QUE LA AYUDA SEA EFECTIVA
 do
 index_ayuda=(int) ((double) rand() / ((double) RAND_MAX + 1) * (strlen(G_palabra)-1));
 while(G_palabra_oculta[index_ayuda]!='_'); //mientras ya no este descubierta la palabra con la que se quiere ayudar
 
 sprintf(G_letras_tecleadas,"%s-%c",G_letras_tecleadas,G_palabra[index_ayuda]);//agrega la palabra a letras tecleadas
 reemplazar(G_palabra[index_ayuda],G_palabra,G_palabra_oculta);//se reemplaza la letra en palabra oculta
 G_ayudado=1;
 
 }
 else//SI YA LO HABIA AYUDADO
 {
 printf("\nIGNORANTE YA TE AYUDE...!\n\n");
 system("PAUSE");
 }
 }
 else
 {
 
 sscanf(linea,"%c",&probar_letra);//se obtiene la primera letra de la cadena 'linea'
 if (!buscar(probar_letra,G_letras_tecleadas))
 {
 sprintf(G_letras_tecleadas,"%s-%c",G_letras_tecleadas,probar_letra);//agrega la palabra a letras tecleadas
 if(reemplazar(probar_letra,G_palabra,G_palabra_oculta))
 puntaje+=20;
 else
 fallidas+=1;
 }
 else
 fallidas+=1;
 
 if(fallidas==MAX_FALLIDAS)
 {
 vidas-=1;
 if(vidas<0)
 {
 system("cls");
 printf("\nPERDISTES, SI ERES IGNORANTE...!\n\n");
 system("PAUSE");
 perdio=1;
 }
 else
 {
 system("cls");
 printf("\nFallaste la palabra era \"%s\",concentrate mas...\n\n",G_palabra);
 system("PAUSE");
 fallidas=0;
 palabra_nueva(opcion);
 }
 }
 
 }
 }
 
 
 
 
 }
 
 }
 printf("\nGRACIAS POR JUGAR...");
 printf("\nProgramado por:Manuel Gonzalez\n");
 system("PAUSE");
 return 0;
 }