Pequeña prueba en basic.

By assembler

Champion (312)

assembler's picture

19-02-2011, 10:30

Ayer recuperé una prueba que haría con unos 10 añitos.

El brujo lo copié del castle excelent, creo.

10 SCREEN 1,2,0
20 KEY OFF
30 DATA 0000000101111111
40 DATA 0000001111111111
50 DATA 0011111111111110
60 DATA 1111111111111100
70 DATA 0000111111100000
80 DATA 0000022211111000
90 DATA 0000202200111100
100 DATA 0000222211001111
110 DATA 2200222211110011
120 DATA 2200222211110000
130 DATA 1111021111100000
140 DATA 3311111111110000
150 DATA 3311111111111000
160 DATA 1311111111111100
170 DATA 1311111111111110
180 DATA 1311111111111111
190 DATA 0000000101111111
200 DATA 0000001111111111
210 DATA 0011111111111110
220 DATA 1111111111111100
230 DATA 0000111111100000
240 DATA 0000222211111000
250 DATA 0002022200111100
260 DATA 0002222211001111
270 DATA 0002222211110011
280 DATA 0000222211110000
290 DATA 0001111111111000
300 DATA 0111011111111100
310 DATA 1221111111111100
320 DATA 1221111111111110
330 DATA 1113311111111111
340 DATA 1111331111111111
350 FOR C=0 TO 1:RESTORE
360 FOR Z=0 TO 1:A1$="":A2$="":A3$="":B1$="":B2$="":B3$=""
370 FOR A=1 TO 16:Q1$="":Q2$="":Q3$=""
380 READ A$
390 IF C=0 THEN FOR B=1 TO 16 ELSE FOR B=16 TO 1 STEP-1
400 B$=MID$(A$,B,1)
410 IF B$="1" THEN Q1$=Q1$+"1":Q2$=Q2$+"0":Q3$=Q3$+"0"
420 IF B$="2" THEN Q1$=Q1$+"0":Q2$=Q2$+"1":Q3$=Q3$+"0"
430 IF B$="3" THEN Q1$=Q1$+"0":Q2$=Q2$+"0":Q3$=Q3$+"1"
440 IF B$="0" THEN Q1$=Q1$+"0":Q2$=Q2$+"0":Q3$=Q3$+"0"
450 NEXT
460 A1$=A1$+CHR$(VAL("&B"+LEFT$(Q1$,8)))
470 B1$=B1$+CHR$(VAL("&B"+RIGHT$(Q1$,8)))
480 A2$=A2$+CHR$(VAL("&B"+LEFT$(Q2$,8)))
490 B2$=B2$+CHR$(VAL("&B"+RIGHT$(Q2$,8)))
500 A3$=A3$+CHR$(VAL("&B"+LEFT$(Q3$,8)))
510 B3$=B3$+CHR$(VAL("&B"+RIGHT$(Q3$,8)))
520 NEXT
530 SPRITE$(0+Z*3+C*6)=A1$+B1$
540 SPRITE$(1+Z*3+C*6)=A2$+B2$
550 SPRITE$(2+Z*3+C*6)=A3$+B3$
560 NEXT
570 NEXT
580 PUT SPRITE 0,(80+X,Y+79),4,Z+C
590 PUT SPRITE 1,(80+X,Y+79),9,Z+1+C
600 PUT SPRITE 2,(80+X,Y+79),7,Z+2+C
610 IF F=0 AND D=3 OR F=0 AND D=7 THEN FOR A=0 TO 30:NEXT
620 IF F<>0 THEN AV=5 ELSE AV=2
630 D=STICK(0)
640 IF D=7 OR D=8 THEN X=X-AV:C=0:IF Z=0 THEN Z=3 ELSE Z=0
650 IF D=3 OR D=2 THEN X=X+AV:C=6:IF Z=0 THEN Z=3 ELSE Z=0
660 IF D=1 AND F=0 THEN F=1:J=7:J1=J
670 IF D=2 AND F=0 THEN F=1:J=7:J1=J:C=6
680 IF D=8 AND F=0 THEN F=1:J=7:J1=J:C=0
690 VP=6538+INT(X/8)+32*INT(Y/8)
700 IF F=0 AND VPEEK(VP)=32 THEN F=2:J1=7
710 IF F=1 THEN J=J-1:IF J>0 THEN Y=Y-INT(1.6^J) ELSE F=2
720 IF F=2 AND VPEEK(VP)=32 THEN J=J+1:IF J
730 GOTO 580

Me he quedado flipado al ver como hice para definir los sprites con un solo DATA para cada paso.

Login or register to post comments

By mohai

Champion (418)

mohai's picture

25-02-2011, 11:33

Muy bien resuelto.
Al principio me constó entender lo que hace el código. Luego entnedí que te limitaste a dibujar al personaje con valores de 4 colores a modo de bitmap, en vez de definir cada sprite por separado. Así, mientras el código de lectura/decodificación se complica, te ahorras un montón de DATAs.

By assembler

Champion (312)

assembler's picture

03-03-2011, 20:51

Fíjate, lo que hacía en mi tiempo libre... Tongue

Y lo complicado que es entenderlo, después de tanto tiempo, POR NO HABER PUESTO COMENTARIOS ni usar nombres de variables más claros (dentro de lo limitado que es el basic para eso)

My MSX profile