Ayuda con juego el ahorcado en lenguaje c

Iniciado por KIDRAP1, 25 Junio 2013, 22:43 PM

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

KIDRAP1

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 #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);
}

engel lex

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++
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.


KIDRAP1

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

satu

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í:

void error(int i) {
    switch(i) {
        case 1:
            printf("\n                                       _____ \t A");
            break;
        case 2:
            printf("\n                                      |    | \t H");
            break;
        case 3:
            printf("\n                                      |    0 \t O");
            break;
        case 4:
            printf("\n                                      |   /|\\ \t R");
            break;
        case 5:
            printf("\n                                      |   / \\ \t C");
            break;
        case 6:
            printf("\n                                      | \t A");
            break;
        case 7:
            printf("\n                                      | \t D");
            break;
        case 8:
            printf("\n                                       --------  O\n\n\n\n\n");
            break;
    }
}


Entonces ahora añades en tu función "imprimir", al final, esto:

for(i = 8; i >= oport; i--) {
    error(8 - i);
}


Y donde dibujas el muñequito, cambias todos los printf por:

for(i = 1; i <= 8; i++) {
    error(i);
}


Además tienes cosas como las llamadas a system que NO son estándar, deberías cambiarlo, por ejemplo puedes sustituir los

system("pause");

por

printf("Pulsa Enter para continuar...");
getchar();


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

Y fíjate que tienes un warning en

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"

for(i=0;i<strlen(cadena);i++) printf("%c",word[i]);

Puedes imprimir la palabra entera

printf("%s", word);


No sé si se me quedará algo.

Saludetes
Breakbeat como forma de vida