Funciones del juego:
- Permite seleccionar entre 3 categorías de palabras (Animales, Países, Difíciles).
- Podemos ingresar nuevas palabras o utilizar las que ya están guardadas.
- Muestra el numero de oportunidades restantes.
- Podemos volver a jugar nuevamente en una categoría distinta si lo deseamos.
Capturas:
Código:
Ahorcado.c
/*Version 1.0.1*/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include<time.h> #include<windows.h> #include<math.h> #include<ctype.h> //Prototipo de funciones void menu(); void carga(); void animales(); void paises(); void dificiles(); void juego(char palabra[50][20], int n); void rotulo(int e); void pieder(); void pieizq(); void made(); void maiz(); void base(); void cuerpo(); void cabeza(); void gotoxy(short x, short y); //Funcion principal se encarga de llamar a la funciones carga y menu int main(){ carga();//llamada de la funcion "carga" menu();//llamada de la funcion "menu" system("pause"); return 0; }// Termina la funcion principal void carga(){//funcion encargada de de mostrar la barra de carga del programa int c, m=6; system("cls"); system("color 48"); gotoxy (30,5);printf("Cargando......"); Sleep(200); for(c=15;c<=75; c++){ m++; gotoxy (m,10); printf("%c",219); gotoxy(6,15);printf("\n\n\n\n\n\tAHORCADO V 1.0.0 "); Sleep(100); } printf("\a");system("cls"); } void menu(){ char op; do{//imprime el menu principal varias veces hasta que sea necesareo system("cls"); gotoxy (30,1); printf ("JUEGO DEL AHORCADO"); gotoxy (30,4); printf("Seleccione Categoria");fflush(stdin); gotoxy (30,6); printf("1.Animales"); gotoxy (30,8); printf("2.Paises"); gotoxy (30,10); printf("3.Dificiles"); gotoxy (30,12); printf("4.Salir"); gotoxy (30,14); printf("Ingrese opcion: "); scanf("%c",&op); }while(op<'1'||op>'4');//evalua los datos ingresados por el usuario switch(op){//seleeciona el caso ingresado por el usuario case '1': animales();break;// llamado a la funcion animales case '2': paises();break;// llamado a la funcion paises case '3': dificiles();break;// llamado a la funcion dificiles case '4':printf("\n\nGracias por utilizar nuestro programa.....\n\n");break; } } void animales(){ char palabra[50][20]={"murcielago","tiburon","perro","chancho","gato","cerdo","gallina","elefante","vaca","serpiente","mono","rata"}; //asignacion de palabras a una lista int n=0, i; char op; fflush(stdin); do{// muestra el menu si no se cumple la condicion fflush(stdin); system("cls"); gotoxy (30,1); printf("CATEGORIA NOMBRE DE ANIMALES"); gotoxy (30,4); printf("1.Ingresar nueva palabra"); gotoxy (30,6); printf("2.Jugar con lista existente"); gotoxy (30,8); printf("3.Retornar al menu principal"); gotoxy (30,10); printf(" Ingrese opcion: "); scanf("%c",&op); }while(op<'1'||op>'3');//evaluacion de las datos ingresados por el usuario switch(op){ case'1':// añade mas palabras a la lista do{ system("cls"); printf("\n Digite cantidad de palabras: "); scanf("%d",&n);//captura el numero de palabras }while(n<0); for(i=3;i<=n+2;i++) {fflush(stdin); system("cls"); printf("\n Ingrese palabra: "); gets(palabra[i]);//captura la palabra y la almacena en la pocision i de la lista } juego(palabra,n);break;//llamado a la funcion juego y la manda la lista modificada case'2':juego(palabra,n);break;//llama al funcion juego y le manda la lista con las palabras asignadas case'3':menu();break;// llama a la funcion menu } } void paises(){ char palabra[50][20]={"afganistan","japon","alemania","cuba","venezuela","alemania","peru","paraguay","turquia","checoslovaquia","suriname","banladesh","africa"}; //asignacion de palabras a una lista int n=0, i; char op; do{// muestra el menu si no se cumple la condicion fflush(stdin); system("cls"); gotoxy (30,1); printf("CATEGORIA NOMBRE DE PAISES "); gotoxy (30,4); printf("1.Ingresar nueva palabra"); gotoxy (30,6); printf("2.Jugar con lista existente"); gotoxy (30,8); printf("3.Retornar al menu principal"); gotoxy (30,10); printf(" Ingrese opcion: "); scanf("%c",&op); }while(op<'1'||op>'3');//evalua los datos imgresados por el usuario switch(op){ case'1':// añade mas palabras a la lista do{system("cls"); printf("\n Digite cantidad de palabras: "); scanf("%d",&n);//captura el numero de palabras }while(n<0); for(i=3;i<=n+2;i++){fflush(stdin); system("cls"); printf("\n Ingrese palabra: "); gets(palabra[i]);//captura la palabra y la almacena en la pocision i de la lista } juego(palabra,n);break;//llamado a la funcion juego y la manda la lista modificada case'2':juego(palabra,n);break;//llama al funcion juego y le manda la lista con las palabras asignadas case'3':menu();break;// llama a la funcion menu } } void dificiles(){ char palabra[50][20]={"hidraulica","clorhidrato","electrostatica","miercoles","computadora","musica","nada","sandia","puta","mundo","ahorcado","teclado","palabra"}; //asignacion de palabras a una lista int n=0, i; char op; do{ // muestra el menu si no se cumple la condicion fflush(stdin); system("cls"); gotoxy (30,1); printf("CATEGORIA PALABRAS DIFICILES"); gotoxy (30,4); printf("1.Ingresar nueva palabra"); gotoxy (30,6); printf("2.Jugar con lista existente"); gotoxy (30,8); printf("3.Retornar al menu principal"); gotoxy (30,10); printf(" Ingrese opcion: "); scanf("%c",&op); }while(op<'1'||op>'3');//evaluacion de las datos ingresados por el usuario switch(op){ case'1'://añade mas palabras a la lista do{system("cls"); printf("\n Digite cantidad de palabras: "); scanf("%d",&n);//captura el numero de palabras }while(n<0); for(i=3;i<=n+2;i++) {fflush(stdin); system("cls"); printf("\n Ingrese palabra: "); gets(palabra[i]);//captura la palabra y la almacena en la pocision i de la lista } juego(palabra,n);break;//llamado a la funcion juego y la manda la lista modificada case'2':juego(palabra,n);break;//llamado a la funcion juego y la manda la lista modificada case'3':menu();break;// llama a la funcion menu } } void juego(char palabra[50][20], int n){ int contador,longitud,i,j, e,error, m=13; char palabras[30], respuesta[30], letra, res, res1; do{system("cls"); gotoxy (30,1); printf ("JUEGO DEL AHORCADO"); base();//lama a la funcion base rotulo(0);//llama ala funcion rotulo para ver el numero de oportunidades restantes srand (time (NULL)); longitud=rand()%(m+n);//genera un numero aleatorio y lo almacena en la variable longitud e=0; contador=0; strcpy(palabras,palabra[longitud]);//copia en la variable una variable de la lista longitud=strlen(palabras);//se obtiene el tamaño de la palabra y se almacena en longitud gotoxy(4,30); for (i=0; i<longitud ; i++){fflush(stdin); respuesta[i]='*';//se almacena * en un vector printf (" %c ", respuesta[i]);// se imprime * en el lugar de las letras } do{ fflush (stdin); gotoxy (4,32); printf ("Ingrese una letra: "); scanf ("%c", &letra);//captura una letra letra=tolower(letra);//convierte unna letra mayuscula en minuscula gotoxy (21,32);printf(" "); error=0;//se inicializa en 0 gotoxy(4,30); for(j=0; j<longitud; j++) { if (letra==palabras[j]){/*compara si la letra ingresada por el usuario corresponde a una posicion de la palabra*/ if(letra!=respuesta[j]){ respuesta[j]=letra;// la susttituye por el * contador++;//aumenta contador en uno } } else{ error++;//aumenta error en uno } printf (" %c ", respuesta[j]);//imprime la letra correcta } if(error==longitud){//entra si la letra ingresada no corresponde a ninguna de la palabra a adivinar e++;//segun la cantidad de letras erroneas aumenta en 1 } rotulo(e);//llama ala funcien rotunlo y le envia e switch (e){//segun nel numero de errores selecciona un caso case 1:cabeza();break;//llama a la funcion que dibuja la cabeza case 2:cuerpo();break;//llama a la funcion que dibuja el cuerpo case 3:made();break;//llama a la funcion que dibuja la mano derecha case 4:maiz();break;//llama a la funcion que dibuja la mano izquierda case 5:pieizq();break;//llama a la funcion que dibuja la piena izquierda case 6:pieder();break;//llama a la funcion que dibuja la piena derecha } }while(contador<longitud && e<6); if(e==6){//entra si ninguna de las letras corresponden ala palabra o se cometieron 6 errores gotoxy(4,32);printf ("Lo siento, Usted ha perdido. \n Presione una tecla para ver la respuesta correcta"); getch();gotoxy(4,30); for(j=0; j<longitud; j++){ printf (" %c ", palabras[j]);//imprime la palabra } } if(contador==longitud){//entra si todas las letras ingresadas corresponden a la palabra o se cometieron menos de 6 errores if(e==0){//si no se cometio ningun error gotoxy(4,32);printf ("Felicidades, Usted ha ganado sin cometer ningun error"); } else{//si se cometirooon pocos errores gotoxy(4,32);printf ("Felicidades, Usted ha ganado, con %d intentos fallidos", e); } } fflush(stdin); gotoxy(4,35);printf ("Precione S para continuar la misma categoria.... "); scanf("%s",&res);fflush(stdin); }while(res=='S' || res=='s');//si el caracter ingresado es S repite el juego gotoxy(4,37);printf ("Precione N para cambiar de categoria.... "); scanf("%s",&res1); if(res1!='N' || res1!='n'){// si el caracter ingresado es N cambia de categoria menu(); } else{ printf("\n Gracias por usar nuestro programa......"); } } /*funcion que muestra el rotulo en donde menciona el numero de oportunidades que quedan*/ void rotulo(int e){ int f=0; f=6-e; gotoxy (40,3); printf(" _____________________________"); gotoxy (40,4); printf("| |"); gotoxy (40,5); printf("| Usted tiene %d |",f); gotoxy (40,6); printf("| Oportunidades |"); gotoxy (40,7); printf("|_____________________________|"); } //Funcion que imprime la mano derecha void made( void){ int j; for(j=0;j<3;j++){ gotoxy(19-j,10+j); printf("*"); } } //Funcion que imprime la mano izquierda void maiz(void){ int i; for(i=0;i<3;i++) { gotoxy(23-i,12-i); printf("*"); } } // funcion que imprime el cuerpo void cuerpo(){ int i; for(i=0;i<9;i++) { gotoxy(20,9+i); printf("*"); } } //funcion que imprime la horca void base(){ int x,y; system("mode 80"); for(x=2;x<=27;x++){ gotoxy(10,x);printf("*"); } for(y=11;y<=20;y++){ gotoxy(y,2);printf("*"); } for(y=5;y<=15;y++){ gotoxy(y,28);printf("*"); } gotoxy(20,3);printf("*"); gotoxy(20,4);printf("*"); } //Funcion que imprime la pierna izquierda void pieizq(void){ int i; for(i=0;i<3;i++) { gotoxy(21+i,18+i); printf("*"); } } //Funcion que imprime la pierna derecha void pieder(void){ int i; for(i=0;i<3;i++) { gotoxy(19-i,18+i); printf("*"); } } //Funcion que imprime la cabeza void cabeza(){ int i,j; for(i=0;i<5;i++){ gotoxy(18+i,4); printf("*"); gotoxy(18+i,8); printf("*"); } gotoxy(19,5); //////////////////// for(j=0;j<3;j++){ gotoxy(18,5+j); printf("*"); gotoxy(22,5+j); printf("*"); } } // funcio goto x y void gotoxy(short x, short y) { HANDLE hConsoleOutput; COORD Cursor_Pos = {x, y}; hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hConsoleOutput, Cursor_Pos); }puedes descargar el proyecto desde aquí.
Gran codificador, saludos.
ResponderEliminarMuchas gracias, espero que te haya sido de gran ayuda este post
Eliminarme podrias explicar como hacerlo solo con las siguientes funciones:
ResponderEliminarstdio.h
stdlib.h
time.h
math.h
por favor.
nesesito ayuda para hacer esto Se digitará una frase, la cual deberá ser adivinada, letra a letra por el contrincante. Al momento de digitar la
ResponderEliminarfrase debe aparecer asteriscos en la pantalla de tal forma que nadie sepa qué se ha escrito.
Se le permitirá fallar 60% de la cantidad de consonantes sin repetición + la mitad de las vocales sin repetición
que contenga la frase a analizar. Ej. Frase: Algoritmos Fundamentales. 5 vocales (2.5 oportunidades) más 9
consonantes (9 * 0.6 = 5.4 oportunidades). Por tanto, pueden fallar en 7.9 letras. Es decir, 8 oportunidades de
fallar.
Se premiará la racha del jugador acumulando los premios que ha conseguido durante cada letra adivinada en la
racha. Esto es cada letra consecutiva adivinada valdrá la sumatoria de las adivinadas anteriormente más el valor
de la letra adivinada en ese momento. En el momento que él falle, el valor agregado por la racha se hace igual
a cero. El jugador se mantendrá jugando hasta que lo desee, pudiendo presionar ESC para salir en cualquier
parte del juego.
Cada vez que el jugador haga una jugada se le presentará:
❖ Dibujo palo, soga y cada parte del muñeco ahorcado proporcional a las oportunidades de fallo.
❖ Las letras adivinadas hasta el momento mostrando un asterisco en las letras que aun no han sido
adivinadas
❖ Tiempo transcurrido.
❖ Cantidad que gana.
❖ Cantidad acumulada. Lo que había ganado hasta el momento más lo que ganó en esa jugada.
❖ La cantidad acumulada en la racha.
El valor de las letras:
❖ AEIOCS: $20.00
❖ UDLPR: $25.00
❖ BTFMN: $30.00
❖ GHJQV: $35.00
❖ KWXYZ: $40.0