User Tag List

Página 3 de 3 PrimerPrimer 123
Resultados 31 al 42 de 42

Tema: Asignar un valor aleatorio a una variable en C/C++

  1. #31

    Fecha de ingreso
    Nov 2003
    Ubicación
    Andorra
    Mensajes
    661
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    A ver que te parece esta solución (sin testar):

    Código:
    void Baraja::Barajear()
    {
      char *aux[40];
      int i,num;
      
      // las 40 cartas en orden
      aux[ 0]="B01";aux[ 1]="B02";aux[ 2]="B03";aux[ 3]="B04";aux[ 4]="B05";
      aux[ 5]="B06";aux[ 6]="B07";aux[ 7]="B10";aux[ 8]="B11";aux[ 9]="B12";
      aux[10]="C01";aux[11]="C02";aux[12]="C03";aux[13]="C04";aux[14]="C05";
      aux[15]="C06";aux[16]="C07";aux[17]="C10";aux[18]="C11";aux[19]="C12";
      aux[20]="E01";aux[21]="E02";aux[22]="E03";aux[23]="E04";aux[24]="E05";
      aux[25]="E06";aux[26]="E07";aux[27]="E10";aux[28]="E11";aux[29]="E12";
      aux[30]="O01";aux[31]="O02";aux[32]="O03";aux[33]="O04";aux[34]="O05";
      aux[35]="O06";aux[36]="O07";aux[37]="O10";aux[38]="O11";aux[39]="O12";
      
      // inicalizar la semilla.
      // el jugador ya tiene que haber apretado como mínimo una vez un botón
      // o siempre saldrá la misma serie
      GpSrand(GpTickCountGet());
      
      // se ordena las 40 cartas
      for (i=39; i >= 0; i--)
      {
        // representar la accion de barajear
        GpRectFill(NULL, &gpDraw[nflip], 0, 0, 320, 240, 0x00);
        GpTextOut(NULL, &gpDraw[nflip], 5, 220, "Barajeando...", 0xff);
        GpRectFill(NULL, &gpDraw[nflip], 5, 235, 5*(40-i), 240, 0xff);
    
        // numero aleatorio del 0 al número_de_cartas_que_quedan_por_repartir - 1
        num = GpRandN(i);
        
        // coloca la carta que ha salido en la posición que sigue
        carta[39-i] = aux[num];
    
        // sacamos la carta de la lista de cartas que quedan por repartir
        gm_memcpy(&aux[num], &aux[num + 1], (i - num) * sizeof(aux[0])));
    
        GpSurfaceFlip(&gpDraw[nflip++]);
        nflip&=0x01;
      }
    
      // numero cartas repartidas
      num_monton=0;
    }
    No sé lo que pasará con GpRand() cuando i == 0. A lo mejor hay que hacer un test aparte.
    En cuanto a tu semilla, la idea no es hacer una simple lectura de los botones, sinó que hay que esperar a que el jugador haya apretado un botón.
    Lo que suelo hacer es usar GPSrand() cuando el usuario escoge la opción START de mis juegos.

    Oankali.

  2. #32

    Fecha de ingreso
    Feb 2005
    Mensajes
    657
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    no entiendo porque la tuya me da numeros aleatorios y la mia no, que mas da ir hacia alante que hacia atras como haces tu en el bucle?

    y esto??, espara copiar las cosas de la memoria??-> gm_memcpy(&aux[num], &aux[num + 1], (i - num) * sizeof(aux[0]));

  3. #33

    Fecha de ingreso
    Nov 2003
    Ubicación
    Andorra
    Mensajes
    661
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por jjdrako
    no entiendo porque la tuya me da numeros aleatorios y la mia no, que mas da ir hacia alante que hacia atras como haces tu en el bucle?

    y esto??, espara copiar las cosas de la memoria??-> gm_memcpy(&aux[num], &aux[num + 1], (i - num) * sizeof(aux[0]));
    Pues yo tampoco lo sé. Habría que utilizar el debugger.
    Y sí, es para copiar la memória, una manera de hacer correr las cartas no repartidas hacia el principio de la baraja. Así el bucle siempre dura la mismo y no tengo que chequear si ya ha salido la carta o no.
    ¿Ha funcionado todo a la primera, sin retocar nada?

  4. #34

    Fecha de ingreso
    Feb 2005
    Mensajes
    657
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    si bueno he tenido el problema ese que decias, cuando solo le quedaba una, la 0, se bloqueaba pero ya esta solucionado

    gracias

  5. #35

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,749
    Mencionado
    226 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,240
    Agradecer Thanks Received 
    1,902
    Thanked in
    Agradecido 1,185 veces en [ARG:2 UNDEFINED] posts
    Pues por no abrir otro hilo igual...¡refloto!
    He estado leyendo todo el hilo y me ha quedado más o menos claro el tema de hacer los números aleatorios... El caso es q uso las librerías de mirko y, la función GpSrand(GpTickCountGet()) no está. Me gustaría saber si hay alguna función de Mirko que haga lo mismo.Gracias
    Saludos! ^____^

  6. #36

    Fecha de ingreso
    May 2004
    Ubicación
    Coslada, Madrid
    Mensajes
    13,259
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    12
    Thanked in
    Agradecido 9 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    6
    Cita Iniciado por ^MiSaTo^
    Pues por no abrir otro hilo igual...¡refloto!
    He estado leyendo todo el hilo y me ha quedado más o menos claro el tema de hacer los números aleatorios... El caso es q uso las librerías de mirko y, la función GpSrand(GpTickCountGet()) no está. Me gustaría saber si hay alguna función de Mirko que haga lo mismo.Gracias
    Saludos! ^____^
    De Mirko no sé, pero supongo que podrás importar el <stdlib.h> y usar las funciones normales de números aleatorios (srand, rand, etc.).

    Si no te queda claro dímelo y te pongo ejemplos

    Saludos

  7. #37

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,749
    Mencionado
    226 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,240
    Agradecer Thanks Received 
    1,902
    Thanked in
    Agradecido 1,185 veces en [ARG:2 UNDEFINED] posts
    gracias puck qué rapidez!!
    si supongo q puedo hacerlo, y si no te importa ponerme un ejemplo te lo agradecería, porque asi me quedaría claro del todo (espero)
    Gracias

  8. #38

    Fecha de ingreso
    May 2004
    Ubicación
    Coslada, Madrid
    Mensajes
    13,259
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    12
    Thanked in
    Agradecido 9 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    6
    Cita Iniciado por ^MiSaTo^
    gracias puck qué rapidez!!
    si supongo q puedo hacerlo, y si no te importa ponerme un ejemplo te lo agradecería, porque asi me quedaría claro del todo (espero)
    Gracias
    Je, es que estoy delante del ordenador corrigiendo bugs del Lady Killer y así me entretengo mientras compila

    Yo uso el SDK oficial, así que esto que te voy a poner lo acabo de hacer con el manual de Mirko delante, puede tener fallos porque no lo he probado:

    Código:
    #include <stdlib.h>
    // Incluimos el resto de librerías, inicializaciones, etc.
    int semilla = 0;
    int numero;
    ....
    ....
    // Ahora inicializamos el timer
    gp_initRTC();
    ...
    ...
    // Aquí vamos a usar la pulsación de un botón para determinar la semilla
    if (gp_getButton() & BUTTON_A) {
       semilla = gp_getRTC(); // Asignamos el valor del contador a nuestra semilla
    }
    srand(semilla); // Usamos la semilla para generar la secuencia de números aleatorios
    ...
    ...
    numero = rand()%100; // Generamos un número aleatorio entre 0 y 99.
    ...
    ...
    Espero que te haya quedado claro

  9. #39

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,749
    Mencionado
    226 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,240
    Agradecer Thanks Received 
    1,902
    Thanked in
    Agradecido 1,185 veces en [ARG:2 UNDEFINED] posts
    Muchisimas gracias puck ahora si me ha quedado claro. A mi tb se me habia ocurrido el poder usar gp_initRTC() y gp_getRTC() pero no sabía muy bien como
    Una duda muy tonta, ¿cada vez que necesite un aleatorio hago numero = rand()%(numero limite), no?
    Y otra cosa, ¿es necesario inicializar la semilla a 0? lo digo porque tú al declararla lo haces, pero luego, cuando se va a usar, se le asigna el valor del RTC.
    Ánimo con el Lady Killer que no veas que vicio le he pilladooooooooo
    Gracias majo
    un Saludo!
    Última edición por ^MiSaTo^; 13/08/2005 a las 11:25

  10. #40

    Fecha de ingreso
    Feb 2005
    Mensajes
    657
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por ^MiSaTo^
    Una duda muy tonta, ¿cada vez que necesite un aleatorio hago numero = rand()%(numero limite), no?
    pues si, cada vez que quieras un numero distinto tienes que hacer eso, lo que no hace falta que repitas es lo de pillara la semilla

    Cita Iniciado por ^MiSaTo^
    Y otra cosa, ¿es necesario inicializar la semilla a 0? lo digo porque tú al declararla lo haces, pero luego, cuando se va a usar, se le asigna el valor del RTC.
    lo de iniciar las variables son cosas de algunos programadores XD, es cierto que si le vas a asignar un valor antes de usar la variable, no hace falta ponerla a 0

  11. #41

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,749
    Mencionado
    226 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,240
    Agradecer Thanks Received 
    1,902
    Thanked in
    Agradecido 1,185 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por jjdrako
    lo de iniciar las variables son cosas de algunos programadores XD,
    Ya suponía, porque yo también soy muy dada a ello por culpa de Pascal xDD. Gracias por resolverme la duda.
    Un saludo!

  12. #42

    Fecha de ingreso
    May 2004
    Ubicación
    Coslada, Madrid
    Mensajes
    13,259
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    12
    Thanked in
    Agradecido 9 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    6
    Cita Iniciado por ^MiSaTo^
    Muchisimas gracias puck ahora si me ha quedado claro. A mi tb se me habia ocurrido el poder usar gp_initRTC() y gp_getRTC() pero no sabía muy bien como
    Una duda muy tonta, ¿cada vez que necesite un aleatorio hago numero = rand()%(numero limite), no?
    Y otra cosa, ¿es necesario inicializar la semilla a 0? lo digo porque tú al declararla lo haces, pero luego, cuando se va a usar, se le asigna el valor del RTC.
    Ánimo con el Lady Killer que no veas que vicio le he pilladooooooooo
    Gracias majo
    un Saludo!
    Bueno, veo que ya te han contestado (he estado el finde fuera). Como te dicen no es necesario inicializar la semilla ya que luego le vas a asignar un valor, pero así te quitas posibles warnings del gcc

    Ah, y gracias por lo del Lady Killer

    Saludetes

Página 3 de 3 PrimerPrimer 123

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •