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