Para ejecutar la demo, selecciona la opción “Cargador” en el menú principal, o teclea LOAD “DISK” desde +3BASIC. En el
disco puedes encontrar aparte de los ficheros pertenecientes a la demo, otros que corresponden con algunas utilidades.
Este es el fichero ”source.bas”, que compilado da el fichero “basic.bin”. Si quieres lo puedes ejecutar interpretado (y
muuu lento), simplemente cárgalo (LOAD “SOURCE.BAS”) y luego RUN. Para compilarlo, carga el compilador (LOAD ”HISOFT”),
haz CLEAR 54100 y luego compílalo. El código es muy similar al de la primera demo.
10 REM Hisoft BASIC + CharAde
20 REM #######################
22 CLEAR 54099:
BORDER 0:
PAPER 0:
INK 1:
CLS
24 LOAD "juego.scr" SCREEN$
26 LOAD "charade.bin" CODE
Esta parte es solo interpretada, es básicamente lo mismo que hay en el fichero “DISK”. Lo de abajo sí es el código del
juego. Dado que en Hisoft BASIC las variables de cadena de caracteres tienen por defecto 255 caracteres de longitud, lo
ajustamos en la línea 35.
30 REM : INT+ x,y,fr,sal,nu,gs,t
35 REM : LEN a$<=4,b$<=8,g$<=8,e$<=16,f$<=13,i$<=15,c$<=288,d$<=288,j$<=288,h$<=288
40 REM : OPEN #
50 LET pk=USR 54101
60 LPRINT "!#1)"
70 PRINT AT 6,6;"O-Left P-Right";
AT 7,6;"SPACE-Jump";
AT 10,6;"Press a key to play":
PAUSE 0
80 LET x=14:
LET y=11:
LET sal=0:
LET nu=0:
LET fr=1:
LET gs=0:
LET t=500:
LET a$="$1..":
LET b$="$4..$4..":
LET g$="12,34,58":
LET e$="................":
LET f$=".............":
LET i$="........"
Hasta aquí todo básicamente igual que en la primera demo, pero vamos a usar más variables de cadena de caracteres para los
objetos animados (plataformas, principalmente). Dado que “( TO )” en los LPRINT trabaja con lo que haya entre comillas,
metemos los gráficos en variables (líneas 90, 100, 110 y 120).
90 LET c$="................................................$3.."+e$+"$3............$3.$3...........................$3................................................$3.."+f$+f$+"$3..........................................................................$3..$3..$3..$3.."
100 LET j$="..............................................$3....................$3..$3................................$3......................................................$3................................................................................."+i$+"..........$3..$3..$3..$3.."
110 LET h$="......................................$3..$3..$3........................$3..................$3................................................................$3...."+f$+"..........................$3......$3......$3......$3.............$3..................$3......$0..............."
120 LET d$=b$+b$+b$+"$3..$3..$3..$3..$3..$3..$3.."+b$+b$+"$3..$3..$3..$3..$3..$3..$3.."+b$+b$+"$3..$3..$3.."+b$+"$3.."+b$+"$3.."+b$+"$3..$3."+b$+b$+b$+b$+b$+"$3..$3..$3..$3..$3..$3..$3..$3..$3..$3..$3..$3..$3..$3..$3.............$3..$3..$3.."
130 LET fr=1-fr
.
.
140 REM #######################
################background#
###########################
150 LPRINT "@44";a$;a$;a$;a$;a$;a$
160 LPRINT "@84";a$;a$;a$;a$;a$;a$
170 LPRINT "@B4";a$;a$;a$;a$;a$;a$
180 LPRINT "@F4";a$;a$;a$;a$;a$;a$
.
.
190 REM #######################
. ################foreground#
. ###########################
200 LPRINT "@01";c$(x TO 27+x)
210 LPRINT "@B1";j$(x TO 27+x)
220 LPRINT "@D1";"........................$A..................$3..$3..................$3............................$3............................................................$3...............$3.................................................................$3..$3..$3..$3................$3..$3..$3.."(x TO 27+x)
230 LPRINT "@F1";h$(x TO 27+x)
240 LPRINT "@H1";d$(x TO 27+x)
.
.
250 REM #######################
. ####################sprite#
. ###########################
260 PRINT AT 20,2;"TIME:";t;" ":
. LPRINT "@";CHR$ (y);"C";g$;")!"
270 IF y=16
. AND x<200 THEN
. GO TO 450
.’ENDIF
275 IF x=0 THEN
. LET x=x+1
.’ENDIF
280 IF y=17 THEN
. GO TO 510
.’ENDIF
285 IF t=0 THEN
. GO TO 450
.’ENDIF
.
.
290 REM #######################
. ######################move#
. ###########################
300 IF sal=1 THEN
. GO TO 330
.’ENDIF
310 IF y<18 THEN
. IF ATTR (1+y,13)<2
. AND ATTR (1+y,14)<2 THEN
. LET y=1+y
. ’ENDIF
.’ENDIF
320 IF ATTR (1+y,13)=113 THEN
. LET x=x+1
.’ENDIF
330 IF ATTR (y,12)=68
. OR ATTR (y,15)=68
. OR ATTR (y+1,13)=68
. OR ATTR (y+1,14)=68 THEN
. GO TO 450
.’ENDIF
340 IF IN 57342=253
. OR IN 57342=189 THEN
. LET g$=("90,AB,CF" AND fr=0)+
. ("H0,AB,ED" AND fr=1):
. IF ATTR (y,12)<8
. AND ATTR (y-2,12)<8 THEN
. LET x=x-1:
. LET a$=("$1.." AND fr=1)+
. ("$2.." AND fr=0)
. ’ENDIF
.’ENDIF
350 IF IN 57342=254
. OR IN 57342=190 THEN
. LET g$=("1G,34,76" AND fr=0)+
. ("12,34,58" AND fr=1):
. IF ATTR (y,15)<8
. AND ATTR (y-2,15)<8 THEN
. LET x=1+x:
. LET a$=("$1.." AND fr=1)+
. ("$2.." AND fr=0)
. ’ENDIF
.’ENDIF
360 IF IN 32766=254
. OR IN 32766=190 THEN
. IF sal=0 THEN
. IF ATTR (y+1,13)>2
. OR ATTR (y+1,14)>2 THEN
. LET sal=1:
. LET nu=0
. ’ENDIF
. ’ENDIF
.’ENDIF
De la línea 300 a la 360 es de Nuevo la rutina del “Motor de plataformas en BASIC” de na-th-an, lo de abajo (línea 370)
crea la animación del fuego, (líneas 380 y 390) de las plataformas y (línea 400) del bicho.
370 LET b$=("$5..$5.." AND fr=1)+
. ("$4..$4.." AND fr=0)
380 LET e$=("N............NNN" AND gs=0)+
. ("NN............NN" AND gs=1)+
. ("NNN............N" AND gs=2)+
. ("NNNN............" AND gs=3)+
. (".NNNN..........." AND gs=4)+
. ("..NNNN.........." AND gs=5)+
. ("...NNNN........." AND gs=6)+
. ("....NNNN........" AND gs=7)+
. (".....NNNN......." AND gs=8)+
. ("......NNNN......" AND gs=9)+
. (".......NNNN....." AND gs=10)+
. ("........NNNN...." AND gs=11)+
. (".........NNNN..." AND gs=12)+
. ("..........NNNN.." AND gs=13)+
. ("...........NNNN." AND gs=14)+
. ("............NNNN" AND gs=15):
. LET gs=gs+1:
. IF gs=16 THEN
. LET gs=0
.’ENDIF
390 LET f$=("O.........OOO" AND gs=0)+
. ("OO.........OO" AND gs=1)+
. ("OOO.........O" AND gs=2)+
. ("OOOO........." AND gs=3)+
. (".OOOO........" AND gs=4)+
. ("..OOOO......." AND gs=5)+
. ("...OOOO......" AND gs=6)+
. ("....OOOO....." AND gs=7)+
. (".....OOOO...." AND gs=8)+
. ("......OOOO..." AND gs=9)+
. (".......OOOO.." AND gs=10)+
. ("........OOOO." AND gs=11)+
. (".........OOOO" AND (gs=12 OR gs=13 OR gs=14 OR gs=15))
400 LET i$=("$8..P.........." AND gs=0)+
. (".$9..P........." AND gs=1)+
. ("..$8..P........" AND gs=2)+
. ("...$9..P......." AND gs=3)+
. ("....$8..P......" AND gs=4)+
. (".....$9..P....." AND gs=5)+
. ("......$8..P...." AND gs=6)+
. (".......$9..P..." AND gs=7)+
. (".......P$7....." AND gs=8)+
. ("......P$6......" AND gs=9)+
. (".....P$7......." AND gs=10)+
. ("....P$6........" AND gs=11)+
. ("...P$7........." AND gs=12)+
. ("..P$6.........." AND gs=13)+
. (".P$7..........." AND gs=14)+
. ("P$6............" AND gs=15)
410 LET t=t-1:
. IF sal=0 THEN
. GO TO 90
.’ENDIF
420 IF ATTR (y-3,13)<8
. AND ATTR (y-3,14)<8 THEN
. LET y=y-1
.’ENDIF
430 LET nu=1+nu:
. IF nu=5 THEN
. LET sal=0
.’ENDIF
440 GO TO 90
Lo de abajo es la rutina que se ejecuta al pisar el fuego, viene aquí desde la línea 330.
450 FOR x=1 TO 7:
. PRINT PAPER 0; INK x;AT y-2,13;"**";
. AT y-1,13;"**";
. AT y,13;"**"; INK 2;
. AT y-2,13;"OO";
. AT y-1,13;"OO";
. AT y,13;"OO":
. NEXT x
460 FOR x=1 TO 7:
. PRINT PAPER 0; INK x;AT y-2,13;"**";
. AT y-1,13;"**";
. AT y,13;"**"; INK 2;
. AT y-2,13;"oo";
. AT y-1,13;"oo";
. AT y,13;"oo":
. NEXT x
470 FOR x=1 TO 7:
. PRINT PAPER 0; INK x;AT y-2,13;"**";
. AT y-1,13;"**";
. AT y,13;"**"; INK 2;
. AT y-2,13;"..";
. AT y-1,13;"..";
. AT y,13;"..":
. NEXT x
480 FOR x=4 TO 15:
. PRINT AT x,6;" ":
. NEXT x
Y lo de abajo crea el letrero de “GAME OVER”.
490 CIRCLE 70,120,20:
. PLOT 90,120: DRAW -20,0: DRAW 0,-10:
. PLOT 110,100: DRAW 20,0: DRAW -20,40: DRAW -20,-40: DRAW 20,0: DRAW 0,20:
. PLOT 135,100: DRAW 30,0: DRAW 0,40: DRAW -30,0: DRAW 0,-40:
. PLOT 145,100: DRAW 0,20:
. PLOT 155,100: DRAW 0,20:
. PLOT 170,100: DRAW 30,0: DRAW 0,40: DRAW -30,0: DRAW 0,-40:
. PLOT 200,125: DRAW -20,0:
. PLOT 200,115: DRAW -20,0
500 CIRCLE 70,70,20:
. PLOT 70,80: DRAW 0,-20:
. PLOT 110,90: DRAW -20,0: DRAW 20,-40: DRAW 20,40: DRAW -20,0: DRAW 0,-20:
. PLOT 135,50: DRAW 30,0: DRAW 0,40: DRAW -30,0: DRAW 0,-40:
. PLOT 165,65: DRAW -20,0:
. PLOT 165,75: DRAW -20,0:
. PLOT 170,50: DRAW 30,0: DRAW 0,40: DRAW -30,0: DRAW 0,-40:
. PLOT 200,75: DRAW -10,0:
. PLOT 185,50: DRAW 0,15:
. PAUSE 0:
. PAUSE 0:
. GO TO 60
510 PRINT FLASH 1;AT 4,11;"END OF LEVEL"; INVERSE 1;
. AT 6,10;"Press a key...":
. PAUSE 0:
. PAUSE 0:
. GO TO 60
Y ya está.
--------------------------------------------------------------
+3code 2019