Author Topic: Ayuda juego de la ruleta en c  (Read 8885 times)

Lore_Na

  • Newbie
  • *
  • Posts: 6
  • Karma: 0
    • View Profile
Ayuda juego de la ruleta en c
« on: Enero 25, 2015, 06:42:42 pm »
Hola necesito ayuda con este código (me lleva loca ya :o), compila bien pero al jugar me da varios errores. De inicio, las primeras lineas no me las lee (no me pide que inserte el nombre...). Cada ves que inserto el dinero que quiero apostar me sale todo el rato el mensaje de "No tiene suficiente dinero" aunque lo tenga. Luego no siempre me calcula bien el saldo acumulado...si alguien le puede echar un vistazo por favor....  :'(


/*Crear el juego de la ruleta simple*/

#include <stdio.h> // libreria basica para entrada y salida 
#include <stdlib.h> // libreria para el uso de rand() 
#include <time.h>   // libreria para el uso de time()
FILE *Casino;        //archivo con saldo del casino
         
//Pedir el nombre y apellidos al usuario

int nombre_apellidos () {
     printf("\n Bienvenid@ al Casino simple \n");
     int nombre;
     printf("\n Introduzca su Nombre y Apellidos: \n");
     scanf("%d",&nombre);
      return 0;
}
 //Pedir el saldo inicial

  int saldo_inicial () {
       long saldo;
       printf("Saldo inicial deseado:");
       scanf("%ld", &saldo);
       printf("\n");
       return saldo;
}
 //Leer archivo con saldo inicial del casino Casino.txt

int saldo_casino_total() {
     long saldo_casino;
        Casino = fopen("Casino.txt","r");
     if (Casino==NULL) {
        printf("\n Error de archivo \n");
     }
     else {
        while (feof(Casino)==0) {
           fscanf(Casino, "%ld\n", &saldo_casino);
        }
     }
     fclose(Casino);
     return saldo_casino;
}
   
  //Seleccionar el tipo de apuesta PAR, IMPAR, NUMERO

int tipo_apuesta() {
     int tipo_a;
     printf("\nSeleccione el tipo de apuesta\n");
     printf("Par=1\nImpar=2\nNumero=3\n");
     int tipo_correcto=0;
   
     //hay que comprobar si el tipo de apuesta es corrcto
   
     while (tipo_correcto < 1) {
        scanf("%d", &tipo_a);
        if (tipo_a <=3) {
           tipo_correcto++;
        }
        else {
           printf("Numero incorrecto, Seleccione el tipo de apuesta\n");
        }
     }
     printf("\n\n");
     return tipo_a;
}
  //Determinar el dinero que se quiera apostar

int apuesta () {
     int apuesta;
     printf("Cuanto dinero desea apostar?\n");
     scanf("%d", &apuesta);
   
     //hay que comprobar que tiene suficiente dinero
     int saldo;
     if (apuesta > saldo) {
        printf("No tiene suficiente dinero\n");
     }
     else {
        printf("Apuesta correcta\n");
     }
     printf("\n\n");
     return apuesta;
}
 
//Generar número aleatorio

int girar () {
     int aleatorio;
     int hora = time (NULL);
     srand(hora); //srand inicializa el generador de números aleatorios con un valor basado en la hora actual, para que cada vez que se ejecute el programa tengamos números diferentes
     aleatorio = rand () % 37;
     printf("\n\n");
     return aleatorio;
}

//Hay que actualizar el saldo del casino Casino.txt

int saldo_casino_fn(int saldo_casino) {
     Casino = fopen ("Casino.txt","r+");
     if (Casino == NULL) {
        printf("\n Error de archivo \n");
     }
     else {
        fprintf(Casino,"%d\n", saldo_casino);
        printf("%d\n", saldo_casino);
     }
     fclose(Casino);
     return 0;
}
 
//Comienza el juego

int main (void) {
     int giro;
     int apuesta_tipo;
     int saldo_apostado;
     int de_nuevo = 0;
     int S_N = 1;              // si o no
     long saldo;
     long casino_saldo;
     casino_saldo = saldo_casino_total ();
     saldo = saldo_inicial ();
   
     //Creamos un bucle para jugar tantas veces como uno desee
   
     while (de_nuevo <= 0) {
        apuesta_tipo = tipo_apuesta ();
        saldo_apostado = apuesta ();
      
        //Hay que calcular los saldos tanto del casino como del usuario
      
        saldo = saldo - saldo_apostado;
        casino_saldo = casino_saldo + saldo_apostado;
        giro = girar ();
      
        //Resultado de la apuesta
      
        if (apuesta_tipo ==1) {
           printf("El numero de la ruleta es: ");
           printf("%d\n", giro);
           if (giro % 2 == 0 && giro != 0) {
              printf("Ha ganado\n");
              saldo = saldo + 2 * saldo_apostado;
              casino_saldo = casino_saldo - 2 * saldo_apostado;
              printf("Su nuevo saldo es ");
              printf("%ld\n", saldo);
           }
           else {
              if (giro == 0) {
                 printf("Ha perdido\n");
                 printf("Su nuevo saldo es ");
                 printf("%ld\n", saldo);
              }
           }
        }
        if (apuesta_tipo == 2) {
           printf("El numero de la ruleta es: ");
           printf("%d\n", giro);
           if (giro % 2 == 1 && giro != 0) {
              printf("Ha ganado\n");
              saldo = saldo + 2 * saldo_apostado;
              casino_saldo = casino_saldo - 2 * saldo_apostado;
              printf("Su nuevo saldo es ");
              printf("%ld\n", saldo);
           }
           else {
              if (giro == 0) {
                 printf("Ha perdido\n");
                 printf("Su nuevo saldo es ");
                 printf("%ld\n", saldo);
              }
           }
        }
        if (apuesta_tipo == 3) {
           int numero_apostado;
           printf("Elija el numero de la ruleta al que quiere apostar\n");
           do {
              scanf("%d", &numero_apostado);
           }   
           while ((numero_apostado > 36) || (numero_apostado < 1)) ;
              printf("Numero incorrecto, vuelva a intentarlo\n");
             
       
           
              printf("El numero de la ruleta es: \n");
              printf("%d\n", giro);
      
                if (giro == numero_apostado && giro != 0) {
                  printf("Ha ganado\n");
                  saldo = saldo + 36 * saldo_apostado;
                  casino_saldo = casino_saldo - 36 * saldo_apostado;
                  printf("Su nuevo saldo es ");
                  printf("%ld\n", saldo);
                }
                else {
                   printf("Ha perdido\n");
                   printf("Su nuevo saldo es ");
                   printf("%ld\n",saldo);
                }
               return 0;
            } 
        printf("\n\n");
        saldo_casino_fn(casino_saldo);
        
        int continuar = 0;
      
        //Preguntar si se desea seguir jugando
      
        while (continuar < 1) {
           printf("¿Desea seguir jugando \n Si=1 \n No=2 \n");
           scanf("%d", &S_N);
                  if (saldo == 0) {
                    de_nuevo++;
                    printf("Lo sentimos, su saldo se ha agotado\n");
                    continuar++;
                 }
                 if (S_N == 1) {
                    printf("Continue\n");
                    continuar++;
                 }
                 if (S_N == 2) {
                    de_nuevo++;
                    printf("\n");
                    continuar++;
                 }
               
                 if (S_N != 1 && S_N != 2) {
                    printf("Numero incorrecto\n");
                 }
        }   
   }
        printf("\n\n");
        return 0;
}
« Last Edit: Enero 25, 2015, 06:46:44 pm by Lore_Na »

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Ayuda juego de la ruleta en c
« Reply #1 on: Enero 25, 2015, 07:08:13 pm »
Hola:

Vamos por partes. has hecho una función nombre_apellidos(), entiendo que para pedir nombre y apellidos .... pero no la llamas nunca, así que es normal que no te los pida.

Lo del saldo, en tu función para comprobarlo tienes esto

Code: [Select]
    int saldo;
     if (apuesta > saldo) {
        printf("No tiene suficiente dinero\n");
     }

Estas declarando ahi saldo, con int saldo; En la declaración no tiene valor así que estará cogiendo 0 por defecto. Así que apuesta siempre será mayor que saldo. A tu función apuesta() pásale como parámetro el saldo y no lo declares dentro.

Se buena.

Lore_Na

  • Newbie
  • *
  • Posts: 6
  • Karma: 0
    • View Profile
Re: Ayuda juego de la ruleta en c
« Reply #2 on: Enero 25, 2015, 08:28:23 pm »
Muchas gracias por la rápida contestación.

Lo del saldo lo he arreglado, aunque lo del nombre aunque haga la llamada aún así no me lo muestra...

Gracias de nuevo.

Un saludo.

Lore_Na

  • Newbie
  • *
  • Posts: 6
  • Karma: 0
    • View Profile
Re: Ayuda juego de la ruleta en c
« Reply #3 on: Enero 25, 2015, 08:29:12 pm »
Hola:

Vamos por partes. has hecho una función nombre_apellidos(), entiendo que para pedir nombre y apellidos .... pero no la llamas nunca, así que es normal que no te los pida.

Lo del saldo, en tu función para comprobarlo tienes esto

Code: [Select]
    int saldo;
     if (apuesta > saldo) {
        printf("No tiene suficiente dinero\n");
     }

Estas declarando ahi saldo, con int saldo; En la declaración no tiene valor así que estará cogiendo 0 por defecto. Así que apuesta siempre será mayor que saldo. A tu función apuesta() pásale como parámetro el saldo y no lo declares dentro.

Se buena.


Muchas gracias por la rápida contestación.

Lo del saldo lo he arreglado, aunque lo del nombre aunque haga la llamada aún así no me lo muestra...

Gracias de nuevo.

Un saludo.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Ayuda juego de la ruleta en c
« Reply #4 on: Enero 25, 2015, 08:42:36 pm »
Hola:

Pues estaría bien ver dónde has puesto la llamada.

Se buena.

Lore_Na

  • Newbie
  • *
  • Posts: 6
  • Karma: 0
    • View Profile
Re: Ayuda juego de la ruleta en c
« Reply #5 on: Enero 25, 2015, 09:33:03 pm »
Hola:

Pues estaría bien ver dónde has puesto la llamada.

Se buena.

Aquí lo tienes... llevo mucha rayada de cabeza ya y ya no pienso con claridad jejej me habré equivocado al ponerla,  no lo sé... :o

int nombre_apellidos () {

     int nombre ();

     nombre_apellidos ();

     printf("\n Bienvenid@ al Casino simple \n");

     printf("\n Introduzca su Nombre y Apellidos: \n");

     printf("\n\n");

     return 0;

}

Muchas gracias.
Un saludo,
Lorena.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Ayuda juego de la ruleta en c
« Reply #6 on: Enero 26, 2015, 05:55:38 am »
La función se llama a sí misma. ¿Y quién llama a la función la primera vez? ¿Y pretendes que una vez que alguien de fuera la llame, esté llamándose a sí misma una y otra vez pidiendote para siempre jamas el nombre y apellido?

Se buena.

Rikudo Sennin

  • Newbie
  • *
  • Posts: 6
  • Karma: 0
    • View Profile
Re: Ayuda juego de la ruleta en c
« Reply #7 on: Enero 18, 2016, 10:07:10 am »
Estas declarando ahi saldo, con int saldo; En la declaración no tiene valor así que estará cogiendo 0 por defecto.

Tengo entendido que ese comportamiento se presenta cuando la variable es global. Si hablamos de una variable local entonces su valor depende del valor que esté en su dirección de memoria, es decir, toma un valor que depende de factores externos al programa.

Como la dirección de memoria de una variable global no varía después de crearla entonces supongo que es factible iniciar su valor a 0. No es lo mismo con las variables locales ya que la dirección de estas puede variar.

 

ey