Compartir entrada

miércoles, 29 de mayo de 2013

Juego “El ahorcado” en C

Uno de los grandes clásicos a la hora de iniciarse en la programación es mediante la realización del juego “El ahorcado”.

Juego “El ahorcado” en C
Foto tomada de freedigitalphotos.net
Cualquiera que busque un poco por la red encontrará ejercicios de todo tipo, usando funciones, varios arrays, punteros, listas, etc.

En éste ejemplo que os dejo sólo se usan arrays, conforme sigamos avanzando en el curso básico de C iremos expandiendo el programa.

El código es el siguiente:

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

int main() {
    char frase[60],rep[100],temporal[100];
    char pal;
    int longitud,i,j,inicial,acertado=0,temp=0,oportunidades=5;
    int repetido=0,gano=0;
   
    printf("\tJuego del Ahorcado\n");
    printf("Introduzca la palabra a adivinar: ");
    gets(frase);
   
    system("cls");
   
    longitud = 0;
    inicial = 0;
    j = 0;
   
    rep[0] = ' ';
    rep[1] = '\0';
   
   
    do {
                system("cls");
        temp=0;
   
        if(inicial == 0) {
         for(i=0;i<strlen(frase);i++) {
          if(frase[i] == ' ') {
            temporal[i] = ' ';
             longitud++;
          }
          else {
             temporal[i] = '_';       
             longitud++;
          }
         }
        }
   
        inicial = 1;
       
        temporal[longitud] = '\0';
       
        for(i=0;i<strlen(rep);i++) {
           if(rep[i] == pal) {
            repetido = 1;
            break;
          }
          else {
           repetido = 0;
         }
        }
       
        if(repetido == 0) {
         for(i=0;i<strlen(frase);i++) {
                    if(frase[i] == pal) {
             temporal[i] = pal;
              acertado++;
              temp=1;
            }
          }
        }
       
        if(repetido == 0) {
         if(temp == 0) {
           oportunidades = oportunidades - 1;
         }
        }
        else {
         printf("Ya se ha introducido este caracter");
         printf("\n\n");
        }
       
        printf("\n");
       
        for(i=0;i<strlen(temporal);i++) {
         printf(" %c ",temporal[i]);
        }
       
        printf("\n");
       
        if(strcmp(frase,temporal) == 0) {
            gano = 1;
            break;
        }
       
        printf("\n");
        printf("Letras Acertadas: %d",acertado);
        printf("\n");
        printf("Oportunidades Restantes: %d",oportunidades);
        printf("\n");
   
        rep[j] = pal;
        j++;
       
        if (oportunidades==0)
        {
           break;
        }
     
        printf("Introduzca una letra:");
        scanf("\n%c",&pal);
      
    }while(oportunidades != 0);
   
   
    if(gano) {
                printf("\n\n");
        printf("Enhorabuena, has ganado.");
    }
    else {
                printf("\n\n");
        printf("Has perdido.");
    }
   
    printf("\n\n");
    system("PAUSE");
    return 0;



¿Qué te parece el código? ¿Cómo lo mejorarías?

24 comentarios:

  1. Está excelente, pero deberías explicar como funciona el programa.
    Gracias.

    ResponderEliminar
  2. que funcion cumple rep[0] = ' '; y demas...
    es un buen codigo de programa pero hay cosas que no entiendo...soy novato en la programacion deberias explicarlo.. .. GRACIAS

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Al final si pierde el usuario que se releve la palabra.

    ResponderEliminar
  5. Muy bueno solamente una observación, falta la librería lo demás perfecto. Saludos.

    ResponderEliminar
  6. Deberias mejorar algo en ingresé palabra a adivinar es que cuando la ingrese la oculte la palabra por que siempre la acertan y adivinan qu es por la palabra que aparece en la parte de arriba ya lo estoy intentando si lo logro mando el fuente

    ResponderEliminar
  7. Deberias mejorar algo en ingresé palabra a adivinar es que cuando la ingrese la oculte la palabra por que siempre la acertan y adivinan qu es por la palabra que aparece en la parte de arriba ya lo estoy intentando si lo logro mando el fuente

    ResponderEliminar
  8. hola, cuando falla no funciona. no sale la frase de letra inroducida.

    ResponderEliminar
  9. me marca error en esta
    system("cls");

    ResponderEliminar
  10. me marca error en esta
    system("cls");

    ResponderEliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. Es porque necesitas la librería stdlib.h

    ResponderEliminar
    Respuestas
    1. No, en la libreria le hace falta #include para sacar el error:)

      Eliminar
    2. No, en la libreria le hace falta #include para sacar el error:)

      Eliminar
  13. Hola, modifiqué tu código para solventar los problemas que produce el hecho de que la matriz rep siempre empieza con '\0'. Uno de estos problemas es que no te muestra el mensaje cuando repites una letra. El código es el siguiente:

    #include stdio.h //los nombres de las librerías deben ir entre <> !!!
    #include string.h
    #include stdlib.h

    int main() {
    char frase[60],rep[100],temporal[100];
    char pal=-87;
    int longitud=0,i,j=0,inicial=0,acertado=0,temp=0,oportunidades=5;
    int repetido=0,gano=0;

    printf("\tJuego del Ahorcado\n");
    printf("Introduzca la palabra a adivinar: ");
    gets(frase);

    system("cls");

    do {

    temp=0;

    if(inicial == 0) {
    for(i=0;i<strlen(frase);i++) {
    if(frase[i] == ' ') {
    temporal[i] = ' ';
    longitud++;
    }
    else {
    temporal[i] = '_';
    longitud++;
    }
    }
    inicial = 1;
    temporal[longitud] = '\0';
    }
    else {

    for(i=0;i<strlen(rep);i++) {
    if(rep[i] == pal) {
    repetido = 1;
    break;
    }
    else {
    repetido = 0;
    }
    }

    if(repetido == 0) {
    rep[j] = pal;
    j++;
    for(i=0;i<strlen(frase);i++) {
    if(frase[i] == pal) {
    temporal[i] = pal;
    acertado++;
    temp=1;
    }
    }
    }

    if(repetido == 0) {
    if(temp == 0 && pal!=-87) {
    oportunidades = oportunidades - 1;
    }

    system("cls");

    for(i=0;i<strlen(temporal);i++) {
    printf(" %c ",temporal[i]);
    }

    printf("\n");

    if(strcmp(frase,temporal) == 0) {
    gano = 1;
    break;
    }
    printf("\n");
    printf("Letras Acertadas: %d",acertado);
    printf("\n");
    printf("Oportunidades Restantes: %d",oportunidades);
    printf("\n");
    }
    else {
    printf("Ya se ha introducido la '%c' en esta partida. ",pal);
    }
    if (oportunidades!=0)
    {
    printf("Introduzca una letra:");
    scanf(" %c",&pal);
    }

    }

    }while(oportunidades != 0);


    if(gano) {
    printf("\n\n");
    printf("Enhorabuena, has ganado.");
    }
    else {
    printf("\n\n");
    printf("Has perdido.");
    }

    printf("\n\n");
    system("PAUSE");
    return 0;
    }

    ResponderEliminar
  14. hola! quisiera saber para que son las variables latitud y longitud. gracias!

    ResponderEliminar

 
Google+