Para hacer mis juegos me he autoimpuesto las siguientes restricciones:
- Voy a usar el ZX Spin para programarlos.
- Van a ser 100% BASIC, sin rutinas en c/m.
- Los juegos deben parecer "de aficionados", sin optimizaciones más allá de lo evidente.
- Mucha, mucha reutilización de código.
Así que una de las primeras rutinas a programar eran rótulos gigantes. Parte del "encanto" de los juegos es que sean lentos, pero me parece que esta rutina tiene mucho hueco para optimizarse.
El listado es el siguiente:
Código: Seleccionar todo
1 LET score=23: GO SUB 9998: GO SUB 9950
8999 GO TO 9999
9700 REM PLOT PRINT
9720 LET x1=x: FOR i=1 TO LEN s$: IF s$(i)=" " THEN GO TO 9840
9730 LET y1=192-17-y: LET dir=8*(CODE s$(i))+PEEK 23606+256*PEEK 23607
9740 FOR j=0 TO 7: LET byte=PEEK dir
9750 FOR k=7 TO 0 STEP -1: LET bit=2^k
9760 FOR l=1 TO ph: FOR m=1 TO pw
9780 IF byte>=bit THEN PLOT x1+8*pw-k*pw+m,y1-j*ph-l
9810 NEXT m: NEXT l: IF byte>=bit THEN LET byte=byte-bit
9820 NEXT k
9830 LET dir=dir+1: NEXT j
9840 LET x1=x1+8*pw: NEXT i
9850 RETURN
9950 REM GAME OVER
9951 BORDER 2: PAPER 2: INK 7: CLS
9952 LET s$="GAME OVER": LET pw=2: LET ph=3: LET y=50: LET x=(256-LEN s$*8*pw)/2: GO SUB 9970
9953 LET s$="Score: ": FOR i=1 TO 5-LEN STR$ score: LET s$=s$+" ": NEXT i
9954 LET s$=s$+STR$ score
9955 LET pw=2: LET ph=2: LET y=100: LET x=(256-LEN s$*8*pw)/2: GO SUB 9970
9956 RETURN
9970 GO TO 9700
9998 POKE 23672,0: POKE 23673,0: POKE 23674,0: RETURN
9999 LET time=PEEK 23672+256*PEEK 23673+65536*PEEK 23674: LET horas=INT (time/180000): LET time=time-horas*180000: LET minutos=INT (time/3000): LET time=time-minutos*3000: LET segundos=INT (time/50): LET time=time-segundos*50: PRINT AT 10,0;horas;"h:";minutos;"m:";segundos;"s.";time
- x,y: coordenadas del texto, donde y es la parte superior de la pantalla
- ph,pw: altura y anchura de cada pixel de los caracteres, ph=2 y pw=3 significarían caracteres el doble de alto y el triple de ancho
- s$: cadena a imprimir
¿Es realmente TAN lento PLOT o la parte lenta son las matemáticas? El programa está subido en mediafire