BASIC tricks: Rellenar la pantalla aleatoriamente

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

BASIC tricks: Rellenar la pantalla aleatoriamente

Mensajepor ronaldo » Jue 01 Dic , 2016 8:30 pm

A raiz de una pregunta en CPCWiki, he empezado una pequeña sección de minitruquillos en BASIC. El primero rellena todos los caracteres de una pantalla de texto en modo 1 (40x25) sin dibujar 2 veces en el mismo sitio. Aquí os dejo un vídeo:



Y a continuación os dejo el código, en sólo 2 líneas de BASIC, con una pequeña explicación, por si queréis probarlo o usarlo:

Código: Seleccionar todo

10 mode 1:defint A-Z:c=1:RANDOMIZE TIME:s=RND*1024+1:for i=1 to 1023:if s<1001then p=s-1:x=p mod 40+1:y=p\40+1:locate x,y:pen c:print "#";:c=(c mod 3)+1
20 l=s and 1:s=s\2:s=s XOR &240*l:next:call&BB18
La explicación es la siguiente:
  • La variable S contiene lo que se llama un Galois Linear-Feedback Shift Register(*) de 10 bits. Básicamente, es un método para obtener una secuencia de números que no se repite y que incluye todos menos el 0. En este caso, como es de 10 bits, son todos los números del 1 al 1023 sin repetición.
  • El número S lo utilizo como si fuera el índice de un vector de 1000 elementos, que es la pantalla (40x25 = 1000). Los números superiores a 1001 los descarto, y los inferiores los convierto a coordenadas x,y de pantalla dividiendo por 40 y quedándome el resto.
  • El resto es empezar en una posición aleatoria, repetir en bucle y aplicar el método del Linear Shift Register (ah, y cambiar de color).
Si os hace falta alguna aclaración adicional, sólo tenéis que preguntar.

Espero que os guste :).

(*) Vendría a significar algo así como Registro de desplazamiento con retroalimentación lineal de Galois

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: BASIC tricks: Rellenar la pantalla aleatoriamente

Mensajepor Artaburu » Jue 01 Dic , 2016 10:18 pm

Qué bueno lo de de los aleatorios que no se repiten. Me lo guardo en la lista de imprescindibles. Mañana me leo lo de la wikipedia que veo que es muy técnico y es de noche. ¿Se podría hacer con cualquier número de bits?
Salu2,
Arta

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: BASIC tricks: Rellenar la pantalla aleatoriamente

Mensajepor ronaldo » Vie 02 Dic , 2016 10:05 am

¿Se podría hacer con cualquier número de bits?
Sí, se puede para cualquier número de bits. De hecho, casi todos los generadores de números pseudoaleatorios siguen el mismo principio: generan una secuencia de n bits con todos los números posibles sin repetición. Lo único es que suelen usar más bits de los que devuelven. Por ejemplo, con un generador estándar de Marsaglia, utilizas 40 bits para generar una secuencia que no se repita, pero sólo devuelves los últimos 8 bits como número aleatorio. A los 40 bits se le suele llamar el estado.

Los de Galois tienen la ventaja de ser muy fáciles y rápidos de implementar, como ves. Los de Marsaglia XOR-Shift no son mucho más complejos de implementar, pero tampoco hacia falta en este ejemplo.


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic