Autor Tema: Juego de dados en C lenguajeC tiradas humano jugador máquina computador código  (Leído 3675 veces)

Alejandra Mirano

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
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"
}
« Última modificación: 18 de Octubre 2020, 20:09 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Juego de dados en C ayuda!
« Respuesta #1 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");
   }
}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".