28. Más elementos en el fondo
Vamos a hacer que los elementos del juego sean parte del fondo. Como necesitaremos líneas nuevas entre las ya existentes, vamos a comenzar por renumerar, dejando un espacio de 50 entre cada par de líneas:
RENUM 1000, 1, 50
En primer lugar, podríamos modificar el mapa, para que incluya los obstáculos (que podríamos representar con una "x"), los premios (una "o", por ejemplo) e incluso los enemigos ("e") y nuestra propia posición de partida ("A):
4300 DATA PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 4350 DATA PP-o--PPP----o---PPPP-o------PP 4400 DATA PP---xPPP---x----PPPP---x----PP 4450 DATA PP----PPP--e-----PPPP--------PP 4500 DATA PP----PPPPP------PPPP--------PP 4550 DATA PP--PPPPPPPPPP--PPPPP----PPPPPP 4600 DATA PP---PPPPPPPP--PPPPPPPP----PPPP 4650 DATA PPP-A--PPPPP---PPPPPPPPP---PPPP 4700 DATA PP----------------x---e-----PPP 4750 DATA PPP------------------------PPPP 4800 DATA PPPPP-----------PPPPPPPPP----PP 4850 DATA PPPPPP--e--------PPPPPP---P--PP 4900 DATA PPP----x--------------PPP-PP-PP 4950 DATA PP--------------x--o-----PPPPPP 5000 DATA PP-o------------------------PPP 5050 DATA PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
Así, necesitaremos un array para el fondo, pero también uno de enemigos, para que se muevan independientemente del fondo. (No será necesario array de obstáculos ni de premios). El análisis del mapa va a ser bastante más complejo que antes.
Por ejemplo, la lectura y análisis de los DATA, guardando en el mapa de pantalla las paredes y los obstáculos podría ser
1850 FOR fila = 1 TO 16 1900 READ linea$ 1950 FOR columna = 1 TO 32 2050 IF MID$(linea$,columna,1) = "P" THEN pantalla$(fila+2, columna+4)=pared$ 2060 IF MID$(linea$,columna,1) = "x" THEN pantalla$(fila+2, columna+4)=obstaculo$ 2100 NEXT columna 2150 NEXT fila
De igual modo, podríamos obtener nuestra posición desde el mapa:
2070 IF MID$(linea$,columna,1) = "A" THEN y=fila+2: x=columna+4
Y la información sobre los premios, incluyendo un contador que nos ayude a saber cuándo hemos superado esta pantalla (cuando ya no quede ningún premio por recoger):
2080 IF MID$(linea$,columna,1) = "o" THEN premios = premios+1: pantalla$(fila+2, columna+4)=premio$
Y la información de los enemigos la trasladaríamos a los arrays correspondientes:
1850 FOR fila = 1 TO 16 2090 IF MID$(linea$,columna,1) = "e" THEN enemigos = enemigos+1: yE(enemigos)=fila+2: xE(enemigos)=columna+4: velocE(enemigos)=1
Y podríamos dibujar la pantalla a partir del contenido del array:
2162 FOR f = 1 TO 25 2164 FOR c = 1 TO 40 2166 LOCATE c, f 2168 IF pantalla$(f,c) = pared$ THEN PEN colorPared: PRINT pared$; 2170 IF pantalla$(f,c) = obstaculo$ THEN PEN colorEnemigo: PRINT obstaculo$; 2172 IF pantalla$(f,c) = premio$ THEN PEN colorPremio: PRINT premio$; 2174 NEXT c 2176 NEXT f
Como este proceso es relativamente lento, podemos avisar al usuario para que no se desespere...
A la hora de comprobar el teclado, antes de movernos a una posición deberemos comprobar si no es una pared:
2550 IF INKEY(arriba) <> -1 AND pantalla$(y-1,x)<>pared$ THEN y=y-1 2600 IF INKEY(abajo) <> -1 AND pantalla$(y+1,x)<>pared$ THEN y=y+1 2650 IF INKEY(derecha) <> -1 AND pantalla$(y,x+1)<>pared$ THEN x=x+1 2700 IF INKEY(izqda) <> -1 AND pantalla$(y,x-1)<>pared$ THEN x=x-1
Y lo mismo deberán hacer los enemigos:
2850 FOR n = 1 TO enemigos 2860 ' Avanzar si no es pared; dar la vuelta si lo es 2870 IF pantalla$(yE(n),xE(n)+velocE(n)) <> pared$ THEN xE(n)=xE(n)+velocE(n) ELSE velocE(n)=-velocE(n) 3000 NEXT n
Pero también hay premios y obstáculos: si el enemigo pasa por encima de ellos, se borrarán de la pantalla; deberemos redibujarlos... o simplemente no permitir que pueda pasar por encima, sino que rebote también en ellos:
2865 obj$=pantalla$(yE(n),xE(n)+velocE(n)) 2870 IF obj$<>pared$ AND obj$<>premio$ AND obj$<>obstaculo$ THEN xE(n)=xE(n)+velocE(n) ELSE velocE(n)=-velocE(n)
Si la posición a la que llegamos es un premio, debemos borrarlo y sumar puntos:
3100 IF pantalla$(y,x) = premio$ THEN puntos=puntos+10: premios=premios-1: pantalla$(y,x) = " "
Si la posición a la que llegamos es un obstáculo, se acabó la partida:
3150 IF pantalla$(y,x) = obstaculo$ THEN terminado = 1
Y lo mismo si es uno de los enemigos:
3350 FOR n = 1 TO enemigos 3400 IF x=xE(n) AND y=yE(n) THEN terminado = 1 3450 NEXT n
Y no hace falta redibujar las paredes, ni los obstáculos, ni los premios, sólo el personaje, los enemigos y el marcador:
3550 PEN colorPremio: LOCATE x,y: PRINT jugador$ 3950 PEN colorEnemigo: FOR n = 1 TO enemigos:LOCATE xE(n),yE(n):PRINT enemigo$: NEXT n 4200 LOCATE 15,22: PRINT "Puntos "; puntos ; " "
Con todo esto, la apariencia resultante sería
Y el fuente completo por ahora quedaría
1 ' Laberinto 2014 2 ' Ejemplo de juego en BASIC de CPC 3 ' Desarrollado paso a paso por Nacho 1000 ' 1010 ' Inicializacion 1020 ' 1030 ' -- Colores de pantalla -- 1050 MODE 1: INK 0,0: INK 1,20: INK 2,6: INK 3,25: PAPER 0: PEN 1 1060 colorPared=1: colorEnemigo=2: colorPremio=3 1090 ' -- Definicion de caracteres -- 1100 SYMBOL 240, &X11111100, &X11111100, &X11111100, &X0, &X11001111, &X11001111, &X11001111, &X0 1150 SYMBOL 241, &X11000, &X101100, &X1000110, &X10000011, &X10000011, &X1000110, &X101100, &X11000 1200 SYMBOL 242, &X10000, &X10010010, &X1010100, &X111000, &X11111111, &X111000, &X1010100, &X10010010 1250 SYMBOL 243, &X10111101, &X1111110, &X11011011, &X11111111, &X11100111, &X11011011, &X1100110, &X11000011 1300 pared$=CHR$(240): premio$=CHR$(241): obstaculo$=CHR$(242): enemigo$=CHR$(243): jugador$=CHR$(248) 1310 ' -- Teclas --- 1320 arriba=0: abajo=2: derecha=1: izqda=8: salir=63 1350 ' -- Datos del juego -- 1400 terminado=0 1450 puntos=0 1455 premios=0: enemigos=0 1460 ' -- Lectura del mapa desde DATA -- 1550 DIM xE(10), yE(10), velocE(10) 1600 DIM pantalla$(25,40) 1650 LOCATE 15,22: PRINT"Generando..." 1810 ' Vamos a vaciar el array, para evitar basura 1820 FOR f = 1 TO 25: FOR c = 1 TO 40: pantalla$(f,c)=" ": NEXT c: NEXT f 1840 ' Y a rellenar los datos reales 1850 FOR fila = 1 TO 16 1900 READ linea$ 1950 FOR columna = 1 TO 32 2050 IF MID$(linea$,columna,1) = "P" THEN pantalla$(fila+2, columna+4)=pared$ 2060 IF MID$(linea$,columna,1) = "x" THEN pantalla$(fila+2, columna+4)=obstaculo$ 2070 IF MID$(linea$,columna,1) = "A" THEN y=fila+2: x=columna+4 2080 IF MID$(linea$,columna,1) = "o" THEN premios = premios+1: pantalla$(fila+2, columna+4)=premio$ 2090 IF MID$(linea$,columna,1) = "e" THEN enemigos = enemigos+1: yE(enemigos)=fila+2: xE(enemigos)=columna+4: velocE(enemigos)=1 2100 NEXT columna 2150 NEXT fila 2160 ' -- Dibujado de la parte estatica del mapa -- 2162 FOR f = 1 TO 25 2164 FOR c = 1 TO 40 2166 LOCATE c, f 2168 IF pantalla$(f,c) = pared$ THEN PEN colorPared: PRINT pared$; 2170 IF pantalla$(f,c) = obstaculo$ THEN PEN colorEnemigo: PRINT obstaculo$; 2172 IF pantalla$(f,c) = premio$ THEN PEN colorPremio: PRINT premio$; 2174 NEXT c 2176 NEXT f 2200 ' ----- Bucle de juego ----- 2250 WHILE terminado = 0 2300 ' -- Borrar personaje y enemigos de su posicion anterior -- 2350 FOR n = 1 TO enemigos:LOCATE xE(n),yE(n):PRINT" ": NEXT n 2400 LOCATE x,y: PRINT " " 2500 ' -- Comprobar teclas -- 2550 IF INKEY(arriba) <> -1 AND pantalla$(y-1,x)<>pared$ THEN y=y-1 2600 IF INKEY(abajo) <> -1 AND pantalla$(y+1,x)<>pared$ THEN y=y+1 2650 IF INKEY(derecha) <> -1 AND pantalla$(y,x+1)<>pared$ THEN x=x+1 2700 IF INKEY(izqda) <> -1 AND pantalla$(y,x-1)<>pared$ THEN x=x-1 2750 IF INKEY(salir) <> -1 THEN terminado=1 2800 ' -- Mover enemigos, entorno -- 2850 FOR n = 1 TO enemigos 2860 ' Avanzar si no es pared; dar la vuelta si lo es 2865 obj$=pantalla$(yE(n),xE(n)+velocE(n)) 2870 IF obj$<>pared$ AND obj$<>premio$ AND obj$<>obstaculo$ THEN xE(n)=xE(n)+velocE(n) ELSE velocE(n)=-velocE(n) 3000 NEXT n 3050 ' -- Colisiones, perder vidas, etc -- 3100 IF pantalla$(y,x) = premio$ THEN puntos=puntos+10: premios=premios-1: pantalla$(y,x) = " " 3150 IF pantalla$(y,x) = obstaculo$ THEN terminado = 1 3350 FOR n = 1 TO enemigos 3400 IF x=xE(n) AND y=yE(n) THEN terminado = 1 3450 NEXT n 3500 ' -- Dibujar en nueva posicion -- 3550 PEN colorPremio: LOCATE x,y: PRINT jugador$ 3950 PEN colorEnemigo: FOR n = 1 TO enemigos:LOCATE xE(n),yE(n):PRINT enemigo$: NEXT n 4200 LOCATE 15,22: PRINT "Puntos "; puntos ; " " 4250 WEND 4300 DATA PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 4350 DATA PP-o--PPP----o---PPPP-o------PP 4400 DATA PP---xPPP---x----PPPP---x----PP 4450 DATA PP----PPP--e-----PPPP--------PP 4500 DATA PP----PPPPP------PPPP--------PP 4550 DATA PP--PPPPPPPPPP--PPPPP----PPPPPP 4600 DATA PP---PPPPPPPP--PPPPPPPP----PPPP 4650 DATA PPP-A--PPPPP---PPPPPPPPP---PPPP 4700 DATA PP----------------x---e-----PPP 4750 DATA PPP------------------------PPPP 4800 DATA PPPPP-----------PPPPPPPPP----PP 4850 DATA PPPPPP--e--------PPPPPP---P--PP 4900 DATA PPP----x--------------PPP-PP-PP 4950 DATA PP--------------x--o-----PPPPPP 5000 DATA PP-o------------------------PPP 5050 DATA PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
29. Varias vidas
Nuestra partida acaba en cuanto chocamos con un enemigo o un obstáculo. Quizá eso sea demasiado exigente. Es habitual en los juegos tener varias vidas, o energía que se va perdiendo poco a poco. No es algo difícil de hacer: cuando haya una colisión, deberemos restar una de esas vidas y eliminar lo que causó la colisión (para no perder todas las vidas de golpe), por ejemplo devolviendo todos los elementos a su posición inicial, o al menos nuestro personaje.
Crear las vidas es fácil:
1450 puntos=0: vidas=3
En los bloques que comprueban colisiones, cambiaríamos "terminado" por una nueva variable "chocado":
3150 IF pantalla$(y,x) = obstaculo$ THEN chocado = 1 3400 IF x=xE(n) AND y=yE(n) THEN chocado = 1
Y si hemos chocado deberemos perder una vida, recolocar al personaje y quizá terminar:
3460 IF chocado = 1 THEN vidas = vidas-1: chocado = 0: y = yInicial: x = xInicial 3470 IF vidas = 0 THEN terminado = 1
Antes tendremos que haber memorizado esas coordenadas iniciales, claro...
2070 IF MID$(linea$,columna,1) = "A" THEN y=fila+2: x=columna+4: yInicial=y: xInicial=x
Y no estaría de más que avisáramos al usuario de cuántas vidas le quedan:
4210 LOCATE 15,23: PRINT "Vidas "; vidas
El juego completo estaría quedando:
1 ' Laberinto 2014 2 ' Ejemplo de juego en BASIC de CPC 3 ' Desarrollado paso a paso por Nacho 1000 ' 1010 ' Inicializacion 1020 ' 1030 ' -- Colores de pantalla -- 1050 MODE 1: INK 0,0: INK 1,20: INK 2,6: INK 3,25: PAPER 0: PEN 1 1060 colorPared=1: colorEnemigo=2: colorPremio=3 1090 ' -- Definicion de caracteres -- 1100 SYMBOL 240, &X11111100, &X11111100, &X11111100, &X0, &X11001111, &X11001111, &X11001111, &X0 1150 SYMBOL 241, &X11000, &X101100, &X1000110, &X10000011, &X10000011, &X1000110, &X101100, &X11000 1200 SYMBOL 242, &X10000, &X10010010, &X1010100, &X111000, &X11111111, &X111000, &X1010100, &X10010010 1250 SYMBOL 243, &X10111101, &X1111110, &X11011011, &X11111111, &X11100111, &X11011011, &X1100110, &X11000011 1300 pared$=CHR$(240): premio$=CHR$(241): obstaculo$=CHR$(242): enemigo$=CHR$(243): jugador$=CHR$(248) 1310 ' -- Teclas --- 1320 arriba=0: abajo=2: derecha=1: izqda=8: salir=63 1350 ' -- Datos del juego -- 1400 terminado=0:chocado=0 1450 puntos=0: vidas=3 1455 premios=0: enemigos=0 1460 ' -- Lectura del mapa desde DATA -- 1550 DIM xE(10), yE(10), velocE(10) 1600 DIM pantalla$(25,40) 1650 LOCATE 15,22: PRINT"Generando..." 1810 ' Vamos a vaciar el array, para evitar basura 1820 FOR f = 1 TO 25: FOR c = 1 TO 40: pantalla$(f,c)=" ": NEXT c: NEXT f 1840 ' Y a rellenar los datos reales 1850 FOR fila = 1 TO 16 1900 READ linea$ 1950 FOR columna = 1 TO 32 2050 IF MID$(linea$,columna,1) = "P" THEN pantalla$(fila+2, columna+4)=pared$ 2060 IF MID$(linea$,columna,1) = "x" THEN pantalla$(fila+2, columna+4)=obstaculo$ 2070 IF MID$(linea$,columna,1) = "A" THEN y=fila+2: x=columna+4: yInicial=y: xInicial=x 2080 IF MID$(linea$,columna,1) = "o" THEN premios = premios+1: pantalla$(fila+2, columna+4)=premio$ 2090 IF MID$(linea$,columna,1) = "e" THEN enemigos = enemigos+1: yE(enemigos)=fila+2: xE(enemigos)=columna+4: velocE(enemigos)=1 2100 NEXT columna 2150 NEXT fila 2160 ' -- Dibujado de la parte estatica del mapa -- 2162 FOR f = 1 TO 25 2164 FOR c = 1 TO 40 2166 LOCATE c, f 2168 IF pantalla$(f,c) = pared$ THEN PEN colorPared: PRINT pared$; 2170 IF pantalla$(f,c) = obstaculo$ THEN PEN colorEnemigo: PRINT obstaculo$; 2172 IF pantalla$(f,c) = premio$ THEN PEN colorPremio: PRINT premio$; 2174 NEXT c 2176 NEXT f 2200 ' ----- Bucle de juego ----- 2250 WHILE terminado = 0 2300 ' -- Borrar personaje y enemigos de su posicion anterior -- 2350 FOR n = 1 TO enemigos:LOCATE xE(n),yE(n):PRINT" ": NEXT n 2400 LOCATE x,y: PRINT " " 2500 ' -- Comprobar teclas -- 2550 IF INKEY(arriba) <> -1 AND pantalla$(y-1,x)<>pared$ THEN y=y-1 2600 IF INKEY(abajo) <> -1 AND pantalla$(y+1,x)<>pared$ THEN y=y+1 2650 IF INKEY(derecha) <> -1 AND pantalla$(y,x+1)<>pared$ THEN x=x+1 2700 IF INKEY(izqda) <> -1 AND pantalla$(y,x-1)<>pared$ THEN x=x-1 2750 IF INKEY(salir) <> -1 THEN terminado=1 2800 ' -- Mover enemigos, entorno -- 2850 FOR n = 1 TO enemigos 2860 ' Avanzar si no es pared; dar la vuelta si lo es 2865 obj$=pantalla$(yE(n),xE(n)+velocE(n)) 2870 IF obj$<>pared$ AND obj$<>premio$ AND obj$<>obstaculo$ THEN xE(n)=xE(n)+velocE(n) ELSE velocE(n)=-velocE(n) 3000 NEXT n 3050 ' -- Colisiones, perder vidas, etc -- 3100 IF pantalla$(y,x) = premio$ THEN puntos=puntos+10: premios=premios-1: pantalla$(y,x) = " " 3150 IF pantalla$(y,x) = obstaculo$ THEN chocado = 1 3350 FOR n = 1 TO enemigos 3400 IF x=xE(n) AND y=yE(n) THEN chocado = 1 3450 NEXT n 3460 IF chocado = 1 THEN vidas = vidas-1: chocado = 0: y = yInicial: x = xInicial 3470 IF vidas = 0 THEN terminado = 1 3500 ' -- Dibujar en nueva posicion -- 3550 PEN colorPremio: LOCATE x,y: PRINT jugador$ 3950 PEN colorEnemigo: FOR n = 1 TO enemigos:LOCATE xE(n),yE(n):PRINT enemigo$: NEXT n 4200 LOCATE 15,22: PRINT "Puntos "; puntos ; " " 4210 LOCATE 15,23: PRINT "Vidas "; vidas 4250 WEND 4300 DATA PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP 4350 DATA PP-o--PPP----o---PPPP-o------PP 4400 DATA PP---xPPP---x----PPPP---x----PP 4450 DATA PP----PPP--e-----PPPP--------PP 4500 DATA PP----PPPPP------PPPP--------PP 4550 DATA PP--PPPPPPPPPP--PPPPP----PPPPPP 4600 DATA PP---PPPPPPPP--PPPPPPPP----PPPP 4650 DATA PPP-A--PPPPP---PPPPPPPPP---PPPP 4700 DATA PP----------------x---e-----PPP 4750 DATA PPP------------------------PPPP 4800 DATA PPPPP-----------PPPPPPPPP----PP 4850 DATA PPPPPP--e--------PPPPPP---P--PP 4900 DATA PPP----x--------------PPP-PP-PP 4950 DATA PP--------------x--o-----PPPPPP 5000 DATA PP-o------------------------PPP 5050 DATA PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
30. Uso de joystick
Permitir que un juego de CPC funcione con joystick no es difícil. Existen dos formas de acceder al estado del joystick. La más sencilla es usar la misma función INKEY que estamos empleando para comprobar el teclado, y que tiene códigos especiales reservados para el joy:
1330 joyArriba=72: joyAbajo=73: joyDerecha=75: joyIzqda=74
De modo que sólo tendremos que añadir un caso extra a cada comprobación de teclas:
2550 IF (INKEY(arriba)<>-1 OR INKEY(joyArriba)<>-1) AND pantalla$(y-1,x)<>pared$ THEN y=y-1 2600 IF (INKEY(abajo) >-1 OR INKEY(joyAbajo)<>-1) AND pantalla$(y+1,x)<>pared$ THEN y=y+1 2650 IF (INKEY(derecha)<>-1 OR INKEY(joyDerecha)<>-1) AND pantalla$(y,x+1)<>pared$ THEN x=x+1 2700 IF (INKEY(izqda)<>-1 OR INKEY(joyIzqda)<>-1) AND pantalla$(y,x-1)<>pared$ THEN x=x-1
El código del botón de disparo principal (que no usamos en este juego, pero quizá te resulte útil en algún otro) es el 76, y el disparo secundario es el 77.
31. Una pantalla de presentación
Crear una pantalla de bienvenida para nuestro juego es fácil: basta escribir algo (o, dentro de poco, dibujar algo) antes de entrar al bucle de juego.
1265 ' -- Pantalla de bienvenida -- 1270 LOCATE 10,4: PEN colorPared: PRINT "Bienvenido al laberinto" 1272 LOCATE 10,7: PEN colorPremio: PRINT "Recoge los premios: "; premio$ 1274 LOCATE 10,9: PEN colorEnemigo: PRINT "Esquiva los obstaculos: "; obstaculo$ 1276 LOCATE 10,11: PRINT "Y evita a los enemigos: "; enemigo$ 1278 LOCATE 4,20: PEN colorPared: PRINT "Pulsa una tecla para empezar... "; 1300 WHILE INKEY$="":WEND: 'Pausa 1305 CLS
Incluso es fácil hacer que se vuelva a ella al terminar una partida:
4260 LOCATE 12,10: PEN colorPremio: PRINT " Partida terminada! " 4275 WHILE INKEY$="":WEND: 'Y esperamos una tecla 4290 GOTO 1265
Eso sí, deberíamos tener un par de precauciones: hacer que se vuelva a leer desde el principio de los DATA (con RESTORE) y destruir esos arrays que hemos creado (con ERASE) y que se intentarían volver a crear si saltamos al principio del programa sin ninguna precaución. Además, como puede que el usuario estuviese pulsando una tecla al terminar la partida, deberíamos esperar a que deje de pulsar el teclado, bien esperando un cierto tiempo, o esperando hasta que ninguna tecla esté pulsada o las dos cosas:
4260 LOCATE 12,10: PEN colorPremio: PRINT " Partida terminada! " 4265 FOR i=1 TO 500: NEXT i: 'Pausa por tiempo 4270 WHILE INKEY$<>"":WEND: 'Vaciamos buffer del teclado 4275 WHILE INKEY$="":WEND: 'Y esperamos una tecla 4280 CLS: RESTORE: ERASE xE, yE, velocE, pantalla$ 4290 GOTO 1265
¿Y no hay opción de terminar la partida y volver al sistema operativo? No. No se trata de una característica que fuera habitual en los equipos de los años 80, en los que bastaba con pulsar el interruptor de apagado o incluso desconectar el cable de alimentación. No existían técnicas como la escritura diferida en disco duro que pudieran provocar problemas si apagábamos el equipo. Bastaba con esperar a que se apagase el LED que indicaba que la unidad de disco estaba activa... si es que el equipo tenía unidad de disco (cosa que ocurría en los CPC664 y CPC6128, pero no en el primer modelo, el CPC464). Por eso, nuestro juego no tendrá una opción "Salir".
32. Dibujar puntos y líneas
Los Amstrad CPC no distinguen entre modo gráfico y modo de texto. En cualquier momento podemos dibujar líneas y puntos en pantalla. Además, es algo fácil de hacer: la orden PLOT dibuja un punto (indicando las coordenadas X e Y) y la orden DRAW dibuja una línea hasta otro punto (también a partir de sus coordenadas X e Y). El color a usar se indica en un tercer parámetro, que es opcional tanto para PLOT como para DRAW. Por ejemplo, podemos dibujar un marco de doble línea alrededor de la pantalla así:
1280 PLOT 0,0,colorPremio: DRAW 639,0: DRAW 639,399: DRAW 0,399: DRAW 0,0 1285 PLOT 5,5,colorPared: DRAW 634,5: DRAW 634,394: DRAW 5,394: DRAW 5,5
Las coordenadas de la pantalla van desde la (0,0), que es la esquina superior izquierda, a (639,399), que es la esquina inferior derecha, independiente del modo gráfico que se utilice. Las imágenes se verán más definidas en MODE 2 y menos en MODE 0, pero los tres modos responden exactamente al mismo sistema de coordenadas.
No tenemos órdenes para dibujar rectángulos, ni polígonos, ni círculos, sino que deberíamos crear estas figuras a base de líneas. Lo mismo ocurre para cualquier otra figura compleja. Tampoco existe una orden que permita rellenar figuras en toda la gama CPC (sí existe en los CPC664 y 6128, pero no en los CPC464).
Dentro de poco veremos también como incluir pantallas de carga, que muestren imágenes prediseñadas, que podremos haber creado con un equipo moderno o incluso capturado con una cámara digital o un scanner.
No hay comentarios:
Publicar un comentario