Skip to content

Instantly share code, notes, and snippets.

@mariomac
Last active December 13, 2019 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mariomac/0de03a3a92bf8e197638dd3b52c7c12e to your computer and use it in GitHub Desktop.
Save mariomac/0de03a3a92bf8e197638dd3b52c7c12e to your computer and use it in GitHub Desktop.
Bola de Drac Z: el combate definitivo
#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