Sideras Spectrum
Descripción del contenido de la página
Juego escrito en Forth para la computadora Sinclair ZX Spectrum.
Sideras Spectrum es una versión de Sideras para la ZX Spectrum, escrita en Abersoft Forth. Es una adaptación tan fiel que adolece del mismo error que el original: No está escrita pensando en Forth; me limité a adaptar el código de un dialecto de Forth a otro. Mirando ahora el código que sigue y viendo su pobre estilo siento ganas de reescribirlo desde cero con el estilo de Forth... Pero lo único que he hecho es un par de retoques cosméticos y corregir alguna errata.
Hay algunos detalles interesantes para comentar sobre la adaptación de Ace Forth a Abersoft Forth, pues aparte de algunas diferencias en el lenguaje en sí, lógicamente las palabras relacionadas con cada máquina son diferentes (gráficos, pantalla, sonido y variables del sistema):
- Abersoft Forth carece de la palabra
1-
. En lugar de añadirla usé1 -
. - Abersoft Forth tiene la palabra
+!
, lo que simplifica varias frases del programa. - La versión en Abersoft Forth usa como nave espacial un gráfico definido por el usuario en lugar de la letra V. Pero cometí la ingenuidad de meter su definición dentro de una palabra, desperdiciando así espacio del diccionario. Por suerte en la ZX Spectrum no había que preocuparse por quedarse sin memoria, como pasaba en la Jupiter Ace.
- Abersoft Forth carece de la palabra
ascii
o equivalente. En lugar de crearla, escribí en el programa los códigos de los caracteres que necesitaba (práctica nada recomendable porque lo hace menos legible). - Abersoft Forth dispone de la palabra
SCREEN
para leer el código del carácter situado en una posición de la pantalla; eso simplificó el código que detecta las colisiones.
Código fuente
( Sideras Spectrum )
( Written in Abersoft Forth for the Sinclair ZX Spectrum )
( Based on "Sideras", written by unknown author in Ace Forth for the Jupiter Ace )
( Copyright [C] 1985,2009 Marcos Cruz, http://programandala.net )
( License: http://programandala.net/license )
( 1985-08-25 First version. )
( 2009-06-07 Some little changes. )
: TASK ;
23670 CONSTANT SEED
: RND
SEED @ 75 U* 75 0 D+ OVER OVER U< - -
1 - DUP SEED ! U* SWAP DROP
;
: RANDOM 23672 @ SEED ! ;
: DEF 8 * UDG + DUP 8 + SWAP DO I C! LOOP ;
0 VARIABLE X
0 VARIABLE VELOCIDAD
0 VARIABLE CONTADOR
: K= INKEY = ;
: IZQ
X @ 0 > 49 K= AND
IF -1 X +!
THEN
;
: SIDERAS
21 20 RND AT
CONTADOR @ 200 <
IF ." * *"
ELSE 124 EMIT 8 SPACES 124 EMIT
THEN
CR CR
;
: IMPACTO? 11 X @ SCREEN 32 > ;
: ACELERADOR
CONTADOR @ 5 MOD 0=
VELOCIDAD @ 10 > AND
IF -1 VELOCIDAD +!
THEN
;
: CRASH
10 1000 BLEEP
CR CR ." HA RECORRIDO " CONTADOR ? ." PARSECS" QUIT
;
: DER
X @ 30 < 48 K= AND
IF 1 X +!
THEN
;
: INIC
0 DUP PAPER BORDER 7 INK CLS
0 CONTADOR ! 50 VELOCIDAD !
24 60 102 255 231 195 129 DUP 0 DEF
;
: RUN
INIC
BEGIN
10 X @ OVER 1 - OVER AT SPACE AT SPACE
DER IZQ
10 X @ AT 144 EMIT
ACELERADOR
10 RND 10 + VELOCIDAD @ BLEEP
IMPACTO?
IF CRASH
THEN
SIDERAS
1 CONTADOR +!
12 K=
UNTIL
;
Descargas
El código fuente que ofrezco es un fichero de texto simple creado a partir de un antiguo listado de impresora. No es directamente utilizable por la ZX Spectrum; para ejecutarlo habría que teclearlo en Abersoft Forth con su propio editor.
Precisamente para convertir textos fuente de Forth en ficheros TAP legibles en un emulador de ZX Spectrum estoy escribiendo el programa Ftaper.