24 septiembre 2014

Un mini-juego en BASIC de Amstrad CPC (1: escribir, crear un programa)

Se acerca el concurso de juegos retro para Amstrad CPC organizado por ByteRealms. Eso me ha motivado a desempolvar un tutorial breve que hice para la Revista de Usuarios Amstrad titulado "Aprende a programar en BASIC de Amstrad CPC... creando un mini-juego" Durante los próximos (pocos) días, podrás encontrar aquí una versión ampliada, por si te apetece entrar en ese mundillo...

1. Escribir en pantalla

Escribir un texto en pantalla es fácil: usaremos la orden PRINT, seguida del texto que queremos mostrar. Este texto lo escribiremos en pantalla entre comillas.
PRINT "Hola"
Cuando pulsemos la tecla de "retorno" (Intro, Entrar, Return,o una flecha hacia abajo y hacia la izquierda), nuestro CPC analiza esa orden y la "ejecuta", mostrando el texto Hola en pantalla.
Las órdenes del lenguaje BASIC, como PRINT, son palabras en inglés, o abreviaturas de éstas. Lo mismo ocurre en la mayoría de lenguajes de programación. Además en BASIC las podemos escribir en mayúsculas o en minúsculas indistintamente (esto ya no es tan habitual en otros lenguajes).
Para probar esa orden puedes usar un Amstrad CPC real, un emulador de escritorio como WinApeCPCE o JavaCPC, o incluso un emulador para navegadores web, basado en Javascript, como Roland

2. Escribir un carácter extendido

El juego de caracteres de un Amstrad CPC incluye muchos más símbolos que letras y números. También hay símbolos que nos permiten dibujar recuadros, o incluso alguno más específico, como una "persona", que nos puede venir bien para este "mini-juego". Para obtener uno de estos símbolos necesitamos saber su "número" asociado, y usar la expresión CHR$, así:
PRINT CHR$(248)

(Más adelante veremos cómo saber cuál es todo el juego de caracteres del Amstrad CPC)

3. Situarnos en cualquier posición de la pantalla

Existe una orden que nos permite movernos a en cualquier posición de la pantalla. Se trata de LOCATE, a la que se le indican las "coordenadas" en las que nos queremos colocar (X, columna, contando desde la parte izquierda de la pantalla, con valores de 1 a 80, e Y, fila, contando desde la parte superior de la pantalla, con valores de 1 a 25):
LOCATE 20,15
Como sólo sabemos dar una orden cada vez, LOCATE resulta un tanto inútil todavía: la orden anterior se coloca en el centro de la línea 15... no hace nada... y baja a la línea 16. Necesitamos poder dar varias órdenes seguidas...

4. Varias órdenes en una

Si queremos dar varios pasos seguidos, podemos indicar varias órdenes separadas entre un símbolo de "dos puntos" (:).
LOCATE 20,15:PRINT CHR$(248)

Ahora sí se verá nuestra "persona" centrada en la pantalla.

5. Un programa formado por varias líneas

Aunque podamos escribir varias órdenes en una misma línea, no será suficiente para un programa real: en un Amstrad CPC, cada línea puede tener una longitud máxima de 256 caracteres.
La alternativa es crear un programa formado por varias líneas. Podemos indicar un número de línea delante de cada orden, y así el programa no se podrá en marcha automáticamente, sino que quedará "almacenado":
1 LOCATE 20,15
2 PRINT CHR$(248)
Cuando tecleemos RUN (y pulsemos Intro), será cuando el programa se ponga en funcionamiento, siguiendo el orden numérico de las órdenes que hemos escrito (primero la 1 y después la 2). Si queremos comprobar en algún momento el "listado" de nuestro programa (todas las órdenes que lo forman), lo podemos hacer con la orden LIST (seguida por Intro, claro).
Para poder añadir una orden entre dos que ya existen, es habitual "dejar hueco", no numerándolas de uno en uno, sino dando un salto mayor, típicamente de 10 en 10:
10 LOCATE 20,15
20 PRINT CHR$(248)
Para borrar una línea, basta con teclear su número y pulsar Intro. Por ejemplo, si has tecleado todo lo anterior, tu programa tendrá las líneas 1, 2, 10 y 20. Podrías borrar la línea 1 tecleando 1[Intro] y la 2 de igual forma. Si quieres borrar TODO el programa, puedes usar la orden NEW.

1 comentario:

Mariu dijo...

HOLA PODRIA AYUDARME POR FAVOR CON UNA TAREA
TENGO QUE HACER QUE UN CIRCULO SE MUEVA DE FORMA DE UNA ONDA SENOIRAL EN BASIC256 PORFAVORRR