|
1 | | -1 REM Compilar con --sinclair |
2 | | -10 REM COMECOQUITOS Luis Amado y MICROHOBBY SEMANAL |
3 | | -11 DIM max, punt as UINTEGER: REM Needed to avoid overflow, since ZX BASIC will try byte |
4 | | -15 BORDER 1: PAPER 1: INK 7: CLS : PRINT AT 10,10; FLASH 1;"PARE LA CINTA": PAUSE 200 |
5 | | -20 GO SUB 680 |
| 1 | +10 REM COMECOQUITOS Luis Amado y MICROHOBBY SEMANAL (NRO. 18) |
| 2 | +11 REM --------------------------------------------------------------------------------------------------------------------------- |
| 3 | +12 REM Modificado por Pedro Güida en el año 2020 para mejorar fluidez de movimiento del Comecoquitos al compilar a código nativo. |
| 4 | +13 REM Comecoquitos fue el primer programa que transcribí a mediados de los 80 de la revista Microhobby en mi ZX Spectrum Plus |
| 5 | +14 REM así que estas "mojoras" son mi homenaje a ese gran momento. ¡Gracias Luis, pues este programa fue el puntapié inicial a |
| 6 | +15 REM mi vida como desarrollador de videojuegos! ¡Y gracias también José por adaptarlo para que compile con Boriel ZX Basic! |
| 7 | +16 REM --------------------------------------------------------------------------------------------------------------------------- |
| 8 | +17 DIM max, punt as UINTEGER: REM Needed to avoid overflow, since ZX BASIC will try byte |
| 9 | +18 BORDER 1: PAPER 1: INK 7: CLS : PRINT AT 10,10; FLASH 1;"PARE LA CINTA": PAUSE 200 |
| 10 | +20 GO SUB 810 |
6 | 11 | 30 LET max=0 |
7 | | -40 LET x2=18: LET x3=4: LET y3=18: LET y2=15: LET px=10: LET py=15: LET v$="\G": LET j$="\B" |
| 12 | +40 LET x2=18: LET x3=4: LET y3=18: LET y2=15: LET px=10: LET py=15: LET v$="\G": LET j$="\B": LET j2$=j$ : LET r = 0 |
8 | 13 | 50 FUNCTION p$(a): RETURN ("000"+ STR$ a)( LEN STR$ a TO ): END FUNCTION : REM Needed because DEF FN is not allowed |
9 | 14 | 60 BORDER 4: PAPER 6: INK 2: CLS |
10 | 15 | 70 LET punt=0 |
11 | 16 | 80 DIM l$(19) |
12 | 17 | 90 LET l$(1)="\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H" |
13 | 18 | 100 LET l$(2)="\H\F\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\F\H" |
14 | | -110 LET l$(3)="\H\I\H\H\H\I\H\I\I\H\H\H\I\H\H\H\I\H\H\H\I\I\H\I\H\H\H\I\I\H" |
| 19 | +110 LET l$(3)="\H\I\H\H\H\I\H\I\I\H\H\H\I\H\H\H\I\H\H\H\I\I\H\I\H\H\H\I\H\H" |
15 | 20 | 120 LET l$(4)="\H\I\I\H\I\I\H\H\H\F\H\I\I\F\I\F\I\I\H\F\H\H\H\I\I\H\I\I\H\H" |
16 | 21 | 130 LET l$(5)="\H\I\H\H\I\H\H\F\H\I\H\H\H\H\H\H\H\H\H\I\H\F\H\H\I\H\H\I\H\H" |
17 | 22 | 140 LET l$(6)="\H\I\I\H\I\I\I\I\H\I\I\I\I\I\I\I\I\I\I\I\H\I\I\I\I\H\I\I\H\H" |
18 | | -150 LET l$(7)="\H\I\H\H\H\H\I\H\H\I\H\I\H\H\H\H\H\I\H\I\H\H\I\H\H\H\H\I\I\H" |
| 23 | +150 LET l$(7)="\H\I\H\H\H\H\I\H\H\I\H\I\H\H\H\H\H\I\H\I\H\H\I\H\H\H\H\I\H\H" |
19 | 24 | 160 LET l$(8)="\H\I\I\I\I\I\I\I\I\I\H\I\H\I\I\I\H\I\H\I\I\I\I\I\I\I\I\I\I\H" |
20 | 25 | 170 LET l$(9)="\H\I\H\H\H\H\H\H\H\H\H\I\H\H\I\H\H\I\H\H\H\H\H\H\H\H\H\H\I\H" |
21 | 26 | 180 LET l$(10)="\H\I\I\I\I\I\I\I\I\I\I\I\H\I\I\I\H\I\I\I\I\I\I\I\I\I\I\I\I\H" |
22 | 27 | 190 LET l$(11)="\H\I\H\H\H\H\H\H\H\H\H\I\H\I\H\I\H\I\H\H\H\H\H\H\H\H\H\H\I\H" |
23 | 28 | 200 LET l$(12)="\H\I\H\I\I\I\I\I\I\I\H\I\I\I\H\I\I\I\H\I\I\I\I\I\I\I\F\H\I\H" |
24 | 29 | 210 LET l$(13)="\H\I\H\H\I\H\I\H\F\H\I\H\H\H\H\H\H\H\I\I\H\I\H\I\H\I\H\H\I\H" |
25 | | -220 LET l$(14)="\H\I\H\I\I\I\I\H\H\I\I\I\I\I\I\I\I\I\I\H\I\I\I\I\I\I\I\H\I\H" |
| 30 | +220 LET l$(14)="\H\I\H\I\I\I\I\H\H\I\I\I\I\I\I\I\I\I\I\H\H\I\I\I\I\I\I\H\I\H" |
26 | 31 | 230 LET l$(15)="\H\I\I\I\H\H\H\I\I\I\H\H\H\H\H\H\H\H\H\I\I\I\H\H\H\H\I\I\I\H" |
27 | 32 | 240 LET l$(16)="\H\I\H\I\I\I\I\I\H\H\I\I\H\F\I\F\H\I\I\I\H\I\I\I\I\I\I\H\I\H" |
28 | 33 | 250 LET l$(17)="\H\I\H\H\H\H\H\H\H\H\I\H\H\H\I\H\H\H\I\H\H\H\H\H\H\H\H\H\I\H" |
|
34 | 39 | 310 PRINT AT 21,0; INK 2; PAPER 6;"PUNTOS:0000 RECORD:0000" |
35 | 40 | 320 PRINT AT 0,0; INK 5; PAPER 0;" LAR SOFTWARE LALIN-PONTEVEDRA " |
36 | 41 | 330 LET l$(px)(py)=" " |
37 | | -340 IF punt<1745 THEN GO TO 400 |
38 | | -350 IF punt=1745 THEN PRINT AT 2,13; INK 4; PAPER 1; FLASH 1; BRIGHT 1;"BRAVO"; AT 8,14;"HAS"; AT 10,6;"LOGRADO"; AT 10,14;"UNA"; AT 10,18;"VICTORIA" |
| 42 | +340 IF punt<1730 THEN GO TO 400 |
| 43 | +350 IF punt=1730 THEN PRINT AT 2,13; INK 4; PAPER 1; FLASH 1; BRIGHT 1;"BRAVO"; AT 8,14;"HAS"; AT 10,6;"LOGRADO"; AT 10,14;"UNA"; AT 10,18;"VICTORIA" |
39 | 44 | 360 PRINT AT 18,4; INK 7; PAPER 0; FLASH 1;"QUIERES CONTINUAR? (s/n)" |
40 | 45 | 370 IF INKEY$="s" THEN GO TO 60 |
41 | 46 | 380 IF INKEY$="n" THEN GO TO 9999 |
42 | 47 | 390 IF INKEY$<>"s" OR INKEY$<>"n" THEN GO TO 370 |
43 | | -400 IF INKEY$="" THEN GO TO 450 |
44 | | -410 IF INKEY$="5" THEN LET j$="\C" |
45 | | -420 IF INKEY$="6" THEN LET j$="\D" |
46 | | -430 IF INKEY$="7" THEN LET j$="\A" |
47 | | -440 IF INKEY$="8" THEN LET j$="\B" |
48 | | -450 PRINT AT px,py;" " |
49 | | -460 IF j$="\A" AND l$(px-1)(py) <>"\H" THEN LET px=px-1 |
50 | | -470 IF j$="\B" AND l$(px)(py+1) <>"\H" THEN LET py=py+1 |
51 | | -480 IF j$="\D" AND l$(px+1)(py) <>"\H" THEN LET px=px+1 |
52 | | -490 IF j$="\C" AND l$(px)(py-1) <>"\H" THEN LET py=py-1 |
53 | | -500 PRINT AT px,py; INK 3;v$ |
54 | | -510 IF l$(px)(py)="\I" THEN LET punt=punt+5: BEEP .01,12 |
55 | | -520 IF l$(px)(py)="\F" THEN LET punt=punt+30: BEEP .02,16 |
56 | | -530 IF max<punt THEN LET max=punt |
57 | | -540 PRINT AT 21,7; p$(punt); AT 21,28; p$(max): BEEP .001,50 |
58 | | -550 PRINT AT x2,y2;l$(x2)(y2): IF INT ( RND*2)+(x2>px) AND l$(x2-1)(y2) <>"\H" THEN LET x2=x2-1 |
59 | | -560 IF INT ( RND*2)+(x2<px) AND l$(x2+1)(y2) <>"\H" THEN LET x2=x2+1 |
60 | | -570 IF INT ( RND*2)+(y2>py) AND l$(x2)(y2-1) <>"\H" THEN LET y2=y2-1 |
61 | | -580 IF INT ( RND*2)+(y2<py) AND l$(x2)(y2+1) <>"\H" THEN LET y2=y2+1 |
62 | | -590 PRINT AT x2,y2; INK 2;"\E" |
63 | | -600 PRINT AT px,py; INK 3;j$ |
64 | | -610 IF (x2=px AND y2=py) OR (x3=px AND y3=py) THEN FOR g=1 TO 10: FOR f=0 TO 7: PRINT INK f; AT px,py;j$: NEXT f: NEXT g: PRINT AT px,py; INK 6;j$: GO TO 830 |
65 | | -620 PRINT AT x3,y3;l$(x3)(y3): IF INT ( RND*2)+(x3>px) AND l$(x3-1)(y3) <>"\H" THEN LET x3=x3-1 |
66 | | -630 IF INT ( RND*2)+(x3<px) AND l$(x3+1)(y3) <>"\H" THEN LET x3=x3+1 |
67 | | -640 IF INT ( RND*2)+(y3>py) AND l$(x3)(y3-1) <>"\H" THEN LET y3=y3-1 |
68 | | -650 IF INT ( RND*2)+(y3<py) AND l$(x3)(y3+1) <>"\H" THEN LET y3=y3+1 |
69 | | -660 PRINT AT x3,y3; INK 2;"\E" |
70 | | -670 GO TO 330 |
71 | | -680 DATA 66,129,129,195,231,255,126,60 |
72 | | -690 DATA 62,121,240,224,224,240,121,62 |
73 | | -700 DATA 124,158,15,7,7,15,158,124 |
74 | | -710 DATA 60,126,255,231,195,129,129,66 |
75 | | -720 DATA 56,124,214,214,254,254,170,170 |
76 | | -730 DATA 24,82,255,255,255,255,126,36 |
77 | | -740 DATA 0,60,126,126,126,126,60,0 |
78 | | -750 DATA 170,85,170,85,170,85,170,85 |
79 | | -760 DATA 0,0,0,24,24,0,0,0 |
80 | | -770 RESTORE 680 |
81 | | -780 FOR i=1 TO 9: FOR n=0 TO 7 |
82 | | -790 READ a |
83 | | -800 POKE USR CHR$(i+143)+n,a |
84 | | -810 NEXT n: NEXT i |
85 | | -820 RETURN |
86 | | -830 PRINT AT 2,11; INK 7; PAPER 1; FLASH 1;"SE ACABO" |
87 | | -840 PRINT AT 18,4; INK 7; PAPER 0; FLASH 1;"QUIERES CONTINUAR? (S/N)" |
88 | | -850 IF INKEY$="s" THEN GO TO 40 |
89 | | -860 IF INKEY$="n" THEN GO TO 9999 |
90 | | -870 IF INKEY$<>"n" OR INKEY$<>"s" THEN GO TO 850 |
| 48 | +400 LET j2$ = j$ |
| 49 | +410 IF INKEY$="" THEN GO TO 460 |
| 50 | +420 IF INKEY$="o" THEN LET j$="\C" |
| 51 | +430 IF INKEY$="a" THEN LET j$="\D" |
| 52 | +440 IF INKEY$="q" THEN LET j$="\A" |
| 53 | +450 IF INKEY$="p" THEN LET j$="\B" |
| 54 | +460 FOR t=0 TO 1750: NEXT t: PRINT AT px,py;" " |
| 55 | +470 LET r = 0 |
| 56 | +480 IF j$="\A" AND l$(px-1)(py) <>"\H" THEN LET px=px-1 : GOTO 630 |
| 57 | +490 IF j$<>"\A" THEN GOTO 510 |
| 58 | +500 GOTO 590 |
| 59 | +510 IF j$="\B" AND l$(px)(py+1) <>"\H" THEN LET py=py+1 : GOTO 630 |
| 60 | +520 IF j$<>"\B" THEN GOTO 540 |
| 61 | +530 GOTO 590 |
| 62 | +540 IF j$="\D" AND l$(px+1)(py) <>"\H" THEN LET px=px+1 : GOTO 630 |
| 63 | +550 IF j$<>"\D" THEN GOTO 570 |
| 64 | +560 GOTO 590 |
| 65 | +570 IF j$="\C" AND l$(px)(py-1) <>"\H" THEN LET py=py-1 : GOTO 630 |
| 66 | +580 IF j$<>"\C" THEN GOTO 610 |
| 67 | +590 LET r = 1 |
| 68 | +600 IF J$=J2$ THEN GOTO 630 |
| 69 | +610 LET j$ = j2$ |
| 70 | +620 IF r = 1 THEN GOTO 470 |
| 71 | +630 PRINT AT px,py; INK 3;v$ |
| 72 | +640 IF l$(px)(py)="\I" THEN LET punt=punt+5: BEEP .01,12 |
| 73 | +650 IF l$(px)(py)="\F" THEN LET punt=punt+30: BEEP .02,16 |
| 74 | +660 IF max<punt THEN LET max=punt |
| 75 | +670 PRINT AT 21,7; p$(punt); AT 21,28; p$(max): BEEP .001,50 |
| 76 | +680 PRINT AT x2,y2;l$(x2)(y2): IF INT ( RND*2)+(x2>px) AND l$(x2-1)(y2) <>"\H" THEN LET x2=x2-1 |
| 77 | +690 IF INT ( RND*2)+(x2<px) AND l$(x2+1)(y2) <>"\H" THEN LET x2=x2+1 |
| 78 | +700 IF INT ( RND*2)+(y2>py) AND l$(x2)(y2-1) <>"\H" THEN LET y2=y2-1 |
| 79 | +710 IF INT ( RND*2)+(y2<py) AND l$(x2)(y2+1) <>"\H" THEN LET y2=y2+1 |
| 80 | +720 PRINT AT x2,y2; INK 2;"\E" |
| 81 | +730 PRINT AT px,py; INK 3;j$ |
| 82 | +740 IF (x2=px AND y2=py) OR (x3=px AND y3=py) THEN FOR g=1 TO 10: FOR f=0 TO 7: PRINT INK f; AT px,py;j$: NEXT f: NEXT g: PRINT AT px,py; INK 6;j$: GO TO 960 |
| 83 | +750 PRINT AT x3,y3;l$(x3)(y3): IF INT ( RND*2)+(x3>px) AND l$(x3-1)(y3) <>"\H" THEN LET x3=x3-1 |
| 84 | +760 IF INT ( RND*2)+(x3<px) AND l$(x3+1)(y3) <>"\H" THEN LET x3=x3+1 |
| 85 | +770 IF INT ( RND*2)+(y3>py) AND l$(x3)(y3-1) <>"\H" THEN LET y3=y3-1 |
| 86 | +780 IF INT ( RND*2)+(y3<py) AND l$(x3)(y3+1) <>"\H" THEN LET y3=y3+1 |
| 87 | +790 PRINT AT x3,y3; INK 2;"\E" |
| 88 | +800 GO TO 330 |
| 89 | +810 DATA 66,129,129,195,231,255,126,60 |
| 90 | +820 DATA 62,121,240,224,224,240,121,62 |
| 91 | +830 DATA 124,158,15,7,7,15,158,124 |
| 92 | +840 DATA 60,126,255,231,195,129,129,66 |
| 93 | +850 DATA 56,124,214,214,254,254,170,170 |
| 94 | +860 DATA 24,82,255,255,255,255,126,36 |
| 95 | +870 DATA 0,60,126,126,126,126,60,0 |
| 96 | +880 DATA 170,85,170,85,170,85,170,85 |
| 97 | +890 DATA 0,0,0,24,24,0,0,0 |
| 98 | +900 RESTORE 810 |
| 99 | +910 FOR i=1 TO 9: FOR n=0 TO 7 |
| 100 | +920 READ a |
| 101 | +930 POKE USR CHR$(i+143)+n,a |
| 102 | +940 NEXT n: NEXT i |
| 103 | +950 RETURN |
| 104 | +960 PRINT AT 2,11; INK 7; PAPER 1; FLASH 1;"SE ACABO" |
| 105 | +970 PRINT AT 18,4; INK 7; PAPER 0; FLASH 1;"QUIERES CONTINUAR? (S/N)" |
| 106 | +980 IF INKEY$="s" THEN GO TO 40 |
| 107 | +990 IF INKEY$="n" THEN GO TO 9999 |
| 108 | +1000 IF INKEY$<>"n" OR INKEY$<>"s" THEN GO TO 980 |
91 | 109 | 9999 REM |
0 commit comments