Last active
December 13, 2019 17:17
-
-
Save mariomac/0de03a3a92bf8e197638dd3b52c7c12e to your computer and use it in GitHub Desktop.
Bola de Drac Z: el combate definitivo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <time.h> | |
#include <stdlib.h> | |
#define ESTADO_JUGANDO 0 | |
#define ESTADO_GOKU_GANA 1 | |
#define ESTADO_FREEZER_GANA 2 | |
#define ESTADO_NAMEK_DESTRUIDO 3 | |
#define ACCION_ATACAR 'A' | |
#define ACCION_KAME_HAME 'K' | |
#define ACCION_MONGETA 'M' | |
#define CONSUMO_MAGIA 1200 | |
#define FUERZA_MAGIA_x 2 | |
#define RECUPERACION_MONGETA 2000 | |
#define PROBABILIDAD_MAGIA_FREEZER 10 | |
#define RONDAS_MAXIMAS_JUEGO 50 | |
typedef struct { | |
int vida; | |
int ataque; | |
int defensa; | |
int magia; | |
int sanaciones; | |
} TGuerrero; | |
main() { | |
printf("__\n"); | |
printf("| \"\"--.--.._ __.. ,--.\n"); | |
printf("| `. \"-.'\"\"\\_...-----..._ ,--. .--..-----.._.\"\"| | / /\n"); | |
printf("|_ _ \\__ ). \\ _/_ | \\| || .. > `. | / /\n"); | |
printf(" | | `. ._) /|\\ \\ .-\"\"\"\":-\" \"-. ` || |.' ,'`. | |_/_ /\n"); | |
printf(" | |_.' | / \"\"` \\ ===/ ..|.. \\ || < \"\" `. \" |/__\n"); | |
printf(" `. . \\ ,-- \\-..-\\ /\"\\ / || |> )-- | / |\n"); | |
printf(" |__..-'__||__\\ |___\\ __.:-.._..-'_|\\___||____..-/ |__|--\"\"____/\n"); | |
printf("\n .~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.\n"); | |
printf(" <| Goku vs Freezer. El combate definitivo |>\n"); | |
printf(" \\________________________________________/\n"); | |
// Para que los golpes no sean siempre iguales, se añade componente random | |
// alimentamos la semilla random con un número que siempre será diferente | |
// (el número de milisegundos desde el 1/1/1970 00:00) | |
srand(time(NULL)); | |
// Menú principal | |
printf("\n\nPulsa INTRO para jugar."); | |
scanf("%*c"); | |
// Combate | |
TGuerrero goku = {5000,340,120,4000,2}; | |
TGuerrero freezer = {4500,400,150,8000}; | |
char accion; | |
int estado_juego = ESTADO_JUGANDO; | |
int vida_restada; | |
int rondas = 0; | |
while(estado_juego == ESTADO_JUGANDO) { | |
rondas++; | |
printf("+--------------+--------------+\n"); | |
printf("+ GOKU vs. FREEZER |\n"); | |
printf("+--------------+--------------+\n"); | |
printf("| Vida: %6d | Vida: %6d |\n", goku.vida, freezer.vida); | |
printf("| Magia: %5d | Magia: %5d |\n", goku.magia, freezer.magia); | |
printf("| Mongetes: %1d | |\n", goku.sanaciones); | |
printf("+--------------+--------------+\n"); | |
do { | |
printf("(A)tacar, (K)ame-hame-ha, (M)ongeta magica: "); | |
scanf("%c%*c", &accion); | |
// para aceptar tambien minusculas por parte del usuario | |
if(accion >= 'a' && accion <= 'z') { | |
accion = accion - 'a' + 'A'; | |
} | |
// Pediremos una accion mientras no introduzca una de las cuatro permitidas | |
} while(accion != ACCION_ATACAR | |
&& accion != ACCION_MONGETA | |
&& accion != ACCION_KAME_HAME); | |
printf("\n"); | |
switch (accion) { | |
case ACCION_ATACAR: | |
// con esta formula, el danyo ira aleatoriamente desde 1 hasta | |
// la diferencia entre ataque de goku y defensa de freezer | |
vida_restada = rand() % (goku.ataque - freezer.defensa) + 1; | |
freezer.vida -= vida_restada; | |
printf("Freezer recibe un ataque... %d puntos inflingidos!\n", vida_restada); | |
break; | |
case ACCION_MONGETA: | |
if(goku.sanaciones > 0) { | |
goku.sanaciones--; | |
goku.vida += RECUPERACION_MONGETA; | |
goku.magia += RECUPERACION_MONGETA; | |
printf("Goku toma una mongeta magica... %d puntos recuperados!\n", RECUPERACION_MONGETA); | |
} else { | |
printf("No te quedan mongetes... Pierdes el turno!\n"); | |
} | |
break; | |
case ACCION_KAME_HAME: | |
// Solo se puede lanzar kamehame si queda magia suficiente | |
if(goku.magia >= CONSUMO_MAGIA) { | |
// La fuerza de goku se multiplica | |
vida_restada = rand() % (FUERZA_MAGIA_x * goku.ataque - freezer.defensa); | |
freezer.vida -= vida_restada; | |
goku.magia -= CONSUMO_MAGIA; | |
printf("Kaaaa... Meeeee... Haaa... Meee... HAAAAAAAA!!!"); | |
printf(" Freezer pierde %d puntos de vida\n", vida_restada); | |
} else { | |
printf("No te queda magia... Pierdes el turno!\n"); | |
} | |
break; | |
} | |
printf("\n"); | |
if(freezer.vida <= 0) { | |
estado_juego = ESTADO_GOKU_GANA; | |
} else if(rondas >= RONDAS_MAXIMAS_JUEGO) { | |
estado_juego = ESTADO_NAMEK_DESTRUIDO; | |
} else { | |
// Esta condición será cierta un 10% de las veces | |
if(rand() % 100 < PROBABILIDAD_MAGIA_FREEZER) { | |
printf("Freezer se prepara para lanzar el rayo de la muerte... "); | |
if(freezer.magia >= CONSUMO_MAGIA) { | |
vida_restada = rand() % (FUERZA_MAGIA_x * freezer.ataque - goku.defensa); | |
goku.vida -= vida_restada; | |
printf(" Goku pierde %d puntos de vida!\n", vida_restada); | |
} else { | |
printf(" pero no le quedan energias...\n"); | |
} | |
} else { | |
vida_restada = rand() % (freezer.ataque - goku.defensa); | |
goku.vida -= vida_restada; | |
printf("Goku recibe un ataque... Pierde %d puntos de vida\n", vida_restada); | |
} | |
if(goku.vida <= 0) { | |
estado_juego = ESTADO_FREEZER_GANA; | |
} | |
} | |
printf("\n"); | |
} while(estado_juego == ESTADO_JUGANDO); | |
switch(estado_juego) { | |
case ESTADO_GOKU_GANA: | |
printf("Freezer ha muerto! El universo esta a salvo\n"); | |
break; | |
case ESTADO_FREEZER_GANA: | |
printf("Freezer ha demostrado por que es el duenyo del universo\n"); | |
break; | |
case ESTADO_NAMEK_DESTRUIDO: | |
printf("A Freezer se le han inflado las pelotas y ha decidido destruir el planeta Namek.\n"); | |
printf("A tomar por saco!\n"); | |
break; | |
} | |
printf("\n**** FIN DE JUEGO ***\n"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment