Bueno amig@s en esta ocasion les traigo uno de los juegos mas populares que podemos encontrar como lo es el juego del ahorcado en lenguaje C.
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í.