Hola!
Mañana vamos a ver cómo podemos mejorar la modularización haciendo uso de pasaje de parámetros por referencia.
Refrescando la resolución que había llevado como tentativa:
#include<stdio.h>
#include<stdbool.h>
const double LIMITE_PUNTOS_JUEGO = 7.5;
const char OPCION_SEGUIR='y';
bool seguir_jugando(){
char opcion;
puts("Queres una carta?");
scanf(" %c",&opcion);
return opcion == OPCION_SEGUIR;
}
double obtener_valor_a_sumar(){
int numero_aleatorio;
puts("psst! necesito un numero aleatorio 1-10");
scanf(" %i", &numero_aleatorio);
if(numero_aleatorio>7){
return 0.5;
} else{
return numero_aleatorio;
}
}
int main(){
double puntos_jugador_1=0, puntos_jugador_2=0;
bool sigue_jugador_1 = true, sigue_jugador_2 = true;
while (sigue_jugador_1 || sigue_jugador_2){
puts("Jugador 1");
if(seguir_jugando()){
puntos_jugador_1 += obtener_valor_a_sumar();
printf("Tenes %lf puntos\n", puntos_jugador_1);
if (puntos_jugador_1 > LIMITE_PUNTOS_JUEGO) {
puts("Te pasaste! Perdiste!");
sigue_jugador_1 = false;
}
} else {
sigue_jugador_1 = false;
}
puts("Jugador 2");
if(seguir_jugando()){
puntos_jugador_2 += obtener_valor_a_sumar();
printf("Tenes %lf puntos\n", puntos_jugador_2);
if (puntos_jugador_2 > LIMITE_PUNTOS_JUEGO) {
puts("Te pasaste! Perdiste!");
sigue_jugador_2 = false;
}
} else {
sigue_jugador_2 = false;
}
}
printf("El juego termino. \nEl jugador 1 tiene %lf, y el 2 %lf", puntos_jugador_1, puntos_jugador_2);
return 0;
}
Creo que podría aportarles ver cómo lo pensé yo:
#include<stdio.h>
#include<stdbool.h>
const double LIMITE_PUNTOS_JUEGO = 7.5;
const char OPCION_SEGUIR='y';
bool seguir_jugando();
double obtener_valor_a_sumar();
bool jugar(double* puntos);
int main(){
double puntos_jugador_1=0, puntos_jugador_2=0;
bool sigue_jugador_1 = true, sigue_jugador_2 = true;
while (sigue_jugador_1 || sigue_jugador_2){
if(sigue_jugador_1){
puts("Jugador 1");
sigue_jugador_1 = jugar(&puntos_jugador_1);
}
if(sigue_jugador_2){
puts("Jugador 2");
sigue_jugador_2 = jugar(&puntos_jugador_2);
}
}
printf("El juego termino. \nEl jugador 1 tiene %lf, y el 2 %lf\n", puntos_jugador_1, puntos_jugador_2);
return 0;
}
double obtener_valor_a_sumar(){
int numero_aleatorio;
puts("psst! necesito un numero aleatorio 1-10");
scanf(" %i", &numero_aleatorio);
if(numero_aleatorio>7){
return 0.5;
} else{
return numero_aleatorio;
}
}
bool seguir_jugando(){
char opcion;
printf("Queres una carta? %c/n\n", OPCION_SEGUIR);
scanf(" %c",&opcion);
return opcion == OPCION_SEGUIR;
}
bool jugar(double* puntos){
if(seguir_jugando()){
*puntos += obtener_valor_a_sumar();
printf("Tenes %lf puntos\n", *puntos);
if (*puntos > LIMITE_PUNTOS_JUEGO) {
puts("Te pasaste! Perdiste!");
return false;
} else {
return true;
}
} else {
return false;
}
}
Noten como ahora ya no repetimos todo el flujo del juego para cada jugador, y el main se lee más como el flujo de un juego, y menos como un programa de C ✨
Preparen las consultas que tengan sobre esta implementación, nos interesa saber cómo lo pensaron ustedes.
Nos vemos el jueves!
Saludos, Juan Pablo >^.^<.