Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Alejandra Mirano en 12 de Julio 2020, 07:49
-
El juego funciona bien pero cuando le digo a la maquina que ya no quiero jugar, el bucle no se rompe y comienza de nuevo el juego, que condición puedo poner para que pare?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<unistd.h>
#include<ctype.h> //Necesaria para usar la función de cambio de tipos: toupper();
int hacerTirada();
int seguirJugando();
void juegaDados();
main(){
char continuar;
do{
juegaDados();
}while(continuar =='S');
}
int hacerTirada(){ //Tirar dados
char tirar;
do{
puts("¿Realizar tirada? (S/N)");
scanf("%c",&tirar);
getchar();
tirar = toupper(tirar); // Convierte a mayúsculas el contenido previo de tirar
switch(tirar){
case 'S': puts("Iniciando un nuevo juego...\n");
break;
case 'N': puts("Esta bien, tomate un tiempo para retomar un nuevo juego...\n");
break;
default: puts("No entendi tu respuesta! Intenta de nuevo.\n");
break;
sleep(2);
}
}while(tirar !='S'); // Mientras la respuesta no sea "S"
}
int seguirJugando(){ //Continuar o cerrar el juego
char continuar;
puts("¿Continuar jugando? (S/N)\n");
scanf("%c",&continuar);
continuar = toupper(continuar); // Convierte a mayúsculas el contenido previo de continuar
getchar();
switch(continuar){
case 'S': puts("Volver a jugar\n");
break;
case 'N': puts("Esta bien, pero se que volveras, hasta pronto!...\n");
break;
default: puts("No entendi tu respuesta asi que seguiremos jugando!.\n");
continuar = 'S'; // Asigna arbitrariamente el valor de seguir jugando
break;
}
}
void juegaDados(){ //Cuerpo del juego
int jugador, maquina;
char tirar, continuar;
srand(time(0));
hacerTirada();////////////////////////
jugador = rand() % 6 + 1;
maquina = rand() % 6 + 1;
puts("Turno del usuario: tirando dados..."); //turno del usuario
sleep(3); //Tiempo de espera
printf("Valor de la tirada del jugador: %i\n",jugador);
puts("Turno de la maquina: tirando dados..."); //turno de la maquina
sleep(5);
printf("Valor de la tirada de la maquina: %i\n",maquina);
if(jugador > maquina){
printf("\nG a n a s t e !\n");
}
else if (jugador == maquina){
printf("\nE m p a t e !\n");
}else{
printf("\nP e r d i s t e !\n");
}
do{
seguirJugando()////////////////////////////
}while(continuar == 'S'); // Mientras la respuesta a continuar sea "S"
}
-
Hola.
El problema está en la variable "continuar".
Esta variable "continuar":
main(){
char continuar;
do{
juegaDados();
}while(continuar =='S');
}
No tiene absolutamente nada que ver, con esta otra "continuar":
int seguirJugando(){ //Continuar o cerrar el juego
char continuar;
puts("¿Continuar jugando? (S/N)\n");
scanf("%c",&continuar);
continuar = toupper(continuar); // Convierte a mayúsculas el contenido previo de continuar
getchar();
switch(continuar){
case 'S': puts("Volver a jugar\n");
break;
case 'N': puts("Esta bien, pero se que volveras, hasta pronto!...\n");
break;
default: puts("No entendi tu respuesta asi que seguiremos jugando!.\n");
continuar = 'S'; // Asigna arbitrariamente el valor de seguir jugando
break;
}
}
Porque están declaradas en distintas funciones, por lo tanto pertenecen a distintos ámbitos.
Así que la variable "continuar" que usas para preguntar al usuario, no afecta para nada al bucle donde decides si continuar o no.
Puedes hacerlo de otro modo.
Pedir directamente a la función seguirJugando() que retorne el char que ha leído del usuario y entonces usarlo para la condición del bucle.
Dejo aquí el código con ese cambio, además de otros cambios menores, como eliminar variables que no se usaban.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<unistd.h>
#include<ctype.h> //Necesaria para usar la función de cambio de tipos: toupper();
void hacerTirada();
char seguirJugando();
void juegaDados();
int main(){
do{
juegaDados();
}while(seguirJugando() =='S');
return 0;
}
void hacerTirada(){ //Tirar dados
char tirar;
do{
puts("¿Realizar tirada? (S/N)");
scanf("%c",&tirar);
getchar();
tirar = toupper(tirar); // Convierte a mayúsculas el contenido previo de tirar
switch(tirar){
case 'S': puts("Iniciando un nuevo juego...\n");
break;
case 'N': puts("Esta bien, tomate un tiempo para retomar un nuevo juego...\n");
break;
default: puts("No entendi tu respuesta! Intenta de nuevo.\n");
break;
sleep(2);
}
}while(tirar !='S'); // Mientras la respuesta no sea "S"
}
char seguirJugando(){ //Continuar o cerrar el juego
char continuar;
puts("¿Continuar jugando? (S/N)\n");
scanf("%c",&continuar);
continuar = toupper(continuar); // Convierte a mayúsculas el contenido previo de continuar
getchar();
switch(continuar){
case 'S': puts("Volver a jugar\n");
break;
case 'N': puts("Esta bien, pero se que volveras, hasta pronto!...\n");
break;
default: puts("No entendi tu respuesta asi que seguiremos jugando!.\n");
continuar = 'S'; // Asigna arbitrariamente el valor de seguir jugando
break;
}
return continuar;
}
void juegaDados(){ //Cuerpo del juego
int jugador, maquina;
srand(time(0));
hacerTirada();////////////////////////
jugador = rand() % 6 + 1;
maquina = rand() % 6 + 1;
puts("Turno del usuario: tirando dados..."); //turno del usuario
sleep(3); //Tiempo de espera
printf("Valor de la tirada del jugador: %i\n",jugador);
puts("Turno de la maquina: tirando dados..."); //turno de la maquina
sleep(5);
printf("Valor de la tirada de la maquina: %i\n",maquina);
if(jugador > maquina){
printf("\nG a n a s t e !\n");
}
else if (jugador == maquina){
printf("\nE m p a t e !\n");
}else{
printf("\nP e r d i s t e !\n");
}
}