319 lines
9.1 KiB
QBasic
319 lines
9.1 KiB
QBasic
10 'GUANTE BLANCO, por David Radisic
|
|
20 'copyright (c) AMSOFT 1985
|
|
30 '
|
|
40 MODE 0:INK 0,0:BORDER 0:INK 1,26:INK 2,15:INK 3,25
|
|
50 INK 4,14:INK 5,24,12:INK 6,0:INK 7,0:INK 8,0:PAPER #1, 7
|
|
60 retardo=200
|
|
70 DIM objx(5,20),objy(5,20),joyax(5,20),joyay(5,20)
|
|
80 GOSUB 380
|
|
90 GOSUB 720
|
|
100 pausa=200:GOSUB 340
|
|
110 IF joyas=0 THEN GOSUB 980
|
|
120 PEN 4
|
|
130 FOR i=10 TO 12
|
|
140 LOCATE 15,i:PRINT"BOTIN";
|
|
150 NEXT
|
|
160 PAPER 0:CLS#2:PAPER 8
|
|
170 GOSUB 1180
|
|
180 GOSUB 1240
|
|
190 GOSUB 1380
|
|
200 GOSUB 1520
|
|
210 IF rm=0 THEN GOSUB 1910
|
|
220 IF muerto=0 THEN 160
|
|
230 pausa=100:GOSUB 340
|
|
240 PAPER 0:CLS:PEN 1
|
|
250 LOCATE 4,3:PRINT"Quiere jugar";
|
|
260 LOCATE 5,5:PRINT"otra vez?";
|
|
270 PEN 5:LOCATE 7,7:PRINT"S/N";
|
|
280 i$=UPPER$(INKEY$):IF i$<>"S" AND i$<>"N" THEN 280
|
|
290 IF i$="N" THEN MODE 2:PEN 1:STOP
|
|
300 RUN
|
|
310 IF perro=1 THEN RETURN
|
|
320 perro=1:perrox=minx(rm):perroy=miny(rm)
|
|
330 RETURN
|
|
340 FOR bucle=1 TO pausa
|
|
350 FRAME
|
|
360 NEXT
|
|
370 RETURN
|
|
380 rm=1:xp=6:yp=4:hombre$=CHR$(224):perro=0:robado=0
|
|
390 SYMBOL 240,8,8,8,8,8,8,8,8
|
|
400 SYMBOL 241,0,0,0,0,255,0,1,0
|
|
410 SYMBOL 242,0,0,0,0,15,8,8,8
|
|
420 SYMBOL 243,0,0,0,0,248,8,8,8
|
|
430 SYMBOL 244,8,8,8,8,248,0,0,0
|
|
440 SYMBOL 245,8,8,8,8,15,0,0,0
|
|
450 SYMBOL 246,8,12,13,14,12,12,8,8
|
|
460 SYMBOL 247,8,12,12,14,13,12,9,8
|
|
470 SYMBOL 248,8,24,88,56,24,24,8,8
|
|
480 SYMBOL 249,8,24,24,56,88,24,8,8
|
|
490 SYMBOL 250,0,0,255,129,129,129,255,0
|
|
500 SYMBOL 251,28,20,20,20,20,20,20,28
|
|
510 SYMBOL 252,0,0,255,255,255,255,255,0
|
|
520 SYMBOL 253,28,28,28,28,28,28,28,28
|
|
530 SYMBOL 255,195,165,60,126,90,60,36,24
|
|
540 ENT 1,12,-4,1
|
|
550 ENT -2,=1000,60,=3000,40
|
|
560 ENV 1,10,1,5,2,-4,1,2,-1,20
|
|
570 vent$(1)=STRING$(2,250):vent$(2)=CHR$(251)+CHR$(8)+CHR$(10)+CHR$(251)+CHR$(8)+CHR$(10)+CHR$(251)
|
|
580 puerta$(1)=STRING$(2,252): puerta$(2)=CHR$(253)+CHR$(8)+CHR$(10)+CHR$(253)+CHR$(8)+CHR$(10)+CHR$(253)
|
|
590 conm$(1,0)=CHR$(246):conm$(1,1)=CHR$(247)
|
|
600 conm$(2,0)=CHR$(248):conm$(2,1)=CHR$(249)
|
|
610 joya$=CHR$(144):obj$=CHR$(233):perro$=CHR$(255)
|
|
620 gol$=CHR$(246)+CHR$(248)+CHR$(247)+CHR$(249)+CHR$(252)+CHR$(253)+CHR$(250)+CHR$(251)+joya$+obj$+perro$
|
|
630 RESTORE 3020
|
|
640 FOR i=1 TO 5
|
|
650 READ minx(i),miny(i),maxx(i),maxy(i)
|
|
660 READ dir(i,1),dir(i,2),dir(i,3),dir(i,4)
|
|
670 NEXT
|
|
680 WINDOW #1,minx(rm)-1,maxx(rm)+1,miny(rm)-1,maxy(rm)+1
|
|
690 WINDOW #2,1,14,1,25
|
|
700 CLS#1:PAPER #0,8
|
|
710 RETURN
|
|
720 ORIGIN 50,50
|
|
730 INK 6,24,12
|
|
740 RESTORE 3070
|
|
750 GOSUB 1290
|
|
760 LOCATE 1,20
|
|
770 PEN 5:PRINT">";
|
|
780 PEN 1:PRINT"Puertas y ventanas";
|
|
790 PEN 5:PRINT"<";:PEN 1
|
|
800 LOCATE 5,21:PRINT"para escapar";
|
|
810 LOCATE 9,1:PRINT"PASE":LOCATE 10,2:PRINT CHR$(213)CHR$(212);
|
|
820 pausa=300:GOSUB 340
|
|
830 CLS:LOCATE 1,3:INK 6,0
|
|
840 PEN 1:PRINT hombre$;" Usted, el ladron":PRINT
|
|
850 PEN 2:PRINT LEFT$(puerta$(1),1);LEFT$(puerta$(2),1);"Puertas":PRINT
|
|
860 PEN 3:PRINT conm$(1,0);conm$(2,0);" Luces apagadas":PRINT
|
|
870 PEN 3:PRINT conm$(1,1);conm$(2,1);" Luces encendidas" :PRINT
|
|
880 PEN 4:PRINT LEFT$(vent$(1),1);LEFT$(vent$(2),1);" Ventanas":PRINT
|
|
890 PEN 5:PRINT joya$;" Piedras preciosas":PRINT
|
|
900 PAPER 1:PEN 0:PRINT obj$;" Obstaculos":PEN 1:PAPER 0:PRINT
|
|
910 PEN 1:PRINT perro$;" El perro"
|
|
920 PEN 5:PRINT:PRINT:PRINT
|
|
930 PRINT"Utilice joystick":PRINT"o teclas de cursor"
|
|
940 aux=REMAIN(1)
|
|
950 AFTER retardo*4,1 GOSUB 340
|
|
960 RETURN
|
|
970 '
|
|
980 'Generar joyas y obstaculos
|
|
990 '
|
|
1000 FOR hab=1 TO 5
|
|
1010 joyar=INT(RND*8)+2:objr=INT(RND*10)+5
|
|
1020 minx=minx(hab):miny=miny(hab):maxx=maxx(hab):maxy=maxy(hab)
|
|
1030 FOR i=1 TO joyar
|
|
1040 x=INT(RND*(maxx-minx+1))+minx
|
|
1050 y=INT(RND*(maxy-miny+1))+miny
|
|
1060 joyax(hab,i)=x:joyay(hab,i)=y
|
|
1070 joyas=joyas+1
|
|
1080 NEXT i
|
|
1090 FOR i=1 TO objr
|
|
1100 x=INT(RND*(maxx-minx+1))+minx
|
|
1110 y=INT(RND*(maxy-miny+1))+miny
|
|
1120 objx(hab,i)=x:objy(hab,i)=y
|
|
1130 NEXT i
|
|
1140 joyas(hab)=joyar:obj(hab)=objr
|
|
1150 NEXT hab
|
|
1160 CLS
|
|
1170 RETURN
|
|
1180 ON rm GOTO 1190,1200,1210,1220,1230
|
|
1190 RESTORE 2680:RETURN
|
|
1200 RESTORE 2750:RETURN
|
|
1210 RESTORE 2820:RETURN
|
|
1220 RESTORE 2890:RETURN
|
|
1230 RESTORE 2970:RETURN
|
|
1240 PAPER 0:READ rm$:PAPER 8
|
|
1250 WINDOW #1,minx(rm)-1,maxx(rm)+1,miny(rm)-1,maxy(rm)+1:CLS#1
|
|
1260 PEN 1:LOCATE 1,1:PRINT SPACE$(19);
|
|
1270 LOCATE 1,1:PRINT"Habitacion: ";rm$;
|
|
1280 IF luces(rm) THEN INK 7,10:INK 8,10 ELSE INK 7,0:INK 8,0
|
|
1290 READ a$:IF a$="FIN" THEN RETURN
|
|
1300 IF a$="D" THEN 2190
|
|
1310 IF a$="W" THEN 2270
|
|
1320 IF a$="L" THEN GRAPHICS PEN 1:GOTO 2350
|
|
1330 IF a$="S" THEN 2430
|
|
1340 IF a$="F" THEN GRAPHICS PEN 6:GOTO 2350
|
|
1350 PRINT"***ERROR ***";
|
|
1360 STOP
|
|
1370 '
|
|
1380 'Dibujar joyas/objetos
|
|
1390 '
|
|
1400 PEN 6
|
|
1410 FOR i=1 TO obj(rm)
|
|
1420 LOCATE objx(rm,i),objy(rm,i)
|
|
1430 PRINT obj$;
|
|
1440 NEXT
|
|
1450 PEN 5
|
|
1460 FOR i=1 TO joyas(rm)
|
|
1470 LOCATE joyax(rm,i),joyay(rm,i)
|
|
1480 PRINT joya$;
|
|
1490 NEXT
|
|
1500 PEN 1:LOCATE xp,yp:PRINT hombre$;
|
|
1510 RETURN
|
|
1520 xf=0:yf=0:PEN 1
|
|
1530 IF INKEY(0)<>-1 OR INKEY(72)<>-1 THEN yf=-1
|
|
1540 IF INKEY(2)<>-1 OR INKEY(73)<>-1 THEN yf=1
|
|
1550 IF INKEY(8)<>-1 OR INKEY(74)<>-1 THEN xf=-1
|
|
1560 IF INKEY(1)<>-1 OR INKEY(75)<>-1 THEN xf=1
|
|
1570 IF xf=0 AND yf=0 THEN 1640
|
|
1580 LOCATE xp+xf,yp+yf:ht$=COPYCHR$(#0)
|
|
1590 IF ASC(ht$)>239 AND ASC(ht$)<246 THEN 1520
|
|
1600 IF ht$<>" " THEN 1670
|
|
1610 LOCATE xp,yp:PRINT" ";
|
|
1620 PAPER 0:LOCATE 4,24:PRINT" ";:PAPER 8
|
|
1630 xp=xp+xf:yp=yp+yf
|
|
1640 LOCATE xp,yp:PRINT hombre$;
|
|
1650 IF perro>0 THEN perro=perro MOD 2+1:IF perro=2 THEN 2560
|
|
1660 GOTO 1520
|
|
1670 gol=INSTR(gol$,ht$):car=ASC(MID$(gol$,gol,1))
|
|
1680 ON gol GOTO 1700,1700,1700,1700,1760,1760,1860,1910,1980,2100,2660
|
|
1690 GOTO 1610
|
|
1700 IF gol>2 AND gol<5 THEN car=car-1
|
|
1710 IF gol<3 THEN car=car+1
|
|
1720 PEN 3:LOCATE xp+xf,yp+yf:PRINT CHR$(car);
|
|
1730 luces(rm)=luces(rm) XOR 1
|
|
1740 IF luces(rm) THEN INK 7,10:INK 8,10 ELSE INK 7,0:INK 8,0
|
|
1750 GOTO 1520
|
|
1760 IF xf<>0 AND yf<>0 THEN 1640
|
|
1770 IF xf<0 THEN dir=4 ELSE IF xf>0 THEN dir=3
|
|
1780 IF yf<0 THEN dir=1 ELSE IF yf>0 THEN dir=2
|
|
1790 IF dir(rm,dir)=-1 THEN 1640 ELSE rm=dir(rm,dir)
|
|
1800 IF perro>0 THEN GOSUB 310
|
|
1810 IF dir=1 THEN xp=6:yp=maxy(rm)
|
|
1820 IF dir=2 THEN xp=6:yp=miny(rm)
|
|
1830 IF dir=3 THEN xp=minx(rm):yp=13
|
|
1840 IF dir=4 THEN xp=maxx(rm):yp=13
|
|
1850 RETURN
|
|
1860 IF xp>5 AND xp<8 THEN 1890
|
|
1870 IF xp<6 THEN dir=4 ELSE dir=3
|
|
1880 GOTO 1790
|
|
1890 IF yp>13 THEN dir=2 ELSE dir=1
|
|
1900 GOTO 1790
|
|
1910 PAPER 0:CLS:PEN 1
|
|
1920 LOCATE 3,3:PRINT"Usted ha escapado";
|
|
1930 LOCATE 8,5:PRINT"con";
|
|
1940 IF joyas=robado THEN LOCATE 8,7:PRINT"todas las";ELSE LOCATE 8,7
|
|
1950 PRINT USING" ##";robado;
|
|
1960 PEN 5:LOCATE 8,9:PRINT"joyas";
|
|
1970 muerto=1:RETURN
|
|
1980 LOCATE xp,yp:PRINT" ";:xp=xp+xf:yp=yp+yf
|
|
1990 i=0
|
|
2000 i=i+1
|
|
2010 IF i>joyas(rm) THEN 1520
|
|
2020 IF joyax(rm,i)<>xp OR joyay(rm,i)<>yp THEN 2000
|
|
2030 IF i=joyas(rm) THEN 2060
|
|
2040 joyax(rm,i)=joyax(rm,joyas(rm))
|
|
2050 joyay(rm,i)=joyay(rm,joyas(rm))
|
|
2060 joyas(rm)=joyas(rm)-1:robado=robado+1
|
|
2070 MOVE 400,150+(robado*2),1,1:DRAW 555,150+(robado*2),1,1
|
|
2080 SOUND 129,248,10,12,0,1
|
|
2090 GOTO 1990
|
|
2100 ruido=INT(RND*15)
|
|
2110 SOUND 1,3000,10,ruido,0,0,10
|
|
2120 PAPER 0:LOCATE 4,24:PRINT"Choque ";:PAPER 8
|
|
2130 IF ruido<10 OR retardo=50 THEN 1640
|
|
2140 retardo=retardo-50
|
|
2150 aux=REMAIN(1)
|
|
2160 AFTER retardo*4,1 GOSUB 310
|
|
2170 GOTO 1640
|
|
2180 '
|
|
2190 'Dibujar puertas
|
|
2200 '
|
|
2210 READ no,pu$
|
|
2220 IF pu$="V" THEN pu=2 ELSE pu=1
|
|
2230 PEN 2
|
|
2240 pic$=puerta$(pu):GOSUB 2510
|
|
2250 GOTO 1290
|
|
2260 '
|
|
2270 'Dibujar ventanas
|
|
2280 '
|
|
2290 READ no,ve$
|
|
2300 IF ve$="V" THEN ve=2 ELSE ve=1
|
|
2310 PEN 4
|
|
2320 pic$=vent$(ve):GOSUB 2510
|
|
2330 GOTO 1290
|
|
2340 '
|
|
2350 'Dibujar rectas
|
|
2360 '
|
|
2370 READ x1,y1,x2,y2
|
|
2380 MOVE x1,y1,0
|
|
2390 DRAW x1,y2,0:DRAW x2,y2,0
|
|
2400 DRAW x2,y1,0:DRAW x1,y1,0
|
|
2410 GOTO 1290
|
|
2420 '
|
|
2430 'Dibujar interruptores
|
|
2440 '
|
|
2450 READ no,co$
|
|
2460 IF co$="L" THEN co=1 ELSE co=2
|
|
2470 PEN 3
|
|
2480 pic$=conm$(co,0):GOSUB 2510
|
|
2490 GOTO 1290
|
|
2500 '
|
|
2510 'Escribir car
|
|
2520 '
|
|
2530 READ x,y:LOCATE x,y:PRINT pic$;
|
|
2540 no=no-1:IF no>0 THEN 2530
|
|
2550 RETURN
|
|
2560 PEN 1:LOCATE perrox,perroy:PRINT" ";
|
|
2570 hombre$=CHR$(225)
|
|
2580 IF (perrox=xp AND perroy=yp) OR (perrox=xp+xf AND perroy=yp+yf) THEN 2660
|
|
2590 IF perrox<xp THEN perrox=perrox+1
|
|
2600 IF perrox>xp THEN perrox=perrox-1
|
|
2610 IF perroy<yp THEN perroy=perroy+1
|
|
2620 IF perroy>yp THEN perroy=perroy-1
|
|
2630 LOCATE perrox,perroy:PRINT perro$;
|
|
2640 SOUND 1,0,RND*40,10,1,2,31
|
|
2650 GOTO 1520
|
|
2660 PRINT"MORDIDO";
|
|
2670 muerto=1:RETURN
|
|
2680 DATA Pasillo
|
|
2690 DATA L,64,308,226,4
|
|
2700 DATA D,2,H,6,3,6,22
|
|
2710 DATA D,2,V,4,12,9,11
|
|
2720 DATA S,1,L,4,11
|
|
2730 DATA S,1,R,9,14
|
|
2740 DATA FIN
|
|
2750 DATA Sala
|
|
2760 DATA L,2,308,258,4
|
|
2770 DATA D,1,V,10,12
|
|
2780 DATA W,1,H,6,3
|
|
2790 DATA W,1,V,2,12
|
|
2800 DATA S,2,R,10,11,10,15
|
|
2810 DATA FIN
|
|
2820 DATA Comedor
|
|
2830 DATA L,2,308,258,4
|
|
2840 DATA W,1,V,10,12
|
|
2850 DATA W,1,H,6,3
|
|
2860 DATA D,1,V,2,12
|
|
2870 DATA S,2,L,2,11,2,15
|
|
2880 DATA FIN
|
|
2890 DATA Cocina
|
|
2900 DATA L,2,276,384,4
|
|
2910 DATA D,2,H,6,5,6,22
|
|
2920 DATA W,1,H,10,22
|
|
2930 DATA W,1,V,14,13
|
|
2940 DATA D,1,V,2,13
|
|
2950 DATA S,1,L,2,16
|
|
2960 DATA FIN
|
|
2970 DATA Despensa
|
|
2980 DATA L,2,276,256,4
|
|
2990 DATA D,1,V,10,12
|
|
3000 DATA S,1,R,10,11
|
|
3010 DATA FIN
|
|
3020 DATA 5,4,8,21,0,4,3,2
|
|
3030 DATA 3,4,9,21,-1,-1,1,-1
|
|
3040 DATA 3,4,9,21,-1,-1,-1,1
|
|
3050 DATA 3,6,13,21,1,0,-1,5
|
|
3060 DATA 3,6,9,21,-1,-1,4,-1
|
|
3070 DATA L,64,308,480,100
|
|
3080 DATA F,250,98,294,102
|
|
3090 DATA F,250,306,294,310
|
|
3100 DATA F,390,94,430,106
|
|
3110 DATA F,390,302,430,314
|
|
3120 DATA F,474,240,488,270
|
|
3130 DATA F,474,124,488,154
|
|
3140 DATA F,58,240,72,270
|
|
3150 DATA L,226,308,322,180
|
|
3160 DATA L,160,180,480,100
|
|
3170 DATA L,64,180,160,100
|
|
3180 DATA FIN
|