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

Título: Juego de dados en C lenguajeC tiradas humano jugador máquina computador código
Publicado 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?


Código: [Seleccionar]
#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"
}
Título: Re:Juego de dados en C ayuda!
Publicado por: Kabuto en 12 de Julio 2020, 17:34
Hola.
El problema está en la variable "continuar".
Esta variable "continuar":

Citar
main(){
   char continuar;
   do{
   juegaDados();
   
 }while(continuar =='S');
 
}

No tiene absolutamente nada que ver, con esta otra "continuar":

Citar
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.

Código: [Seleccionar]
#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");
   }
}