jueves, 22 de diciembre de 2011

Ahorcado por consola con C

como dice el titulo es un juego realizado con C que se juega por la consola. disculpen que no ponga los "<>" a los include es que si se los ponia el codigo perdia formato.


#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( time( 0) );
    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;
}

No hay comentarios:

Publicar un comentario