Bennu Game Development

Foros en Español => General => Topic started by: juanpe on April 29, 2018, 04:29:53 PM

Title: Problema con la función Rand
Post by: juanpe on April 29, 2018, 04:29:53 PM

Hola! ayer mismo me bajé la versión Bennupack 2.9 y al ir a hacer un pequeño programita veo que la función  rand  me da una respuesta inesperada, os copio el texto completo, (es una modificación de un tutorial). El caso es que me la expresión
rand(7,77) siempre me devuelve el resultado 48, en lugar de devolver valores aleatorios. Agradecería si alguien me puede explicar qué estoy haciendo mal.


//-------------------------------------------------------------------
// Autor:    SORTEO SANTA MAGDALENA SOFIA 2018
//-------------------------------------------------------------------
PROGRAM Tutorial_1;

local
numero1;
BEGIN
    load_fpg("media\tutor1.fpg");
    set_mode(m800x600); // Selecciona el modo de video 640 x 480
    put_screen(0,63);   // Pone la pantalla de fondo
    nave(320,240,41);   // Crea el proceso nave
   

    teclado();
sorteo();
    FROM x=1 TO 8; asteroide(); END
END
   
   
process teclado();
begin
WRITE(0,100,77,0, "sorteo magdalena sofia" );
  loop   
    if (key(_esc)) exit(); end;
    frame;
  end;
end;
   
process sorteo();
begin
numero1=RAND(7,77);
WRITE(0,100,87,0, "1" );
WRITE(0,100,97,0, numero1 );
  loop   
    if (key(_esc)) exit(); end;
    frame;
  end;
end;
   
//-------------------------------------------------------------------
// Maneja la nave protagonista
//-------------------------------------------------------------------
PROCESS nave(x,y,graph)
BEGIN
    LOOP
        IF (key(_left)) angle=angle+10000; END
        IF (key(_right)) angle=angle-10000; END
        IF (key(_up)) advance( 8) ; END
        FRAME;  // Hace aparecer el gr fico de la nave en pantalla
    END
END
//-------------------------------------------------------------------
// Proceso asteroide
//-------------------------------------------------------------------
PROCESS asteroide()
BEGIN
    LOOP
        x=0; y=0; graph=1;
        angle=rand(-180000,180000);
        WHILE (x>=0 AND x<=640 AND
               y>=0 AND y<=480)
              graph=graph+1;
            IF (graph==21) graph=1; END
            advance(4);
            FRAME;      // Hace que el gr fico salga en pantalla
        END
    END
END
Title: Re:Problema con la función Rand
Post by: panreyes on April 29, 2018, 04:36:00 PM
Para conseguir resultados aletorios, debes iniciar la semilla de aleatoriedad al principio de la ejecución:
http://wiki.bennugd.org/index.php?title=Rand_seed
Title: Re:Problema con la función Rand
Post by: juanpe on April 29, 2018, 06:15:00 PM

Gracias Panreyes, he conseguido que me busque números aleatrorios, pero ahora tengo el problema de que quiero mediante la instrucción FROM hacer una lista con números aleatorios, y lo que obtengo son 7 números iguales, esto es lo que he escrito, Qué tendría que hacer para que me devuelva un número distinto cada vez?


from cuenta=0 to 7 step 1;
rand_seed(time());
numero1=RAND(7,77);
WRITE(0,100,87,0, "1" );
WRITE(0,cuenta*23,97,0, numero1 );
end;
  loop   
Title: Re:Problema con la función Rand
Post by: panreyes on April 29, 2018, 06:51:48 PM
No es necesario que ejecutes rand_seed más de una vez :)
Title: Re:Problema con la función Rand
Post by: juanpe on April 29, 2018, 07:13:35 PM
Ok pero podrías explicarme porque en este ejemplo la variable número 1 imprime 7 valores iguales?
Title: Re:Problema con la función Rand
Post by: SplinterGU on April 30, 2018, 05:54:09 AM
porque rand_seed inicia la semila con la que rand calcula el numero, si ejecutas rand_seed antes de cada rand, y pasando time() como parametro, vas a obtener el mismo numero en rand durante (al menos) el mismo segundo
Title: Re:Problema con la función Rand
Post by: SplinterGU on April 30, 2018, 05:56:51 AM
por otro lado, el write que no tiene modificacion, no hay que meterlo dentro del for... cada vez que haces un write creas un objeto que se dibuja en pantalla... y se mantiene hasta que lo elimines... no tiene sentido meter un write en un for sin borrarlo, y ademas es contraproducente, ya que consume recursos, se va creando y creando una y otra vez.
Title: Re:Problema con la función Rand
Post by: juanpe on April 30, 2018, 06:25:26 PM
Ya he solucionado el problema sacando rand eres del for, gracias a los dos.
Por otro lado el poner write dentro de un for me ha funcionado bien, estoy haciendo una simulación de un sorteo y lleno la pantalla de datos.
Title: Re:Problema con la función Rand
Post by: SplinterGU on May 01, 2018, 07:04:12 AM
Quote from: juanpe on April 30, 2018, 06:25:26 PM
Ya he solucionado el problema sacando rand eres del for, gracias a los dos.
Por otro lado el poner write dentro de un for me ha funcionado bien, estoy haciendo una simulación de un sorteo y lleno la pantalla de datos.

por supuesto que va a funcionarte el write dentro del for, pero eventualmente se quedara sin memoria o sin textos disponibles y la aplicacion se cerrara... no es prolijo hacerlo de ese modo... no, si no lo borras en cada frame...
Title: Re:Problema con la función Rand
Post by: juanpe on May 02, 2018, 03:46:36 PM
Ya te entiendo Splinter, de hecho al finalizar el programa y utilizar muchos más datos he utilizado el write fuera del for.
Gracias de nuevo.
Title: Re:Problema con la función Rand
Post by: SplinterGU on May 02, 2018, 10:06:22 PM
de nada