Función RAND para Z88DK (Kit ZX-Uno)

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Responder
Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Función RAND para Z88DK (Kit ZX-Uno)

Mensaje por Hark0 » 15 Dic 2015, 10:30

Añado aqui la función RAND() recuperada del foro de los Mojon que utilizo en mis pruebas con Z88DK... ;)

Instrucciones de uso:

0.- Añadir el include para la libreria random.h

1.- Inicializar la semilla con:

seed1 [0] = a;
seed2 [0] = b;
srand ();

2.- Usar la función en cualquier punto del programa:

c = rand () % 12; // Un número entre 0 y 11.
c = a + (rand () % (b - a + 1)); // Un número entre a y b, ambos inclusive, con a < b.


Añado aqui los comentarios de Na_th_an: (por cierto, gracias desde aquí de nuevo).

Cada vez que queráis un random, llamad a rand. Da un valor entre 0 y 255. Con módulos y ANDs tenéis lo que necesitéis.

Es mejor procurar que tus randoms sean en rangos que sean potencias de 2 porque así no tienes que dividir, que es lento y costoso. Por ejemplo, para seleccionar una columna de la pantalla al azar, al ser 32 los posibles valores y ser 32 potencia de 2, podemos hacer:

c = rand () & 31;

Un AND aritmético es inmediato, mientras que para dividir y hacer un módulo hay que tirar de una función porque el z80 no divide.
Adjuntos
random.h
(1.09 KiB) Descargado 125 veces
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Haplo
Mensajes: 366
Registrado: 05 Oct 2015, 13:51
Ubicación: Ciudad Real

Re: Función RAND para Z88DK (Kit ZX-Uno)

Mensaje por Haplo » 15 Dic 2015, 11:09

Anda, justamente estaba peleándome con el rand de zxbasic porque me saca aleatorios demasiado poco aleatorios XD
Miraré si con este código se mejora la cosa. Lo uso para no meter a mano posiciones de sprites de los enemigos en las pruebas.

Grachie!

Responder