50 CALL CLEAR
51 CALL SCREEN(4)
52 CALL COLOR(1,1,4)
53 CALL COLOR(3,2,1)
54 CALL COLOR(2,2,1)
55 PRINT : : : : : : :"******** PUC-MAN ***********": : : : : :
60 INPUT "scegli il labirinto 1-3 ":LB
65 IF LB<>1 THEN 80
70 RESTORE
75 GOTO 100
80 IF LB<>2 THEN 90
82 RESTORE 6000
84 GOTO 100
90 IF LB<>3 THEN 60
91 RESTORE 7000
100 CALL CLEAR
101 B=0
102 MD=64
103 P=500000
104 DP=100
110 CALL SCREEN(2)
120 CALL CHAR(34,"FFFFFFFFFFFFFFFF")
125 CALL CHAR(42,"3C7EFFFFFFFF7E3C")
130 CALL COLOR(1,5,2)
140 FOR I=1 TO 34
150 READ R,C,L
160 CALL HCHAR(R,C,34,L)
170 NEXT I
180 DATA 3,3,29,5,5,3,5,11,5,5,17,3,5,21,5,7,11,1,7,13,3,7,17,3,7,25,3,9,9,3,9,17,3,9,21,5
190 DATA 11,9,5,11,23,3,13,5,3,13,13,1,13,15,3,13,23,5,15,7,3,15,11,5,15,19,5,15,29,3,17,9,3
200 DATA 17,15,3,17,21,5,17,27,3,19,7,3,19,11,5,19,21,5,21,5,3,21,13,1,21,17,3,21,21,5,23,3,29
210 FOR I=1 TO 31
220 READ R,C,L
230 CALL VCHAR(R,C,34,L)
240 NEXT I
250 DATA 3,3,21,5,5,3,9,5,7,17,5,3,7,7,5,15,7,3,3,9,5,13,9,3,21,9,3,13,11,3,19,11,3
260 DATA 9,13,3,17,13,3,9,15,5,21,15,3,9,17,3,13,17,3,17,17,5,11,19,9,7,21,7,5,23,3
270 DATA 15,25,3,5,27,1,9,27,7,19,27,3,5,29,5,11,29,3,17,29,5,3,31,21,3,31,21,3,31,21
280 CALL CHAR(64,"0000001818")
290 CALL COLOR(5,3,1)
300 FOR I=4 TO 22 STEP 2
310 FOR J=4 TO 30 STEP 2
320 CALL HCHAR(I,J,64)
330 NEXT J
340 NEXT I
350 CALL CHAR(65,"00183C7E7E3C18")
360 CALL HCHAR(8,8,65)
370 CALL HCHAR(8,28,65)
380 CALL VCHAR(18,28,65)
390 CALL VCHAR(18,8,65)
410 TP=139
415 MD=MD/2
420 C=18
430 R=12
450 CALL COLOR(2,11,1)
460 CALL COLOR(3,11,1)
470 CALL COLOR(4,11,2)
480 CALL COLOR(6,9,1)
481 OPTION BASE 1
482 DIM RS(4),CS(4),DC(4),DR(4),VS(4)
490 CALL CHAR(72,"183C5ADBFFDBDBDB")
500 CALL HCHAR(R,C,42)
510 GOSUB 5000
511 CALL SOUND(300,988,2)
512 CALL SOUND(900,1319,2)
513 CALL SOUND(100,1480,2)
514 CALL SOUND(100,1319,2)
515 CALL SOUND(100,1480,2)
516 CALL SOUND(200,1661,2)
517 CALL SOUND(100,1661,2)
518 CALL SOUND(900,1661,2)
520 CALL KEY(1,L,S)
530 IF S=0 THEN 520
535 CALL HCHAR(1,10,48)
540 P$=STR$(P)
550 FOR I=2 TO 5
560 CALL HCHAR(1,4+I,ASC(SEG$(P$,I,1)))
570 NEXT I
580 CALL KEY(3,L,S)
590 IF L=ASC("S")THEN 3000
600 IF L=ASC("D")THEN 3030
610 IF L=ASC("E")THEN 3060
620 IF L=ASC("X")THEN 3090 ELSE 1900
630 CALL GCHAR(R+RD/2,C+CD/2,L)
632 IF L=34 THEN 1900
636 CALL GCHAR(R+RD,C+CD,L)
640 IF L=72 THEN 1500
650 IF L=65 THEN 1400
660 IF L<>64 THEN 700
670 TP=TP-1
680 P=P+10
690 CALL SOUND(50,988,2)
695 CALL SOUND(100,831,2)
700 CALL HCHAR(R,C,32)
710 R=R+RD
720 C=C+CD
721 IF CD<>2 THEN 724
722 CALL CHAR(42,"3E7CF8F0F0F87C3E")
723 GOTO 733
724 IF CD<>-2 THEN 727
725 CALL CHAR(42,"7C3E1F0F0F1F3E7C")
726 GOTO 733
727 IF RD<>2 THEN 730
728 CALL CHAR(42,"3C7EFFFFE7E7C342")
729 GOTO 733
730 IF RD<>-2 THEN 733
731 CALL CHAR(42,"42C3E7E7FFFF7E3C")
733 CALL HCHAR(R,C,42)
740 IF TP THEN 1900
741 FOR J=1 TO 4
742 RS(J)=0
743 NEXT J
744 B=0
748 GOTO 300
1400 M=MD
1410 CALL COLOR(6,11,1)
1420 GOTO 670
1500 IF M<=0 THEN 1590
1501 CALL SOUND(100,494,2)
1502 CALL SOUND(100,494,2)
1503 CALL SOUND(100,988,2)
1504 CALL SOUND(100,988,2)
1505 CALL SOUND(300,831,2)
1510 P=P+DP
1511 W1=R+RD
1512 W2=C+CD-1
1513 GOSUB 17000
1520 FOR I=1 TO 4
1530 IF(RS(I)=R+RD)*(CS(I)=C+CD)THEN 1550
1540 NEXT I
1550 RS(I)=0
1560 IF VS(I)>63 THEN 670 ELSE 700
1590 CALL VCHAR(R,C,32)
1600 CALL SOUND(200,988,2)
1610 CALL SOUND(200,932,2)
1620 CALL SOUND(200,880,2)
1630 CALL SOUND(200,831,2)
1640 CALL SOUND(800,784,2)
1650 CALL SOUND(200,740,2)
1660 CALL SOUND(400,659,2)
1670 CALL KEY(3,L,S)
1680 IF S=0 THEN 1670
1681 IF B THEN 1684
1682 B=1
1683 GOTO 420
1684 FOR J=1 TO 4
1685 RS(J)=0
1686 NEXT J
1690 GOTO 50
1900 FOR I=1 TO 4
1910 IF RS(I)=0 THEN 2150
1920 DC(I)=2*SGN(C-CS(I))
1925 DR(I)=0
1930 IF ABS(C-CS(I))<3 THEN 1960 ELSE 2000
1960 DC(I)=0
1970 DR(I)=2*SGN(R-RS(I))
1980 IF DR(I)=0 THEN 1990 ELSE 2000
1990 DC(I)=2*SGN(C-CS(I))
1995 DR(I)=0
2000 IF M<0 THEN 2009
2002 DC(I)=-DC(I)
2004 DR(I)=-DR(I)
2009 CALL GCHAR(RS(I)+DR(I)/2,CS(I)+DC(I)/2,L)
2010 IF L=34 THEN 2500
2020 CALL HCHAR(RS(I),CS(I),VS(I))
2030 CS(I)=CS(I)+DC(I)
2040 RS(I)=RS(I)+DR(I)
2050 CALL GCHAR(RS(I),CS(I),A)
2060 IF A=42 THEN 3500
2070 IF A<>72 THEN 2130
2080 RS(I)=RS(I)-DR(I)
2090 CS(I)=CS(I)-DC(I)
2095 CALL HCHAR(RS(I),CS(I),72)
2100 GOTO 2150
2130 VS(I)=A
2140 CALL HCHAR(RS(I),CS(I),72)
2150 NEXT I
2155 CALL CHAR(42,"3C7EFFFFFFFF7E3C")
2160 M=M-1
2170 IF M THEN 2190
2180 GOSUB 5000
2185 CALL COLOR(6,9,1)
2186 DP=100
2190 GOTO 540
2500 RANDOMIZE
2510 L=INT(RND*4)+1
2520 ON L GOTO 2530,2560,2590,2620
2530 DR(I)=2
2540 DC(I)=0
2550 GOTO 2000
2560 DR(I)=-2
2570 DC(I)=0
2580 GOTO 2000
2590 DR(I)=0
2600 DC(I)=2
2610 GOTO 2000
2620 DR(I)=0
2630 DC(I)=-2
2640 GOTO 2000
3000 CD=-2
3010 RD=0
3020 GOTO 630
3030 CD=2
3040 RD=0
3050 GOTO 630
3060 CD=0
3070 RD=-2
3080 GOTO 630
3090 CD=0
3100 RD=2
3110 GOTO 630
3500 IF M<=0 THEN 3700
3510 P=P+DP
3511 W1=R
3512 W2=C-1
3513 GOSUB 17000
3520 CALL SOUND(100,247,2)
3530 CALL SOUND(100,247,2)
3540 CALL SOUND(100,988,2)
3550 CALL SOUND(100,988,2)
3560 CALL SOUND(300,831,2)
3570 FOR J=1 TO 4
3580 IF(RS(I)=R)*(CS(I)=C)THEN 3600
3590 NEXT I
3600 RS(I)=0
3610 C=C-CD
3615 R=R-RD
3620 GOTO 1560
3700 CALL HCHAR(R,C,72)
3710 GOTO 1600
5000 FOR I=1 TO 4
5010 IF RS(I)THEN 5090
5015 RANDOMIZE
5020 RS(I)=INT(RND*10)*2+4
5030 CS(I)=INT(RND*14)*2+4
5040 CALL GCHAR(RS(I),CS(I),VS(I))
5050 IF(VS(I)=42)+(VS(I)=72)THEN 5015
5060 CALL HCHAR(RS(I),CS(I),72)
5090 NEXT I
5100 RETURN
6000 DATA 3,3,29,5,5,3,5,11,5,5,21,3,5,25,5,7,5,1,7,9,7,7,19,3,7,25,3,9,5,5,9,11,7,9,23,3
6010 DATA 11,7,3,11,17,1,11,21,3,11,27,3,13,17,7,13,29,3,15,7,7,15,17,1,15,21,5,15,27,3,17,7,9
6020 DATA 17,17,3,17,27,3,19,5,3,19,11,5,19,25,3,21,5,5,21,15,5,21,21,3,21,27,3,23,3,29,23,3,29
6030 DATA 3,3,21,3,9,3,5,7,3,5,19,3,5,23,3,3,31,21,5,17,5,7,27,7,7,29,3,9,13,3,9,19,3,9,21,3
6040 DATA 9,25,3,11,5,3,11,7,3,11,11,3,11,15,5,13,9,3,13,13,3,13,25,5,15,5,3,15,19,5,17,21,3
6050 DATA 17,23,3,17,27,3,19,9,3,19,13,3,19,17,3,19,29,3,21,11,3,21,25,3
7000 DATA 3,3,29,5,7,7,5,25,5,7,5,5,9,5,5,11,9,3,11,19,1,11,23,3,13,7,5,13,13,3,13,17,3
7010 DATA 13,21,5,13,27,3,15,5,5,15,11,7,15,25,5,17,3,5,17,9,3,17,21,3,17,27,3,19,5,5,3,3,1
7020 DATA 19,11,3,19,17,7,19,25,5,21,5,5,21,11,7,21,19,3,21,25,3,23,3,29,3,3,1
7025 DATA 3,3,1,3,3,1,3,3,1
7030 DATA 3,3,21,5,5,3,11,5,3,11,7,3,17,9,3,7,11,5,5,13,3,9,13,3,17,13,3,5,15,5,11,15,3
7040 DATA 15,15,5,5,17,3,9,17,3,17,17,3,5,19,5,13,19,5,3,21,3,7,21,5,13,21,3,5,23,5
7050 DATA 15,23,3,19,23,3,5,25,3,9,25,3,15,25,3,7,27,5,7,29,5,19,29,3,3,31,21,3,3,1
17000 CALL GCHAR(W1,W2,CH1)
17010 CALL GCHAR(W1,W2+1,CH2)
17020 CALL GCHAR(W1,W2+2,CH3)
17030 DP$=STR$(DP)
17040 CALL HCHAR(W1,W2,ASC(SEG$(DP$,1,1)))
17050 CALL HCHAR(W1,W2+1,48,2)
17060 FOR U=1 TO 150
17070 NEXT U
17080 DP=DP*2
17090 CALL HCHAR(W1,W2,CH1)
17100 CALL HCHAR(W1,W2+1,CH2)
17110 CALL HCHAR(W1,W2+2,CH3)
17120 RETURN
