Ayuda, problema ejercicio juego ahorcado

Iniciado por Philips, 7 Marzo 2019, 19:04 PM

0 Miembros y 1 Visitante están viendo este tema.

Philips

Soy novato en programación, el problema es que no puedo es restar las vidas o intentos. si me pueden ayudar porfavor 


#include <stdio.h>
#include <string.h>
int vidas=6;
int correctas=0;
main (){
void lineas(int n, char a[]);
char palabra[100];
char letra;
char guiones[100];
int longitud;
void buscar_letra(char p[], int n, char l, char g[]);
printf ("Digite la palabra a adivinar: ");
scanf ("%s", palabra);
fflush(stdin);
system("cls");
longitud= strlen(palabra);
lineas(longitud,guiones);
printf ("\n");
   printf("\n\t||===== ");                 
   printf("\n\t||    | ");
    printf("\n\t||      ");
    printf("\n\t||      ");
    printf("\n\t||      ");
   printf("\n\t||      ");
while (vidas>0){
printf ("\nDigite la letra: ");
scanf("%c",&letra);
fflush(stdin);
if (letra>= 'a'&& letra<='z'){
buscar_letra(palabra,longitud,letra,guiones);
}
else {
   printf ("\nNo es una letra o la letra es mayuscula (digite una letra minuscula)");
}
}
}



void buscar_letra(char p[100], int n, char l,char g[]){
int i;
for(i=0;i<n;i++){
   if ()
   if(p==l){
      printf ("%c", l);
   correctas++;
}else {
   printf ("*");
}

}

if (correctas==n){
   printf ("\n ADIVINASTE LA PALABRA!!!");
   printf ("\n Ganaste...");
}
}

void lineas(int n, char a[]) {
   int i;
for (i=0;i<n;i++){
   printf("* ", a);
}
}

digimikeh

Hola, este es tu código usando el tag de código del sitio...

No comprendo mucho de C, pero tu código no da algún error antes de compilar ?



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

int vidas=6;
int correctas=0;

main (){
     void lineas(int n, char a[]);
     char palabra[100];
     char letra;
     char guiones[100];
     int longitud;
     void buscar_letra(char p[], int n, char l, char g[]);

     printf ("Digite la palabra a adivinar: ");
     scanf ("%s", palabra);
     fflush(stdin);
     system("cls");
     longitud= strlen(palabra);
     lineas(longitud,guiones);
     printf ("\n");
     printf("\n\t||===== ");                 
     printf("\n\t||    | ");
     printf("\n\t||      ");
     printf("\n\t||      ");
     printf("\n\t||      ");
     printf("\n\t||      ");

     while (vidas>0){
          printf ("\nDigite la letra: ");
          scanf("%c",&letra);
          fflush(stdin);

          if (letra>= 'a'&& letra<='z'){
               buscar_letra(palabra,longitud,letra,guiones);
          } else {
               printf ("\nNo es una letra o la letra es mayuscula (digite una letra minuscula)");
          }
     }
}


void buscar_letra(char p[100], int n, char l,char g[]){
     int i;
     
     for(i=0;i<n;i++){
          if(p==l){
          printf ("%c", l);
          correctas++;

     }else {
          printf ("*");
     }

}

if (correctas==n){

      printf ("\n ADIVINASTE LA PALABRA!!!");
      printf ("\n Ganaste...");

}


void lineas(int n, char a[]) {
       int i;

       for (i=0;i<n;i++){
           printf("* ", a);
       }
}

Dungeons & dragons;
dragons.Attack();

K-YreX

EDITO: No había visto el último mensaje pero como he añadido los comentarios al código, lo dejo para que se puedan ver, si no es necesario lo modifico y lo quito... :-\

El código entre etiquetas de código GeSHi (tienes un desplegable encima del cuadro de texto cuando escribes o modificas un mensaje)... :rolleyes:
Además de eso, lo suyo es tabular el código para que sea más fácil identificar cada bloque y ver rápidamente a qué nivel está.
Te dejo el código con las etiquetas, más o menos tabulado y con comentarios de las cosas que hay que cambiar/mejorar:
Código (cpp) [Seleccionar]

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

int vidas=6; // variable global, no recomendado
int correctas=0; // variable global, no recomendado
main (){ // main es una funcion, tiene que devolver algo. Devuelve un int, es decir, int main(){...}
   void lineas(int n, char a[]); // las funciones se declaran fuera del main
   char palabra[100]; // mejor usar una constante para controlar la longitud
   char letra;
   char guiones[100]; // lo mismo que dos lineas atras
   int longitud;
   void buscar_letra(char p[], int n, char l, char g[]); // funcion -> fuera del main
   printf ("Digite la palabra a adivinar: ");
   scanf ("%s", palabra); // no es muy seguro para cadenas. Mejor fgets()
   fflush(stdin); // nada recomendado usar fflush para stdin
   system("cls"); // innecesario si estas empezando
   longitud= strlen(palabra);
   lineas(longitud,guiones);

// si estas empezando, el dibujo para cuando ya funcione lo importante
  printf ("\n");
  printf("\n\t||===== ");                
  printf("\n\t||    | ");
  printf("\n\t||      ");
  printf("\n\t||      ");
  printf("\n\t||      ");
  printf("\n\t||      ");

   while (vidas>0){ // no puedes ganar nunca si solo acaba cuando te quedas sin vidas
       printf ("\nDigite la letra: ");
       scanf("%c",&letra);
       fflush(stdin); // otra vez, nada recomendado
       if (letra>= 'a'&& letra<='z'){ // ponselo facil al usuario, convierte tu la letra a minuscula o mayuscula siempre
           buscar_letra(palabra,longitud,letra,guiones);
       }
       else{
           printf ("\nNo es una letra o la letra es mayuscula (digite una letra minuscula)");
       }
   }
}

void buscar_letra(char p[100], int n, char l,char g[]){ // mejor usar nombres que ayuden a seguir el funcionamiento
   int i;
   for(i=0;i<n;i++){
       if () // esto no pinta nada
       if(p==l){
           printf ("%c", l);
           correctas++;
       }else {
           printf ("*");
       }
   }

   if(correctas==n){
       printf ("\n ADIVINASTE LA PALABRA!!!");
       printf ("\n Ganaste...");
   }
}

void lineas(int n, char a[]) { // usar mejores nombres de variables
   int i;
   for (i=0;i<n;i++){
      printf("* ", a); // este formato no es correcto
   }
}


Y como veo que el <while> no funciona muy bien te pongo aquí los pasos que tienes que seguir:

letras_solucion := contarLetras(palabra_solucion)
mientras (vidas > 0 || !acertado)
   letra := pedirCaracter()
   si (existe(caracter, palabra_solucion))
       letras_acertadas := letras_acertadas + 1
       acertado := (letras_acertadas == letras_solucion)
   sino
       vidas := vidas - 1
   fin si
fin mientras

si (acertado)
   Has ganado
sino
   Has perdido
fin si

Ahora tienes que intentar traducir esto a lenguaje C. Puedes usar las funciones que he escrito yo o usar otras si así lo prefieres, pero tienes que implementarlas tú. Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

lola linares

Una gran sugerencia en este juego es que haya tres pistas (letras) ,lo cual te ayudaran a ir relacionando y formando las palabras de una manera más sencilla ,y cada vez que se progrese ir disminuyendolas