10 CLEAR 15 W=WINDOW (0,0,10,6) 20 CLS 30 INPUT "vuoi giocare contro di me (s/n) ";A$ 35 IF A$="s" THEN INPUT "mi dai degli angoli (0-4) ";AN 36 IF AN<0 OR AN>4 THEN 35 40 IF A$="s" OR A$="S" THEN A%=1 50 CLS 60 SCALE -95,416,0,255 70 KX=39 80 KY=31 90 B$="#" 100 A1=9 110 A2=33 120 B1=7 130 B2=26 140 C1=19 150 C2=23 160 D1=15 170 D2=18 180 FOR J=0 TO 8 190 FOR K=0 TO 3 200 IF K=3 THEN 220 210 LINE (0,J*KY+K)-(312,J*KY+K) 220 LINE (J*KX+K,0)-(J*KX+K,250) 230 NEXT K 240 NEXT J 250 GOTO 430 260 X0=X*KX+A1 270 X1=X*KX+A2 280 Y0=Y*KY+B1 290 Y1=Y*KY+B2 300 RETURN 310 GOSUB 260 320 P(X,Y)=1 330 LINE (X0,Y0)-(X1,Y1),,BF 340 RETURN 350 GOSUB 260 360 P(X,Y)=2 370 LINE (X0,Y0)-(X1,Y1),0,BF 380 LINE (X0,Y0)-(X1,Y1),,B 390 LINE (X0+1,Y0+1)-(X1-1,Y1-1),,B 400 LINE (X0,Y0)-(X1,Y1) 410 LINE (X0,Y1)-(X1,Y0) 420 RETURN 430 X=3 440 Y=3 450 GOSUB 310 460 X=4 470 Y=3 480 GOSUB 350 490 X=4 500 Y=4 510 GOSUB 310 520 X=3 530 Y=4 540 GOSUB 350 542 FOR X=0 TO 7 STEP 7 543 FOR Y=0 TO 7 STEP 7 544 IF AN=0 THEN 550 545 GOSUB 350 546 AN=AN-1 547 NEXT Y 548 NEXT X 550 X=-2 560 Y=5 570 GOSUB 260 580 GOSUB 330 590 X=9 600 GOSUB 260 610 GOSUB 370 620 T=-1 630 GOTO 1880 640 IF LEN(INKEY$)>0 THEN 640 645 VY=Y 650 VX=X 660 Y=5 670 X=-2 680 IF T<0 THEN X=9 690 GOSUB 260 700 LINE (X0,Y0)-(X1,Y1),0,BF 710 X=VX 720 Y=VY 730 GOSUB 260 740 LINE (X0,Y0)-(X1,Y1),0,BF 750 LINE (X0+10,Y0)-(X0+14,Y1),,BF 760 LINE (X0,Y0+8)-(X1,Y0+11),,BF 770 B$="#" 780 FOR J=1 TO 80 790 A$=INKEY$ 800 IF LEN(A$)=0 THEN 830 810 B$=A$ 820 GOTO 840 830 NEXT J 840 IF LEN(INKEY$)>0 THEN 840 850 IF X<0 OR X>8 THEN 920 860 ON P(X,Y) GOTO 890,910 870 LINE (X0,Y0)-(X1,Y1),0,BF 880 GOTO 920 890 GOSUB 310 900 GOTO 920 910 GOSUB 350 920 VX=X 930 VY=Y 940 IF T<0 THEN 1000 950 X=-2 960 Y=5 970 GOSUB 260 980 GOSUB 330 990 GOTO 1040 1000 X=9 1010 Y=5 1020 GOSUB 260 1030 GOSUB 370 1040 X=VX 1050 Y=VY 1060 FOR J=0 TO 50 1070 A$=INKEY$ 1080 IF LEN(A$)>0 THEN B$=A$ 1090 IF B$=A$ THEN 1110 1100 NEXT J 1110 IF B$="8" OR B$="2" THEN 1160 1120 IF B$="4" OR B$="6" THEN 1220 1130 IF B$=" " THEN 1310 1135 IF A%=1 THEN 640 1140 IF B$="c" AND TP+TM=4 THEN 1320 1150 GOTO 640 1160 DX=0 1170 DY=1 1180 IF B$="2" THEN DY=-1 1190 IF Y+DY<0 OR Y+DY>7 THEN 640 1200 IF X>8 OR X<0 THEN 640 1210 GOTO 1280 1220 DY=0 1230 DX=1 1240 IF B$="4" THEN DX=-1 1250 IF X=-2 AND DX=+1 THEN X=-1 1260 IF X=9 AND DX=-1 THEN X=8 1270 IF X+DX>7.5 OR X+DX<-.5 THEN 640 1280 X=X+DX 1290 Y=Y+DY 1300 GOTO 640 1310 IF X<0 OR X>7 THEN 640 1315 ON P(X,Y) GOTO 640,640 1320 RETURN 1330 TP=0 1340 TM=0 1350 Z=0 1360 VX=X 1370 VY=Y 1380 B%=0 1390 FOR X=0 TO 7 1400 FOR Y=0 TO 7 1410 ON P(X,Y) GOTO 1450,1470 1420 IF Z>0 THEN 1480 1430 GOSUB 1720 1440 GOTO 1480 1450 TP=TP+1 1460 GOTO 1480 1470 TM=TM+1 1480 NEXT Y 1490 NEXT X 1500 X=VX 1510 Y=VY 1520 CURSOR (1,14)0 1530 PRINT TP; 1535 IF T<0 THEN 1560 1540 CURSOR (1,16)0 1550 PRINT " "; 1555 GOTO 1580 1560 CURSOR (70,16)0 1570 PRINT " "; 1580 CURSOR (70,14)0 1590 PRINT TM; 1600 IF TP+TM=64 THEN 2360 1602 IF T<0 THEN F2=0 1603 IF T>0 THEN F1=0 1605 IF TP=0 OR TM=0 THEN 2360 1606 F0=0 1610 IF Z>0 THEN 1660 1614 IF T<0 THEN F2=1 1615 IF T>0 THEN F1=1 1620 J=1 1630 IF T<0 THEN J=55 1640 CURSOR (J,12),0 1650 PRINT "bloccato"; 1655 IF F1=1 AND F2=1 THEN 2360 1657 F0=1 1660 RETURN 1670 GOSUB 640 1680 IF B$="c" THEN 1880 1690 B%=1 1700 GOSUB 1720 1710 GOTO 1830 1720 Z=0 1730 ON P(X,Y) GOTO 1820,1820 1740 FOR J=-1 TO 1 1760 IF J+X<0 OR J+X>7 THEN 1810 1770 FOR J1=-1 TO 1 1780 IF J1+Y<0 OR J1+Y>7 THEN 1800 1790 ON P(J+X,J1+Y) GOSUB 1940,2020 1800 NEXT J1 1810 NEXT J 1820 RETURN 1830 IF Z=0 THEN 1670 1840 IF T<0 THEN 1870 1850 GOSUB 310 1860 GOTO 1880 1870 GOSUB 350 1880 Y=5 1890 X=-2 1900 T=-T 1910 IF T<0 THEN X=9 1915 GOSUB 1330 1916 IF F0=1 THEN 1880 1920 IF T<0 AND A%=1 THEN 3000 1930 GOTO 1670 1940 IF T<0 THEN 1960 1950 RETURN 1960 GOSUB 2040 1970 IF Z1<>0 AND B%=1 THEN 1990 1980 RETURN 1990 GOSUB 2050 2010 RETURN 2020 IF T>0 THEN 1960 2030 RETURN 2040 Z1=0 2050 FOR M=1 TO 8 2060 J2=J*M+X 2070 J3=J1*M+Y 2080 IF J2<0 OR J2>7 THEN 2350 2090 IF J3<0 OR J3>7 THEN 2350 2100 ON P(J2,J3) GOTO 2120,2230 2110 RETURN 2120 IF T>0 THEN 2330 2130 IF Z1=0 THEN 2210 2140 VX=X 2150 VY=Y 2160 X=J2 2170 Y=J3 2180 GOSUB 350 2190 X=VX 2200 Y=VY 2210 NEXT M 2220 RETURN 2230 IF T<0 THEN 2330 2240 IF Z1=0 THEN 2210 2250 VX=X 2260 VY=Y 2270 X=J2 2280 Y=J3 2290 GOSUB 310 2300 X=VX 2310 Y=VY 2320 GOTO 2210 2330 Z1=1 2340 Z=1 2350 RETURN 2360 IF INKEY$="/" THEN 10 2370 GOTO 2360 3000 B%=0 3010 FOR X=0 TO 7 STEP 7 3020 FOR Y=0 TO 7 STEP 7 3030 Z=0 3040 IF P(X,Y)=0 THEN GOSUB 1720 3050 IF Z>0 THEN 5000 3060 NEXT Y 3070 NEXT X 3075 GOTO 6000 3080 IF P%=1 THEN 3250 3090 P%=1 3100 FOR X=2 TO 5 3110 FOR Y=2 TO 5 3120 IF P(X,Y)=0 THEN 3200 3130 NEXT Y 3140 NEXT X 3150 GOTO 3500 3200 P%=0 3210 GOSUB 1720 3220 IF Z=0 THEN 3130 3230 GOTO 5000 3250 FOR J6=0 TO 7 STEP 7 3260 FOR J7=0 TO 7 STEP 7 3280 IF P(J6,J7)=2 THEN 3330 3290 NEXT J7 3300 NEXT J6 3310 GOTO 3500 3330 FOR X=J6-1 TO J6+1 3340 IF X<0 OR X>7 THEN 3400 3350 FOR Y=J7-1 TO J7+1 3360 IF Y<0 OR Y>7 THEN 3390 3370 IF P(X,Y)=0 THEN GOSUB 1720 3380 IF Z>0 THEN 5000 3390 NEXT Y 3400 NEXT X 3500 FOR X=2 TO 5 3510 FOR Y=1 TO 6 STEP 5 3520 GOSUB 4000 3530 IF Z>0 THEN 5000 3540 NEXT Y 3550 NEXT X 3560 FOR X=2 TO 5 3570 FOR Y=0 TO 7 STEP 7 3580 GOSUB 4000 3590 IF Z>0 THEN 5000 3595 NEXT Y 3596 NEXT X 3597 IF WW=1 THEN 3600 3598 WW=1 3599 GOTO 6170 3600 GOTO 7100 3609 FOR X=0 TO 7 3610 FOR Y=0 TO 7 3620 IF P(X,Y)=0 THEN GOSUB 1720 3630 IF Z>0 THEN 5000 3640 NEXT Y 3650 NEXT X 3660 GOTO 1520 4000 SX=X 4010 SY=Y 4020 IF P(X,Y)=0 THEN GOSUB 1720 4030 IF Z>0 THEN 4110 4040 X=SY 4050 Y=SX 4060 IF P(X,Y)=0 THEN GOSUB 1720 4070 IF Z>0 THEN 4110 4080 X=SX 4090 Y=SY 4110 RETURN 5000 IF LEN(INKEY$)>0 THEN 5000 5010 GOSUB 260 5020 LINE (X0+10,Y0)-(X0+14,Y1),,BF 5030 LINE (X0,Y0+8)-(X1,Y0+11),,BF 5040 IF INKEY$><" " THEN 5040 5050 B%=1 5060 GOSUB 1720 5070 GOTO 1840 6000 FOR J6=0 TO 7 STEP 7 6010 FOR J7=0 TO 7 STEP 7 6020 IF P(J6,J7)=2 THEN 6060 6030 NEXT J7 6040 NEXT J6 6050 GOTO 6170 6060 DY=0 6070 DX=1 6080 IF J6=7 THEN DX=-1 6090 GOSUB 6300 6100 IF Z>0 THEN 5000 6110 DX=0 6120 DY=1 6130 IF J7=7 THEN DY=-1 6140 GOSUB 6300 6150 IF Z>0 THEN 5000 6160 GOTO 6030 6170 FOR J6=0 TO 7 STEP 7 6180 D%=1 6190 IF J6=7 THEN D%=-1 6200 DX=D% 6210 DY=0 6220 GOSUB 6500 6230 IF Z>0 THEN 5000 6240 DX=0 6250 DY=D% 6260 GOSUB 6500 6270 IF Z>0 THEN 5000 6280 NEXT J6 6290 GOTO 3080 6300 X=J6 6310 Y=J7 6320 V%=0 6330 X=X+DX 6340 Y=Y+DY 6350 IF X>7 OR X<0 THEN 6390 6360 IF Y<0 OR Y>7 THEN 6390 6370 ON P(X,Y) GOTO 6400,6420 6380 GOSUB 1720 6390 RETURN 6400 V%=1 6410 GOTO 6330 6420 IF V%=1 THEN 6390 6430 GOTO 6330 6500 X=J6 6510 Y=J6 6520 V%=1 6530 IF P(X,Y)=0 THEN V%=0 6540 X=X+DX 6550 Y=Y+DY 6560 IF V%=0 THEN V%=P(X,Y) 6570 FOR J7=2-WW TO 5+WW 6580 X=X+DX 6590 Y=Y+DY 6600 IF P(X,Y)>0 THEN 6800 6610 GOSUB 1720 6620 IF Z=0 THEN 6770 6630 J8=X 6640 J9=Y 6650 M%=0 6660 J8=J8+DX 6670 J9=J9+DY 6680 IF J8<0 OR J8>7 THEN 6730 6690 IF J9<0 OR J9>7 THEN 6730 6700 IF P(J8,J9)=0 THEN 6740 6710 M%=P(J8,J9) 6720 GOTO 6660 6730 M%=1 6740 IF M%=1 AND V%=1 THEN 6760 6750 IF M%=1 OR V%=1 THEN 6770 6760 GOTO 7000 6770 Z=0 6780 V%=0 6790 GOTO 6810 6800 IF V%=0 THEN V%=P(X,Y) 6810 NEXT J7 6820 RETURN 7000 IF J7<3 OR J7>4 THEN 7020 7010 RETURN 7020 QX=6 7030 QY=6 7040 IF X<3 THEN QX=1 7050 IF Y<3 THEN QY=1 7060 IF P(QX,QY)=1 THEN 6770 7070 RETURN 7100 FOR X=1 TO 6 STEP 5 7110 FOR Y=1 TO 6 STEP 5 7115 Z=15 7120 IF P(X,Y)=0 THEN GOSUB 1720 7130 IF Z>0 THEN 7300 7140 DX=1 7150 DY=1 7160 IF X=6 THEN DX=-1 7170 IF Y=6 THEN DY=-1 7180 IF P(X-DX,Y-DY)=2 THEN 5000 7190 IF P(X-DX,Y-DY)=1 THEN 7300 7200 M%=0 7210 V%=0 7220 J6=X 7230 J7=Y 7240 J6=J6+DX 7250 J7=J7+DX 7260 IF J6<0 OR J6>7 THEN 7400 7270 IF J7<0 OR J7>7 THEN 7400 7280 ON P(J6,J7) GOTO 7450,7500 7290 GOTO 7550 7300 NEXT Y 7310 NEXT X 7320 Z=0 7330 GOTO 3609 7400 IF M%=1 THEN 7300 7410 GOTO 5000 7450 IF M%=2 THEN 7300 7460 M%=1 7470 GOTO 7240 7500 M%=2 7510 GOTO 7240 7550 IF M%=0 OR M%=2 THEN 5000 7560 GOTO 7300