Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: KIDRAP1 en 25 Junio 2013, 22:43 pm



Título: Ayuda con juego el ahorcado en lenguaje c
Publicado por: KIDRAP1 en 25 Junio 2013, 22:43 pm
Hola muchachos el problema es el siguiente tengo que realizar el siguiente programa con las especificaciones de que tenga 8 oportunidades equivalente alas 8 letras que tiene la palabra "AHORCADO" y que cada vez que el usuario se equivoque se valla escribiendo letra por letra por cada error la palabra ahorcado. aqui les dejo el codigo espero puedan ayudarme
Código:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<math.h>
#include<ctype.h>
#define TRUE 1
#define FALSE 0
void imprimir(int oport, char *wordserr,char *word);
int found_word(char letra);
int menu(void);
int exist_word(char letra);
char *adivina(void)
{
char *diccionario[]={"UNEFA","VENEZUELA","SILLA","PERRO","SOMBRILLA",
      "PAJARO","GATO","CONEJO","ZORRO","CABALLO","PEZ",
     "MATEMATICA","CLAVO","LAPIZ","MADERA","PEGA","CASA",
     "ELECTRONICA","CIRCUITO","AGUA","TABLA","PESAS","BARCO",
     "LANCHA","CASA","BOLIVAR","BICICLETA","MONTAÑA",
     "VECTOR","FISICA","LICENCIA","BEISBOL","FUTBOL",
     "BASKET","CABLE","NATACION","MARATON","IMPRESORA",
     "COMPUTADORA","CAMARA","ZAMURO","AHORCADO","IMPRIMIR",
     "DISCO","FOTO","MARCO","GRANDEZA","PROGRAMA","MOVIMIENTO",
     "CADENA","BALLENATO","NOCHE","DIA"};
int num;
srand( (unsigned)time( NULL ) );
num=rand()%50;
return(diccionario[num]);
}

char *cadena, palabra[10], letraserror[10];
main(){
       system ("color a0");
          printf("\n\n\t\t     Programadores: Jose Castillo, Luis Osorio\n\n\t\t\t\t#Juego del Ahorcado#\n\n\n\t\n\n");
          printf("                         \t       _____");
printf("\n                                      |");
printf("\n                                      |  0");
printf("\n                                      | /|\\");
printf("\n                                      | / \\ ");
printf("\n                                      |\n");
printf("\n                                      |\n\n\n\n\n");
       system ("pause");
       
int i, cont=0,game_over=FALSE, oportunidades, acierto=FALSE, existe;
int opc=0;
char letra;
system("cls");
opc=menu();
do{
system("cls");
switch(opc){
case 1:
cadena=adivina();
strcpy(palabra,cadena);
oportunidades=8;
for(i=0;i<strlen(cadena);i++) palabra[i]='$';
for(i=cont;i>=0;i--) letraserror[i]='\0';
cont=0;
do{
do{
fflush(stdin);
system("cls");
existe=acierto=FALSE;
imprimir(oportunidades,letraserror,palabra);
printf("\n\n\tEscriba una letra: ");scanf("%c",&letra);
existe=exist_word(letra);
}while(existe);//fin do while
acierto=found_word(letra);
if(acierto){
if(strcmp(palabra, cadena)!=0){game_over=FALSE; continue;}
else game_over=TRUE;
}//fin if.
else {
letraserror[cont++]=letra;
--oportunidades;
}//fin else.
}while(oportunidades>0&&game_over==FALSE);//fin do while.
system("cls");
if(game_over&&oportunidades>4){
imprimir(oportunidades,letraserror,palabra);
printf("\n\tEXCELENTE TRABAJO!");}//fin if.
else if(game_over&&oportunidades>2){
imprimir(oportunidades,letraserror,palabra);
printf("\n\tMUY BUEN TRABAJO!");}//fin else if.
else if(game_over){
imprimir(oportunidades,letraserror,palabra);
printf("\n\tHas ganado!!");}//fin else if.
else {
                 printf("\n\tESTAS AHORCADO!\n\n\t");
printf("\LA PALABRA ERA..");
         
for(i=0;i<strlen(cadena);i++) printf("%c",cadena[i]);
   printf("\t      _____");
printf("\n                                      |");
printf("\n                                      |  0");
printf("\n                                      | /|\\");
printf("\n                                      | / \\ ");
printf("\n                                      |\n");
printf("\n                                      |\n\n\n\n");     
}//fin else.
game_over=FALSE;
break;//fin case 1.
case 2: exit(0);break;//fin case 2.
}//fin switch.
fflush(stdin);
opc=menu();
}while(opc==1);
}
void imprimir(int oport, char *wordserr,char *word)
{  int i;
   printf("\n\n\t\t\t    Adivina la Palabra Oculta\n\n\n\t");
   if(oport<6){
printf("\n\n\t\007Letras erradas: ");
for(i=0;i<strlen(wordserr);i++) printf("%c ",wordserr[i]);
   }
   printf("\n\n\t");
   for(i=0;i<strlen(cadena);i++) printf("%c",word[i]);
   printf("\n\n\tChances= %d\n",oport);
}
int menu(void)
{     
int opcion;
printf("\n\n\n                       _______________________________________");
        printf("\t\t\t\t\t      |            (1). Jugar                 | \n ");
printf("\n\t\t      |            (2).Salir del juego        | \n ");
printf("\n\t \t      |     Elija una opcion para continuar:  |");
printf("                                   \t____________________________________");
     scanf("%d",&opcion);
     return(opcion);
   
}
int found_word(char letra)
{
int acierto=FALSE,i;
letra=toupper(letra);
for(i=0;i<strlen(cadena);i++){
if(letra==cadena[i]){
palabra[i]=letra;
acierto=TRUE;}
}
return(acierto);
}
int exist_word(char letra)
{
int existe=FALSE,i;
for(i=0;i<strlen(letraserror);i++){
if(letra==letraserror[i]) {
printf("\nYa la escribistes!.\n");
existe=TRUE;
system("pause");
}
}
return(existe);
}


Título: Re: Ayuda con juego el ahorcado en lenguaje c
Publicado por: engel lex en 26 Junio 2013, 04:29 am
no sabia que eras de venezuela... bueno...
1- deja los errores que te da el codigo o en que te trancas
2- creo que lo pusiste en el subforo incorrecto (esto es hacking wireless XD)

un consejo para que tu codigo se vea bonito, usa etiquetas GeSHi (entre el menú para escribir post justo arriba de cambiar color de texto y colocalo como c++


Título: Re: Ayuda con juego el ahorcado en lenguaje c
Publicado por: KIDRAP1 en 27 Junio 2013, 06:12 am
ok


Título: Re: Ayuda con juego el ahorcado en lenguaje c
Publicado por: KIDRAP1 en 27 Junio 2013, 06:14 am
no tengo idea de como colocarlo como quiero, el programa en si no tiene ningun problema solo quiero agregarle que por cada error se valla escribiendo letra por letra la palabra ahorcado


Título: Re: Ayuda con juego el ahorcado en lenguaje c
Publicado por: satu en 27 Junio 2013, 13:24 pm
Buenas!!

Una solución puede ser crearte una función que vaya imprimiendo el muñequito paso a paso, según el usuario vaya fallando, una cosa así:
Código
  1. void error(int i) {
  2.    switch(i) {
  3.        case 1:
  4.            printf("\n                                       _____ \t A");
  5.            break;
  6.        case 2:
  7.            printf("\n                                      |    | \t H");
  8.            break;
  9.        case 3:
  10.            printf("\n                                      |    0 \t O");
  11.            break;
  12.        case 4:
  13.            printf("\n                                      |   /|\\ \t R");
  14.            break;
  15.        case 5:
  16.            printf("\n                                      |   / \\ \t C");
  17.            break;
  18.        case 6:
  19.            printf("\n                                      | \t A");
  20.            break;
  21.        case 7:
  22.            printf("\n                                      | \t D");
  23.            break;
  24.        case 8:
  25.            printf("\n                                       --------  O\n\n\n\n\n");
  26.            break;
  27.    }
  28. }

Entonces ahora añades en tu función "imprimir", al final, esto:
Código
  1. for(i = 8; i >= oport; i--) {
  2.    error(8 - i);
  3. }

Y donde dibujas el muñequito, cambias todos los printf por:
Código
  1. for(i = 1; i <= 8; i++) {
  2.    error(i);
  3. }

Además tienes cosas como las llamadas a system que NO son estándar, deberías cambiarlo, por ejemplo puedes sustituir los
Código
  1. system("pause");
por
Código
  1. printf("Pulsa Enter para continuar...");

Además main debe devolver un int, que debe ser 0 si el programa finalizó correctamente.

Y fíjate que tienes un warning en
Código
  1. printf("\LA PALABRA ERA..");
por el \L. Borra la barra \

Y otra cosa, a veces utilizas un bucle for para imprimir palabras letra por letra, como por ejemplo en la función "imprimir"
Código
  1. for(i=0;i<strlen(cadena);i++) printf("%c",word[i]);
Puedes imprimir la palabra entera
Código
  1. printf("%s", word);

No sé si se me quedará algo.

Saludetes