Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "conio.c"
- /*
- Matrícula: 2016-0207
- Nombre : Renys Ronaldo
- Tema : Crear el juego del ahorcado
- */
- char *ingresarPalabra();
- void simbolos(char *oracion, int indice);
- int adivinar(char a);
- char * auxiliarOracion;
- int dinero(char letraDescubierta);
- void comprobarRacha(int racha);
- struct datosOracion
- {
- int tamanoOracion;
- char *oracionCopia;
- int letrasDescubiertas;
- int intentos;
- int cantidadOportunidades;
- int errores;
- int validar;
- int racha;
- int dineroGanado;
- int posicionX;
- int posicionY;
- int inicioDibujo;
- int limiteDibujo;
- int juegosGanados;
- int juegosPerdidos;
- int juegosJugados;
- int sumaRacha;
- };
- struct datosOracion datos;
- int main()
- {
- datos.letrasDescubiertas = 0;
- datos.tamanoOracion = 0;
- datos.juegosJugados++;
- system("cls");
- textcolor(LIGHTGRAY);
- printf("Ingrese la palabra:\n");
- char *oracion= ingresarPalabra();
- int indice =0,posicionArreglo, cantidadEspacios;
- auxiliarOracion = (char*) calloc(datos.tamanoOracion, sizeof(char));
- //Creando un puntero del tamaño de la oración ingresada
- char letra; char respuesta;
- datos.cantidadOportunidades = datos.tamanoOracion*0.6;
- datos.errores = 0;
- datos.dineroGanado = 0;
- datos.racha = 0;
- datos.intentos = 0;
- datos.posicionX = 1;
- datos.posicionY = 11;
- datos.inicioDibujo = 0;
- datos.limiteDibujo = 70/datos.cantidadOportunidades;
- int auxiliarLimite = datos.limiteDibujo;
- cantidadEspacios = contarEspacios();
- printf("\nOportunidades: %d\nErrores: %d\nIntentos: \nRacha: \nDinero ganado: $", datos.cantidadOportunidades, datos.errores,datos.intentos, datos.racha, datos.dineroGanado);
- while(datos.errores != datos.cantidadOportunidades)
- {
- fflush(stdin);
- gotoxy(15,8);
- printf("\nIngrese letra:");
- letra = getchar();
- letra = toupper(letra);
- gotoxy(15,9);
- printf("\t\t\t\t\t\t\t\t\t");
- //Limpiar el caracter(o los caracteres) que se acaban de escribir en pantalla
- gotoxy(1,10);
- posicionArreglo = adivinar(letra);
- gotoxy(10,5);
- printf("%d", datos.intentos);
- gotoxy(15,7);
- if(datos.validar>0)
- {//Si Si la letra ingresada está validada
- auxiliarOracion[posicionArreglo] = letra;
- datos.dineroGanado = datos.dineroGanado + dinero(letra);
- datos.sumaRacha++;
- datos.racha = datos.racha + dinero(letra);
- gotoxy(7,6);
- printf("%d", datos.racha);
- gotoxy(17,7);
- printf("%d", datos.dineroGanado);
- }
- if(datos.validar < 0)
- {//Si la letra no es correcta
- comprobarRacha(datos.racha);
- gotoxy(7,6);
- printf("%d\t\t", datos.racha);
- datos.errores = datos.errores + 1;
- gotoxy(10,4);
- printf("%d", datos.errores);
- gotoxy(15,7);
- imprimirMuneco(datos.limiteDibujo);
- datos.limiteDibujo = datos.limiteDibujo + (70/datos.cantidadOportunidades);
- }
- if(datos.tamanoOracion-cantidadEspacios == datos.letrasDescubiertas)
- {
- printf("\nGanaste\n\n\n\n\n");
- datos.juegosGanados++;
- resumenJuego();
- }
- if(datos.errores == datos.cantidadOportunidades)
- {
- printf("\nPerdiste\n");
- datos.juegosPerdidos++;
- imprimirMuneco(70);
- resumenJuego();
- }
- }
- free(oracion);
- free(datos.oracionCopia);
- free(auxiliarOracion);
- return 0;
- }
- char *ingresarPalabra()
- {
- int tamanoPuntero = 10; int indice = 0;
- char terminar = 'a';
- char * oracion = (char*) calloc(tamanoPuntero, sizeof(char));
- while(1)
- {
- fflush(stdin);
- oracion[indice] = getch();
- oracion[indice] = toupper(oracion[indice]);
- simbolos(oracion, indice);
- if((oracion[indice] <65 || oracion[indice] >90) && oracion[indice] != 13 && oracion[indice] != 8 && oracion[indice] != 32)
- {
- // printf("entro");
- indice--;
- }
- if(oracion[indice] == 8)
- {///Para borrar el caracter anterior y empezar a escribir en ese mismo
- borrar(indice);
- indice = indice-2;
- if(indice < 0)
- {
- indice = -1;
- }
- oracion[indice+1] = ' ';
- }
- if(oracion[indice] == 13)
- {//Es decir, si se presiona [ENTER]
- if(indice > 1 & indice <70)
- {//Validar que debe haber al menos dos letras
- oracion[indice] = '\0';
- datos.tamanoOracion = indice;
- datos.oracionCopia = oracion;
- break;
- }
- else
- {
- printf("\nDebe haber minimo dos caracteres y maximo 70...\nPresione cualquier tecla para continuar");
- datos.juegosJugados--;
- fflush(stdin);
- getch();
- main();
- }
- }
- if(indice == tamanoPuntero-1)
- {
- tamanoPuntero = tamanoPuntero + 10;
- oracion = (char*) realloc(oracion, tamanoPuntero);
- }
- indice = indice + 1;
- }
- return oracion;
- }
- /*
- Función : Simbolos
- Objetivo : Agregar un simbolo cada vez que se escribe
- */
- void simbolos(char *oracion, int indice)
- {
- if(oracion[indice] >= 65 && oracion[indice] <= 90)
- {
- printf("#");
- }
- if(oracion[indice] == ' ')
- {
- printf(" ");
- }
- }
- /*
- Función : Borrar
- Objetivo : Borrar caracter de pantalla
- */
- void borrar(int indice)
- {
- if(indice <= 0)
- {
- indice = 1;
- }
- gotoxy(indice, 2);
- printf(" ");
- gotoxy(indice,2);
- }
- /*
- Función : Adivinar
- Objetivo : Toma como argumento la letra ingresada y comprueba si dicha letra está en la copia de la oración guardada
- de ser así, sustituye el carácter '#' por la letra ingresada
- Retorno : Posición de la letra
- */
- int adivinar(char a)
- {
- int i;
- datos.validar = -1;
- if(datos.intentos == 0)
- {
- for(i=0; i<datos.tamanoOracion; i++)
- {
- auxiliarOracion[i] = '#';
- }
- }
- for(i=0; i<datos.tamanoOracion; i++)
- {
- if(datos.oracionCopia[i] == a && auxiliarOracion[i] != a && a != ' ')
- {
- datos.letrasDescubiertas++;
- auxiliarOracion[i] = a;
- datos.validar = 1;
- }
- if(datos.oracionCopia[i] == ' ')
- {
- auxiliarOracion[i] = ' ';
- }
- if(auxiliarOracion[i] != '#')
- {
- textcolor(GREEN);
- }
- else
- {
- textcolor(RED);
- }
- printf("%c", auxiliarOracion[i]);
- }
- datos.intentos = datos.intentos + 1;
- textcolor(LIGHTGRAY);
- return i;
- }
- /*
- Función : Contar espacios
- Objetivo : Contar cuantos espacios tiene la oración para así restarlo a la cantidad de "letras" que tiene
- Retorna : La cantidad de espacios
- */
- int contarEspacios()
- {
- int i=0, espacios=0;
- for(i=0; i<datos.tamanoOracion; i++)
- {
- if(datos.oracionCopia[i] == ' ')
- {
- espacios++;
- }
- }
- return espacios;
- }
- /*
- Función : dinero
- Objetivo : Agregar dinero ganado al juego dependiendo cual letra acaba de obtener
- Retorno : El dinero ganado
- */
- int dinero(char letraDescubierta)
- {
- char valor10[] = {'A','E','I','O','C','S','\0'};
- char valor15[] = {'U','D','L','P','R','\0'};
- char valor20[] = {'B','T','F','M','N','\0'};
- char valor25[] = {'G','H','J','Q','V','\0'};
- char valor30[] = {'K','W','X','Y','Z','\0'};
- //validando valor10
- int i=0; int dineroGanado=0;
- while((valor10[i] != '\0' && valor15[i] != '\0' && valor20[i] != '\0' && valor25[i] != '\0' && valor30[i] != '\0') && dineroGanado <=0)
- {
- if(letraDescubierta == valor10[i])
- dineroGanado= 10;
- if(letraDescubierta == valor15[i])
- dineroGanado= 15;
- if(letraDescubierta == valor20[i])
- dineroGanado= 20;
- if(letraDescubierta == valor25[i])
- dineroGanado= 25;
- if(letraDescubierta == valor30[i])
- dineroGanado= 30;
- i++;
- }
- return dineroGanado;
- }
- /*
- Función : Comprobar la racha del jugador
- Objetivo : Cuando el jugador comete un error se comprueba si la racha es mayor a cero para agregarlo al dinero ganado
- Argumentos : La racha actual
- */
- void comprobarRacha(int racha)
- {
- if(racha >0 && datos.sumaRacha> 1)
- {
- gotoxy(17,7);
- datos.dineroGanado = datos.dineroGanado + racha;
- printf("%d", datos.dineroGanado);
- datos.racha = 0;
- datos.sumaRacha = 0;
- }
- if(datos.sumaRacha < 2)
- {
- datos.sumaRacha = 0;
- datos.racha = 0;
- }
- }
- /*
- Función : Imprimir Muñeco
- Objetivo : Imprimir el dibujo del ahorcado mediante valores ASCII
- */
- void imprimirMuneco(int limite)
- {
- textcolor(LIGHTRED);
- int * dibujo[] = {218,196,196,194,196,196,191,179,32,32,179,32,32,179,179,218,196,193,196,191,179,179,179,88,95,88,179,179,179,192,196,194,196,217,179,179,32,218,219,191,32,179,179,32,218,219,191,32,179,179,32,179,32,179,32,179,179,32,179,32,179,32,179,192,196,196,196,196,196,217};
- for(datos.inicioDibujo; datos.inicioDibujo<limite; datos.inicioDibujo++)
- {
- gotoxy(datos.posicionX,datos.posicionY);
- if(datos.inicioDibujo==7 || datos.inicioDibujo == 14 || datos.inicioDibujo == 21 || datos.inicioDibujo == 28 || datos.inicioDibujo == 35 || datos.inicioDibujo == 42 || datos.inicioDibujo == 49 || datos.inicioDibujo == 56 || datos.inicioDibujo == 63)
- {
- datos.posicionY++;
- datos.posicionX=1;
- printf("\n");
- }
- printf("%c",dibujo[datos.inicioDibujo]);
- datos.posicionX++;
- }
- textcolor(LIGHTGRAY);
- }
- /*
- Función : Resumen del juego
- Objetivo : Cuando se pierde, o se gana. Se muestra el resumen de las jugadas realizadas, el dinero ganado, total de errores, etc
- */
- void resumenJuego()
- {
- char respuesta;
- comprobarRacha(datos.racha);
- if(datos.errores == 0)
- {
- gotoxy(1,11);
- }
- else
- {
- gotoxy(1,21);
- }
- printf("Has jugado un total de: %d veces\nHas ganado un total de %d veces\nHas perdido un total de %d veces", datos.juegosJugados, datos.juegosGanados, datos.juegosPerdidos);
- printf("\nDesea volver a jugar?\n[S] Si\n[N] No\nRespuesta: ");
- do
- {
- //scanf("%d", &respuesta);
- respuesta = getch();
- respuesta = toupper(respuesta);
- if(respuesta == 'S')
- main();
- if(respuesta == 'N')
- exit(0);
- }while(respuesta != 'S' || respuesta != 'N');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement