Ayuda, programa en C .. El ahorcado....

Iniciado por TopoJunior, 14 Febrero 2013, 19:58 PM

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

TopoJunior

El código hasta ahora me va bien. Explico : Van a ser 3 palabras, no solo uno, por eso creé el aleatorio. El caso es qué, como veis, si introducimos una tecla f, lo que el programa hará va a ser esto . F _ _ _ _ _ _ Bien... Si introducimos u , lo que correctamente debería hacer sería, F U _ _ _ _, pero claro, de esta manera, lo que hace es borrar F y poner U. ¿Cómo haría para que Si pongo por ejemplo, primero U . Salga _ U _ _ _ _ y luego, introduzco F y siga con la palabra y no diga que no está. F u _ _ _ _ __ ? Gracias de antemano:D
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <time.h>
#include <conio.h>

main()
{
      char ch;
      char ch1;
      int errores1;
      errores1 = 0;
   srand (time(NULL));
   int aleatorio;
   aleatorio = rand() % 3+1;
   if(aleatorio == 2)
   {
   printf("Te ha tocado esta palabra\n"); // La palabra es FUTBOL
   printf("_ _ _ _ _ _");
   printf("Ve escribiendo las letras\n");
    ch=getchar();
   if(ch == 'f') {
      printf("Bien, has acertado. F _ _ _ _ _\n");         
          }
              else if(ch == 'u') {
                   printf("Has acertado. _ U _ _ _ _\n");
                   }
                   
   }
   
   else
   {
       errores1++;
       printf("Has fallado. Llevas %d errores.", errores1);
   }
while(1);
}

Al-hazred

Incluyes una cabecera que no usas (conio.h) y te falta la cabecera stdlib.h para poder usar las funciones de generación de números aleatorios. En la linea 34 usas un while infinito sin usar do anteriormente, lo cual en sí no es un error pero quiero creer que tu intención no es que se quede colgado tu juego. Trata de implementar un do-while que cheque el número de oportunidades gastadas, y definir cuantas oportunidades tiene el usuario. Incluye la cabecera ctype.h para convertir las letras introducidas por el usuario a minúsculas y compararlas en un bucle for con, en este caso, la palabra futbol, la cual puede ser un array de char previamente definida.

Puntoinfinito

Creas una variable que será la de la palabra, de tipo char o string;

char palabra_padre[128] = "_ _ _ _ _ _ _";

Entonces haces los if's normales tal cual los has hecho pero ahora se modificara la variable y no se pondrá directamente un output escrito;

palabra_padre[0] = F; cout << palabra_padre;

Y así saldrá F _ _ _ _ _ _ ...

¿Era esto?, Saludos  :D
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

leosansan

Cita de: TopoJunior en 14 Febrero 2013, 19:58 PM
El código hasta ahora me va bien. Explico : Van a ser 3 palabras, no solo uno, por eso creé el aleatorio.

Pues yo te he puesto cuatro  :-\. Era para que una de ellas tuviera repetida alguna letra  :laugh:.

Es un código muy mejorable, pero así tienes donde fijarte:


Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <string.h>

int main(){
  char ch;
  char palabra[10]={0},palabras[4][10]={"futbol","pala","balon","pelota"} ;/*con letra repetida*/
  int i,j,cont=0,errores=0,intentos=0,flag=0;
  srand (time(NULL));
  int aleatorio;
  aleatorio =rand() % 3;
  for (i=0;i<3;i++)
    printf("%s  ",palabras[i]); /*para que veas las palabras*/
  printf("\n\nTe ha tocado esta palabra: \n\n");
  for (i=0;palabras[aleatorio][i]!='\0';i++){
     printf("_ ");palabra[i]='_';
  }
  palabra[i]='\0';
  printf("\n\n Tienes 10 intentos.\n\n");
  do{
    intentos++;
    printf("\n\nVe escribiendo las letras. Intento %d\n",intentos);
    ch=getchar();
    while (getchar ()!='\n');
    for (i=0;palabra[i]!='\0';i++){
      if(ch == palabras[aleatorio][i] && palabra[i]=='_') {
          palabra[i]=toupper(ch);
          puts("\n");
          for (j=0;j<strlen (palabra);j++)
            printf("%c ",palabra[j]);
          flag=1;cont++;
      }
    }
    if (flag ==0) {
      errores++;
      printf("Has fallado. Llevas %d errores.\n", errores);
    }
    else {
      printf("  Bien, has acertado.\n");
      flag=0;
    }
    if (cont==strlen (palabra)){
       if (errores==0)
        printf("\n\n  TOTAL ACIERTO.\n\n");
       else
        printf("\n\n  ACIERTO con %d errores.\n\n",errores);
       return 1;
    }
  } while (intentos<10);
  return EXIT_SUCCESS;
}


Saluditos!.

X3R4CK3R

Te dejo un ahorcado que hice hace unos 4 años como referencia, si miras abajo tienes un código completamente comentado, si aún así tienes duda no dudes en preguntar. ;)

http://foro.elhacker.net/programacion_cc/c_ahorcado_v100_anadida_la_version_v200-t239941.0.html

Saludos