Leoxz Posted July 10, 2011 Report Share Posted July 10, 2011 #include<stdio.h> #include<stdlib.h> #include<string.h> void jugador1(); void jugador2(); void Introducir_Palabra(); void ahorcadodib(); void limpiar_cadenas(); char jugadores[2][20],palabra[21]={'\0'},palabraremp[21],c,letra='\0',op,sf,coincidencia; char dibujo[6]={'O','/','|','\\','/','\\'}; int oportunidad=6; int x=0, y=0, z=0, longcad=0,ciclo=0,ciclo1=0,ciclo2=0,var=0,ganar=0; int ganados[2]={0,0},perdidos[2]={0,0},turno=1; int main(){ for(x=0;x<2;x++){ for(y=0;y<15;y++){ jugadores[x][y]='\0'; } } while(ciclo==0){ system("cls"); printf("\t\tJuego \"El Ahorcado\"\n\n"); printf("a) Nuevo Juego\nb) Estadisticas\nc) Salir\n\nSeleccione una opcion: "); fflush(stdin); scanf("%c",&op); switch(op){ case 'a': ciclo1=0; //Introduciendo los nombres de los jugadores if(jugadores[0][0]=='\0'){ system("cls"); printf("\t\tJuego Nuevo\n\n"); for(x=0;x<2;x++){ printf("Ingrese el nombre del jugador %d: ",x+1); fflush(stdin); gets(jugadores[x]); } } //fin introducir nombres // while(ciclo1==0){ system("cls"); printf("\t\tJuego Nuevo\n\n"); if(turno%2!=0)jugador1(); else jugador2(); turno++; } break; case 'b': break; case 'c': break; default: if(op == 'A' || op=='B' || op=='C'){ printf("Por favor seleccione la opcion con minusculas.\n"); system("PAUSE"); } else{ printf("Opcion Incorrecta, vuelva a seleccionar una opcion.\n"); system("PAUSE"); } break; } } system("PAUSE"); return 0; } void jugador1(){ limpiar_cadenas(); ciclo2=0; oportunidad=6; var=0; printf("Es turno de: %s para ingresar la palabra.\n",jugadores[0]); Introducir_Palabra(); while(ciclo2==0){ system("cls"); ahorcadodib(); } system("PAUSE"); } void jugador2(){ limpiar_cadenas(); ciclo2=0; oportunidad=6; var=0; printf("Es turno de: %s para ingresar la palabra.\n",jugadores[1]); Introducir_Palabra(); while(ciclo2==0){ system("cls"); ahorcadodib(); } system("PAUSE"); } void Introducir_Palabra(){ y=0; z=0; printf("Ingrese la palabra o frase: (20 caracteres maximo)\n"); while(z<=20){ fflush(stdin); c=getch(); if((c>=97 && c<=122) || c==32){ palabra[y]=c; if(c==' ')printf(" "); else printf("*"); y++; z++; if(z==19){ printf("\nCaracteres Completados.\nEsta seguro de que esta es la palabra o frase? Si(s)/No(n)\n"); fflush(stdin); scanf("%c",&sf); if(sf=='n' || sf=='N'){ z=0; y=0; char palabra[21]={'\0'}; } else { printf("Palabra ingresada exitosamente.\n"); break; } } } else if(c==13 && z>3){ printf("\nEsta seguro de que esta es la palabra o frase? Si(s)/No(n)\n"); fflush(stdin); scanf("%c",&sf); if(sf=='n' || sf=='N'){ z=0; y=0; char palabra[21]={'\0'}; } else { printf("Palabra ingresada exitosamente.\n"); break; } } else if(c==13 && z<3){ printf("Minimo 3 Caracteres.\n"); y--; } else if(c==8){ printf("\b\b"); y--; } else if((c>65 && c<90)){ printf("\nMinusculas Por favor.\n"); } } longcad=strlen(palabra); for(x=0;x<longcad;x++){ if(x==0){ palabraremp[x]=palabra[x]; coincidencia=palabra[x]; } else if(palabra[x]==' '){ palabraremp[x]=' '; x++; palabraremp[x]=palabra[x]; } else palabraremp[x]= '_'; } for(x=0;x<longcad;x++){ if(coincidencia==palabra[x]){ palabraremp[x]=palabra[x]; } } /* system("PAUSE"); */ } void ahorcadodib(){ ganar=0; if(oportunidad==5)dibujo[5]='\0'; if(oportunidad==4)dibujo[4]='\0'; if(oportunidad==3)dibujo[3]='\0'; if(oportunidad==2)dibujo[2]='\0'; if(oportunidad==1)dibujo[1]='\0'; if(oportunidad==0)dibujo[0]='\0'; if(turno%2!=0){ printf("%s tiene que adivinar.\n",jugadores[1]); printf("%s, te quedan %d oportunidades.\n\n",jugadores[1],oportunidad); } else{ printf("%s tiene que adivinar.\n",jugadores[0]); printf("%s, te quedan %d oportunidades.\n\n",jugadores[0],oportunidad); } printf("/////////ACME///////////\n"); printf("/// |\n"); printf("/// |\n"); printf("/// |\n"); printf("/// %c\n",dibujo[0]); printf("/// %c%c%c \n",dibujo[1],dibujo[2],dibujo[3]); printf("/// %c %c \n",dibujo[4],dibujo[5]); printf("/// \n"); printf("/// \n"); printf("/// \n"); printf("/// \n"); for(x=0;x<longcad;x++){ if(palabra[x]==palabraremp[x]){ ganar++; } if(ganar==longcad){ ciclo2=2; if(turno%2!=0){ printf("Has Ganado %s.\n",jugadores[1]); ganados[1]++; perdidos[0]++; } else{ printf("Has Ganado %s.\n",jugadores[0]); ganados[0]++; perdidos[1]++; } printf("Desean seguir jugando? Si (s) - No (n)\n"); fflush(stdin); scanf("%c",&op); if(op=='n' || op=='N'){ ciclo1=2; } else if(op=='s' || op == 'S'){ limpiar_cadenas(); } else{ printf("Seleccione s o n.\n"); } } } if(ciclo2==0){ for(x=0;x<longcad;x++){ printf("%c ",palabraremp[x]); } printf("\n\nIngrese una letra: "); fflush(stdin); scanf("%c",&letra); } else if(oportunidad==0){ printf("\nHas Perdido.\n"); } for(x=0;x<longcad;x++){ if(letra==palabra[x]){ palabraremp[x]=letra; } /*else{ var++; if(var==longcad){ oportunidad--; } } */ } if(letra>=65 && letra<=90){ printf("Por favor, ingrese la letra en minusculas.\n"); system("PAUSE"); } } void limpiar_cadenas(){ for(x=0;x<21;x++){ palabra[x]='\0'; palabraremp[x]='\0'; } char dibujo[6]={'O','/','|','\\','/','\\'}; } Estoy tratando de hacer un juego "Ahorcado" como trabajo para la U, todo bien, pero a veces cuando inserto la letra correcta, me descuenta uno, y no tiene que ser asi, es raro porque lo tengo con condicion creo que el error esta en la funcion ahorcadodib, esta como comentario, si lo pueden compilar para que lo vean. si me pudieran hechar una mano, muchas gracias saludos! Link to comment Share on other sites More sharing options...
Th3_K4T Posted July 11, 2011 Report Share Posted July 11, 2011 lo compilé y todo, me funciona, pero veo los siguientes errores: Dice que la palabra como máximo debe poseer 20 letras, pero de la forma que lo tienes te obliga a que tenga 20 y no menos... es frustrante no poder poner la palabra que tú quieras, al parecer es porque lo lees con getchar, por qué no lo lees directamente todo junto? El segundo error que veo es que no me descuenta puntaje ni nada si me equivoco, no pasa absolutamente nada si me equivoco?? El tercer problema es que no hay opción para devolverse al menú principal después de entrar al juego. Link to comment Share on other sites More sharing options...
lostinspacex Posted July 26, 2011 Report Share Posted July 26, 2011 (edited) lo tienes mal estructurado , el codigo deberìa ser mucho màs simple hice un seudocodigo mientras(vida!=0 \|| ganaste ==1 ){ pide letra lee letra if ( letrapertenece(letra)) { rellenar palabra en pantalla } else{ vida--; } } if(ganaste==1){ felicidades ganaste } else { perdiste volver al menu } asi mas o menos lo haría yo la unica paja serìa hacer una funciòn bool letrapertenece que identifique si la letra pertenece a la palabra o si esta repetida usando la palabra como variable global si quieres. Edited July 26, 2011 by lostinspacex Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now