elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:52  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Duda con ahorcado en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con ahorcado en C  (Leído 809 veces)
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Duda con ahorcado en C
« en: 26 Diciembre 2011, 12:26 »

Estoy intentando hacer el juego del ahorcado en C con lo más básico (if,while,for,case..) pero me quedé estancado.Aquí os dejo mi código para que veáis lo que he hecho hasta ahora y a ver si me podéis ayudar a seguir.

Código:
/*Juego del ahorcado*/
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define f 6
# define c 6
int main ()
{
    char frase[f][c],palabra,letra;
    int cont,intentos=6,fallos=0,i,j;
    bool acertado=false;
    
    printf ("Introduce palabras \n");
    fflush (stdin);
    for (i=0;i<6;i++) {
        for (j=0;j<6;j++) {
            scanf ("%c",&frase[i][j]); } } /*Leemos las palabras que se introducen*/

   srand(time(NULL)); {
  
  int rand_num =1+rand()%6;
  printf("%c \n", palabras[rand_num]); } /*Seleccionamos una palabra aleatoria*/
  
  for (cont=0;cont<7;cont++) {        
      printf ("Introduce letra: \n");
      fflush(stdin);
      scanf ("%c",&letra); } /*Leemos las letras para comparar*/
  
  
    
    system ("PAUSE");
    return 0;
}

Gracias de antemano


« Última modificación: 27 Diciembre 2011, 16:55 por IR.M » En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
ZedGe

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #1 en: 26 Diciembre 2011, 13:37 »

dinos en que parte exactamenet te quedaste estancado.... seria mas rapido


En línea
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #2 en: 27 Diciembre 2011, 10:43 »

Pues en primer lugar me gustaría saber cómo se ponen tantos guiones bajos como letras tenga la palabra.

Y lo que más difícil me parece es cuando se introduce la letra,poner las letras "buenas" en el lugar que les corresponde,no sé si me explico-

Un saludo
En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
Ferno

Desconectado Desconectado

Mensajes: 282


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #3 en: 27 Diciembre 2011, 14:36 »

Y bueno tienes varias formas de hacerlo.
La primera vez que imprimas los guiones bajos para la palabra entera, solo debes imprimir la cantidad de caracteres de la palabra, para ello usa strlen() sobre cada char*, y con un loop será suficiente.

Para ir escribiendo cada letra, tendrás que ir limpiando la pantalla y volver a reescribir cada palabra, pero esta vez con las letras acertadas correspondientes. Puedes tener algún flag en el arreglo que te diga si la letra correspondiente fue acertada. Si es así, en el loop de impresión imprimís la letra, sino, un guión bajo!
En línea
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #4 en: 27 Diciembre 2011, 16:39 »

Y bueno tienes varias formas de hacerlo.
La primera vez que imprimas los guiones bajos para la palabra entera, solo debes imprimir la cantidad de caracteres de la palabra, para ello usa strlen() sobre cada char*, y con un loop será suficiente.

Para ir escribiendo cada letra, tendrás que ir limpiando la pantalla y volver a reescribir cada palabra, pero esta vez con las letras acertadas correspondientes. Puedes tener algún flag en el arreglo que te diga si la letra correspondiente fue acertada. Si es así, en el loop de impresión imprimís la letra, sino, un guión bajo!
Lo primero no hay otra forma de hacerlo? es que nunca he utilizado strlen() ni loop,tengo que hacerlo con lo más básico... pero muchas gracias por la respuesta

un saludo
En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
Ferno

Desconectado Desconectado

Mensajes: 282


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #5 en: 27 Diciembre 2011, 17:39 »

El for es un loop. Loop es sinónimo de repetición, con un loop uno hace referencia al for, while, do-while... y eso sí lo has utilizado!
Con respecto a strlen(), ¿Por qué no buscar en google un poco de info? es MUY SIMPLE de usar!

http://www.elook.org/programming/c/strlen.html
En línea
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #6 en: 27 Diciembre 2011, 18:06 »

El for es un loop. Loop es sinónimo de repetición, con un loop uno hace referencia al for, while, do-while... y eso sí lo has utilizado!
Con respecto a strlen(), ¿Por qué no buscar en google un poco de info? es MUY SIMPLE de usar!

http://www.elook.org/programming/c/strlen.html
Ah vale querías decir un bucle,eso sí lo he utilizado.Lo del strlen() no sé si lo podré utilizar ya que es para un trabajo de clase.De todas formas gracias por la aportación.

saludos
En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
Ferno

Desconectado Desconectado

Mensajes: 282


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #7 en: 27 Diciembre 2011, 18:20 »

Ok, básicamente, strlen() te devuelve la cantidad de caracteres de un char*. En este caso, cuantas letras posee cada palabra.
Entonces, para simularlo simplemente puedes recorrer cada char* (es decir cada palabra) con un bucle y utilizar un contador para ver cuantas letras posee cada palabra (el bucle iría desde el inicio hasta encontrar el carácter '\0' de fin de cadena).
Espero que se haya entendido.
En línea
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #8 en: 27 Diciembre 2011, 18:25 »

Ok, básicamente, strlen() te devuelve la cantidad de caracteres de un char*. En este caso, cuantas letras posee cada palabra.
Entonces, para simularlo simplemente puedes recorrer cada char* (es decir cada palabra) con un bucle y utilizar un contador para ver cuantas letras posee cada palabra (el bucle iría desde el inicio hasta encontrar el carácter '\0' de fin de cadena).
Espero que se haya entendido.
sisi entendí la idea y te lo agradezco mucho,pero voy a reutilizar código de un programa que hice hace tiempo para contar las letras de una palabra.

Según me vayan surgiendo dudas las iré poniendo aquí  ;D ;D

Un saludo a todos y felices fiestas  :)
En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Duda con ahorcado en C
« Respuesta #9 en: 28 Diciembre 2011, 19:51 »

Ahora queda hacer que dibuje un muñequito jajaja ;) Sólo téneis que compilar y crear un fichero en "/var" llamado "dicc" en el que la primera línea tenga la primera palabra, la segunda la pista, la tercera como la primera... etc.

Código
#include <stdio.h>
#include <string.h>
#define direcc "dicc.txt"
#define intentos 7
 
int main ()
{
printf ("Ah0rcad0 0.2 : Sagrini 2011 : 28/12/2011\n");
printf ("Intenta adivinar la palabra secreta. Animo, tienes 7 intentos!\n");
 
FILE *fp = fopen (direcc, "r+"); char word [6]; char pista [50];
if (fp == NULL) { printf ("[!] El archivo %s no existe!\n\n", direcc); return 1; }
while (!feof (fp))
{
printf ("\n---\n");
fgets (word, 6, fp); fgetc (fp);
fgets (pista, 50, fp);
printf ("PISTA: %s\n", pista);
int len = strlen (word); char palabra [len], final [len]; char car; int cont; int aciertos = 0, tick;
strncpy (palabra, word, len); memset (final, '-', len); final [len] = '\0'; palabra [len] = '\0';
 
while (strcmp (final, palabra) != 0)
{
final [0] = palabra [0];
printf ("Escribe una letra: "); car=getchar ();
for (cont=0; cont<len; cont++) if (car == palabra [cont]) { final [cont] = car; tick = 1; }
if (tick != 1) aciertos++;
else tick = 0; while (getchar () != '\n');
printf ("%s (%d fallos)\n", final, aciertos);
if (aciertos >= intentos) break;
}
 
if (aciertos >= intentos) printf ("\nMala suerte, otra vez sera!\n");
else printf ("\nFelicidades! ;) %d fallo/s!\n", aciertos);
}
 
fclose (fp); return 0;
}
 
 
 


Modif: Modifico la línea "if (aciertos >= 5)   printf ("\nMala suerte, otra vez sera!\n");" en donde el 5 debería ser un 7. Esto me ha ocurrido porque al principio el número de intentos al principio era 5, pero luego decidí establecerlo en 7. Podría solucionarse con un "#define" al principio del programa. Esto podría aplicarse también a "/var/dicc". Modifico el código con todas las mejoras aquí descritas. No he probado las mejoras, pero no deberían dar errores. Un saludo.
« Última modificación: 30 Diciembre 2011, 13:52 por Sagrini » En línea

Un saludo. Sagrini
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Duda con ahorcado en C
« Respuesta #10 en: 28 Diciembre 2011, 21:37 »

Hola

Yo también he hecho una versión un poco parecida a la de Sagrini, aunque yo no utilizo lo de las pistas

Aquí la teneis

Código
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
 
#define num_elementos 15 //Numero de palabras que hay en el fichero
#define fich "palabras.txt" //En el fichero "palabras.txt" guardamos las palabras. Una por linea. Deja una linea en blanco al final
 
int main ()
{
   int intentos, cont, p, tam, flag;
   char palabra[12], car, palabras[num_elementos][12], salir = 'n';
 
   printf("\n\n-----=====BIENVENIDO AL JUEGO DEL AHORCADO=====-----    by satu");
 
   FILE *fp;
   fp = fopen(fich, "r");
   if(!fp)
   {
       printf("Fallo al abrir fichero %s\n\n", fich);
       return -1;
   }
 
   for(cont = 0; cont < num_elementos; cont++)
   {
       fgets(palabras[cont], 12, fp);
       tam = strlen(palabras[cont]);
       palabras[cont][tam-1] = '\0';
   }
   fclose(fp);
 
   do
   {
       intentos = 5; //Numero de intentos para acertar la palabra
       flag = 0; //Nos indica si la letra esta en la palabra o no
       car = 0; //Caracter que vamos introduciendo en cada iteracion
 
       srand(time(NULL));
       p = rand() % num_elementos; //Seleccionamos una palabra al azar
 
       tam = strlen(palabras[p]);
 
       memset (&palabra, '_', tam);
       palabra[tam] = '\0';
 
       while((strcmp(palabra, palabras[p]) != 0) && (intentos > 0))
       {
           printf ("\n\nIntentos restantes: %i\nPalabra de %i letras: %s\n", intentos, tam, palabra);
 
           printf ("\nEscribe una letra: ");
           car = getchar (); // car = fgetc (stdin);
 
           while(getchar() != '\n') ;
 
           for (cont=0; cont < tam; cont++)
               if (car == palabras[p][cont])
               {
                   palabra[cont] = car;
                   flag = 1;
               }
 
           if(flag == 0)
               intentos--;
           flag = 0;
       }
 
       if(intentos)
           printf("\n\nMUY BIEN La palabra era: %s\n\n", palabra);
       else
           printf("\n\nOOOOOOOOHHHHHHHHHH La palabra era: %s\n\n", palabras[p]);
 
       printf("Quieres salir? (s/n) ");
       salir = getchar();
       while(getchar() != '\n') ;
   }
   while(salir != 's' && salir != 'S');
 
   printf("Pulsa Enter para continuar...");
   getchar();
   return 0;
}
 

Saludos
En línea

Breakbeat como forma de vida
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #11 en: 30 Diciembre 2011, 11:36 »

Lo de los dibujitos lo hago de otra forma,como no puedo poner nada de lo que habéis puesto vosotros,pongo:
Código:
if (fallos=1) {
                                                     printf ("  
                                                                  |
                                                                  |
                                                                 _|_ ")

y así sucesivamente,es un coñazo,pero es lo que puedo hacer de momento.


Buff me está costando más de lo que pensaba este juego...  >:(
En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Duda con ahorcado en C
« Respuesta #12 en: 30 Diciembre 2011, 16:07 »

Hola

Recuerda que las comparaciones se hacen con == no con =

Saludos
En línea

Breakbeat como forma de vida
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #13 en: 30 Diciembre 2011, 16:15 »

Hola

Recuerda que las comparaciones se hacen con == no con =

Saludos
sisi eso ya está corregido.Os pongo mi código(lo que llevo hecho) a ver si voy bien encaminado:

Código:
/*Juego del ahorcado*/
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define f 6
# define c 6
int main ()
{
    char frase[i][c],palabra,letra;
    int cont,intentos=6,fallos=0,i,j;
    bool acertado=false;
    
    printf ("Introduce palabras \n");
    fflush (stdin);
    for (i=0;i<6;i++) {
        for (j=0;j<6;j++) {
            scanf ("%c",&frase[i][j]); } } /*Leemos las palabras que introducen*/

            
    printf ("Tienes 6 intentos \n");
    

    srand(time(NULL));  
    palabra = rand() % i; /*Seleccionamos una palabra aleatoria*/
  
    /*hay que escribir tantos guiones como letras haya*/
    for(i=0;i<26;i++){
                        frase[f][c]=0;}
    for(i=0;palabra!='\0';i++){
                        j=palabra-97;
                        frase[f][c]++;}
    for(i=0;i<26;i++){
             letra=i+97;
             printf("%c %i\n",letra,frase[f][c); /*aquí se tienen que escribir los guiones*/
                        
             for(cont=0;cont<=frase[f]c];cont++) {
                       printf ("_\t");}
             for (cont=0;cont<6;cont++) {
       printf ("Introduce letra: \n");
       fflush(stdin);
       scanf ("%c",&letra); } /*leemos la palabra introducida*/          
                      
                      
                      
                       }
  
    
    system ("PAUSE");
    return 0;
}
« Última modificación: 30 Diciembre 2011, 16:45 por IR.M » En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
folostia

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Duda con ahorcado en C
« Respuesta #14 en: 30 Diciembre 2011, 16:16 »

aún tengo muchas cosas que corregir y muchas incompletas,pero es lo que llevo hecho y me gustaría saber si voy bien encaminado
En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mi Ahorcado
Programación General
rapero1987 6 1,133 Último mensaje 5 Mayo 2005, 16:28
por rapero1987
Ahorcado!!
Programación C/C++
Pkñahackersina 7 1,883 Último mensaje 24 Noviembre 2009, 01:05
por SpesMod
C# el ahorcado
.NET
Err... 7 3,813 Último mensaje 10 Enero 2011, 15:24
por Khronos14
ahorcado
Programación C/C++
[JudasTeam]-BUG 8 1,179 Último mensaje 18 Junio 2011, 03:54
por BlackZeroX (Astaroth)
ahorcado en c
Programación C/C++
chivis cristian 1 221 Último mensaje 11 Diciembre 2011, 20:26
por [L]ord [R]NA
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines