498 lines
12 KiB
QBasic
498 lines
12 KiB
QBasic
100 REM--CHESS BY RANDY MILLER, JAN, 1976
|
||
110 DEFINT A-Z:DEFSNG E:DEFSNG M:DEFSNG P
|
||
120 DIM PS(70,3),MV(35,2),V(32)
|
||
130 DIM B(8,8),TM(8,8)
|
||
140 DEF FNL(X)=X\10
|
||
150 DEF FNM(X)=X MOD(10)
|
||
160 TM(1,1)=0
|
||
170 FOR X=1 TO 32
|
||
180 READ V(X)
|
||
190 NEXT
|
||
200 FOR Y=1 TO 8
|
||
210 FOR X=1 TO 8
|
||
220 READ B(X,Y)
|
||
230 NEXT X:NEXT Y
|
||
240 DATA -2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2,-2,-1
|
||
250 DATA 8,12,19,21,-8,-12,-19,-21
|
||
260 DATA 1,9,10,11,-1,-9,-10,-11
|
||
270 DATA 4,2,3,6,5,3,2,4,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0
|
||
280 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1
|
||
290 DATA -1,-1,-1,-1,-4,-2,-3,-6,-5,-3,-2,-4
|
||
300 CB=3:CW=3
|
||
310 PRINT:PRINT:PRINT:PRINT TAB(10);"**** CHESS ****"
|
||
320 INPUT "DO YOU WANT TO BE WHITE OR BLACK";C$
|
||
330 IF LEFT$(C$,1)="B" THEN 370
|
||
340 B(4,1)=5:B(4,8)=-5
|
||
350 B(5,1)=6:B(5,8)=-6
|
||
360 GOTO 380
|
||
370 PRINT "THANK YOU, THAT MEANS I GET TO GO FIRST":PRINT
|
||
380 FOR Y=1 TO 8
|
||
390 FOR X=1 TO 8
|
||
400 TM(X,Y)=B(X,Y)
|
||
410 NEXT X:NEXT Y
|
||
420 IF LEFT$(C$,1)<>"B" THEN 840
|
||
430 NB=1
|
||
440 REM -- COMPILE LIST OF POSSIBLE MOVES --
|
||
450 FOR X=1 TO 8
|
||
460 FOR Y=1 TO 8
|
||
470 IF SGN(B(X,Y))<>1 THEN 550
|
||
480 GOSUB 1870
|
||
490 FOR D=1 TO N
|
||
500 IF MV(D,1)=0 THEN 540
|
||
510 PS(NB,1)=MV(D,1)
|
||
520 PS(NB,2)=MV(D,2)
|
||
530 NB=NB+1
|
||
540 NEXT D
|
||
550 NEXT Y
|
||
560 NEXT X
|
||
570 PRINT:PRINT "NUMBER OF POSSIBLE MOVES FOR COMPUTER";NB-1:PRINT
|
||
580 IF NB>1 THEN PRINT "FROM TO BOARD VALUE":GOTO 620
|
||
590 PRINT "I DON'T BELIEVE IT! - YOU WON!!!"
|
||
600 END
|
||
610 REM -- EVALUATE EACH POSSIBLE MOVE --
|
||
620 FOR D=1 TO NB-1
|
||
630 D1=FNL(PS(D,1))
|
||
640 D2=FNM(PS(D,1))
|
||
650 D3=FNL(PS(D,2))
|
||
660 D4=FNM(PS(D,2))
|
||
670 D5=B(D3,D4)
|
||
680 TM(D3,D4)=TM(D1,D2)
|
||
690 TM(D1,D2)=0
|
||
700 GOSUB 1530
|
||
710 PS(D,3)=EV
|
||
720 TM(D1,D2)=TM(D3,D4)
|
||
730 TM(D3,D4)=D5
|
||
740 PRINT PS(D,1);PS(D,2);TAB(12);PS(D,3)
|
||
750 NEXT D
|
||
760 REM
|
||
770 MZ=PS(1,3):MX=1
|
||
780 IF NB=2 THEN 830
|
||
790 FOR D=2 TO NB-1
|
||
800 IF PS(D,3)<=MZ THEN 820
|
||
810 MX=D:MZ=PS(D,3)
|
||
820 NEXT D
|
||
830 GOSUB 1290
|
||
840 GOSUB 870
|
||
850 PRINT
|
||
860 GOTO 430
|
||
870 REM -- INPUT ROUTINE --
|
||
880 GOTO 910
|
||
890 INPUT "YOUR MOVE";M,N
|
||
900 IF M<>0 THEN 930
|
||
910 FOR P=1 TO 8:FOR P1=1 TO 8:PRINT B(P1,P);:NEXT P1:PRINT:NEXT P
|
||
920 GOTO 890
|
||
930 X1=FNL(M):Y1=FNM(M):X2=FNL(N):Y2=FNM(N)
|
||
940 IF X1>8 OR X1<1 OR Y1>8 OR Y1<1 THEN 970
|
||
950 IF X2>8 OR X2<1 OR Y2>8 OR Y2<1 THEN 970
|
||
960 IF SGN(B(X1,Y1))=-1 THEN 990
|
||
970 PRINT "YOU CAN'T DO THAT."
|
||
980 GOTO 890
|
||
990 REM
|
||
1000 FOR P=1 TO 8
|
||
1010 FOR P1=1 TO 8
|
||
1020 TM(P,P1)=B(P,P1)
|
||
1030 NEXT P1
|
||
1040 NEXT P
|
||
1050 GOSUB 3690
|
||
1060 IF LG=0 THEN 970
|
||
1070 TM(X2,Y2)=TM(X1,Y1)
|
||
1080 TM(X1,Y1)=0
|
||
1090 B(X2,Y2)=B(X1,Y1)
|
||
1100 B(X1,Y1)=0
|
||
1110 PRINT "ACCEPTED."
|
||
1120 IF Y2<>1 OR B(X2,Y2)<>-1 THEN 1180
|
||
1130 PRINT "TO PROMOTE YOUR PAWN TO A KNIGHT, TYPE 2; FOR A BISHOP,"
|
||
1140 PRINT "TYPE 3; FOR A ROOK, TYPE 4; FOR A QUEEN, TYPE 5";
|
||
1150 INPUT P
|
||
1160 IF P>5 OR P<2 THEN 1130
|
||
1170 B(X2,Y2)=-P:TM(X2,Y2)=-P
|
||
1180 IF B(X2,Y2)<>-6 OR ABS(X1-X2)<>2 THEN 1240
|
||
1190 IF X1-X2=2 THEN 1250
|
||
1200 B(8,8)=0:TM(8,8)=0
|
||
1210 B(X2-1,8)=-4:TM(X2-1,8)=-4
|
||
1220 CB=(CB AND -3)
|
||
1230 PRINT "IT'S ABOUT TIME YOU CASTLED!":PRINT
|
||
1240 RETURN
|
||
1250 B(1,8)=0:TM(1,8)=0
|
||
1260 B(X2+1,8)=-4:TM(X2+1,8)=-4
|
||
1270 CB=(CB AND -3)
|
||
1280 GOTO 1230
|
||
1290 REM -- OUTPUT ROUTINE --
|
||
1300 IF PS(MX,3)<200 THEN 1350
|
||
1310 PRINT "HA - LET'S SEE YOU GET OUT OF THIS -"
|
||
1320 PRINT "I MOVE";PS(MX,1);"TO";PS(MX,2)
|
||
1330 PRINT "THANKS FOR THE GOOD GAME..."
|
||
1340 END
|
||
1350 ON INT(RND(1)*4)+1 GOTO 1360,1370,1380,1390
|
||
1360 PRINT "I RECKON I'LL MOVE ";:GOTO 1400
|
||
1370 PRINT "I GUESS I'LL TAKE";:GOTO 1400
|
||
1380 PRINT "MY MOVE IS";:GOTO 1400
|
||
1390 PRINT "I LIKE";
|
||
1400 PRINT PS(MX,1);"TO";PS(MX,2):PRINT
|
||
1410 D1=FNL(PS(MX,1))
|
||
1420 D2=FNM(PS(MX,1))
|
||
1430 D3=FNL(PS(MX,2))
|
||
1440 D4=FNM(PS(MX,2))
|
||
1450 B(D3,D4)=B(D1,D2)
|
||
1460 B(D1,D2)=0
|
||
1470 IF D4<>8 OR B(D3,D4)<>1 THEN 1500
|
||
1480 PRINT "I PROMOTE MY PAWN TO A QUEEN!"
|
||
1490 B(D3,D4)=5
|
||
1500 RETURN
|
||
1510 REM
|
||
1520 EV=RND(1):RETURN
|
||
1530 EV=RND(1)/2:US=0
|
||
1540 EV=EV+D4/7
|
||
1550 FOR PJ=1 TO 8
|
||
1560 IF TM(PJ,8)<>1 THEN 1590
|
||
1570 TM(PJ,8)=5
|
||
1580 GOTO 1610
|
||
1590 NEXT PJ
|
||
1600 IF SGN(D5)=-1 THEN EV=EV-D5
|
||
1610 FOR X=1 TO 8
|
||
1620 FOR Y=1 TO 8
|
||
1630 CX=TM(X,Y):CS=SGN(CX)
|
||
1640 IF CS<>-1 THEN 1750
|
||
1650 EV=EV+CX
|
||
1660 GOSUB 1840
|
||
1670 IF N=0 THEN 1750
|
||
1680 US=US+N:EV=EV-.166666
|
||
1690 FOR UX=1 TO N
|
||
1700 U1=MV(UX,1):U2=MV(UX,2)
|
||
1710 IF SGN(TM(FNL(U2),FNM(U2)))<>1 THEN 1740
|
||
1720 IF SGN(TM(FNL(U1),FNM(U1)))<>-1 THEN 1740
|
||
1730 EV=EV-2*TM(FNL(U2),FNM(U2))
|
||
1740 NEXT UX
|
||
1750 NEXT Y
|
||
1760 NEXT X
|
||
1770 IF US>0 THEN 1800
|
||
1780 EV=EV+1000
|
||
1790 GOTO 1810
|
||
1800 FOR X=3 TO 6:FOR Y=3 TO 6:EV=EV+TM(X,Y)/3:NEXTY:NEXTX
|
||
1810 IF PJ>8 THEN 1830
|
||
1820 TM(PJ,8)=1
|
||
1830 RETURN
|
||
1840 REM
|
||
1850 R=0
|
||
1860 GOTO 1880
|
||
1870 R=1
|
||
1880 MV(1,1)=0
|
||
1890 S1=SGN(TM(X,Y))
|
||
1900 AA=X*10+Y
|
||
1910 N=1
|
||
1920 ON ABS(TM(X,Y)) GOSUB 2330,2770,2880,3140,3400,3440
|
||
1930 IF N=1 THEN 1950
|
||
1940 IF R=1 THEN 1970
|
||
1950 N=N-1
|
||
1960 RETURN
|
||
1970 REM -- IF RESTRICTED --
|
||
1980 N1=N-1
|
||
1990 N=N1
|
||
2000 FOR K=1 TO N1
|
||
2010 C1=FNL(MV(K,1))
|
||
2020 C2=FNM(MV(K,1))
|
||
2030 C3=FNL(MV(K,2))
|
||
2040 C4=FNM(MV(K,2))
|
||
2050 IF ABS(TM(C3,C4))=6 THEN 2070
|
||
2060 IF SGN(TM(C3,C4))<>S1 THEN 2080
|
||
2070 MV(K,1)=0:MV(K,2)=0:GOTO 2290
|
||
2080 C5=TM(C3,C4)
|
||
2090 TM(C3,C4)=TM(C1,C2)
|
||
2100 TM(C1,C2)=0
|
||
2110 REM -- FIND KING --
|
||
2120 FOR Y2=1 TO 8
|
||
2130 FOR X2=1 TO 8
|
||
2140 IF TM(X2,Y2)=6*S1 THEN 2170
|
||
2150 NEXT X2
|
||
2160 NEXT Y2
|
||
2170 REM
|
||
2180 FOR Y1=1 TO 8
|
||
2190 FOR X1=1 TO 8
|
||
2200 IF SGN(TM(X1,Y1))<>-S1 THEN 2250
|
||
2210 IF TM(X1,Y1)<>-S1 THEN 2230
|
||
2220 IF X1=X2 AND ABS(Y2-Y1)>2 THEN 2250
|
||
2230 GOSUB 3660
|
||
2240 IF LG=1 THEN 2310
|
||
2250 NEXT X1
|
||
2260 NEXT Y1
|
||
2270 TM(C1,C2)=TM(C3,C4)
|
||
2280 TM(C3,C4)=C5
|
||
2290 NEXT K
|
||
2300 RETURN
|
||
2310 MV(K,1)=0:MV(K,2)=0
|
||
2320 GOTO 2250
|
||
2330 REM -- RAW PAWN MOVE --
|
||
2340 IF S1=-1 THEN 2560
|
||
2350 IF Y+1>8 THEN 2550
|
||
2360 IF TM(X,Y+1)<>0 THEN 2450
|
||
2370 MV(N,1)=AA
|
||
2380 MV(N,2)=X*10+Y+1
|
||
2390 N=N+1
|
||
2400 IF Y>2 THEN 2450
|
||
2410 IF TM(X,Y+2)<>0 THEN 2450
|
||
2420 MV(N,1)=AA
|
||
2430 MV(N,2)=X*10+Y+2
|
||
2440 N=N+1
|
||
2450 IF X=1 THEN 2500
|
||
2460 IF SGN(TM(X-1,Y+1))<>-S1 THEN 2500
|
||
2470 MV(N,1)=AA
|
||
2480 MV(N,2)=(X-1)*10+Y+1
|
||
2490 N=N+1
|
||
2500 IF X=8 THEN 2550
|
||
2510 IF SGN(TM(X+1,Y+1))<>-S1 THEN 2550
|
||
2520 MV(N,1)=AA
|
||
2530 MV(N,2)=(X+1)*10+Y+1
|
||
2540 N=N+1
|
||
2550 RETURN
|
||
2560 IF Y-1<1 THEN 2760
|
||
2570 IF TM(X,Y-1)<>0 THEN 2660
|
||
2580 MV(N,1)=AA
|
||
2590 MV(N,2)=X*10+Y-1
|
||
2600 N=N+1
|
||
2610 IF Y<7 THEN 2660
|
||
2620 IF TM(X,Y-2)<>0 THEN 2660
|
||
2630 MV(N,1)=AA
|
||
2640 MV(N,2)=X*10+Y-2
|
||
2650 N=N+1
|
||
2660 IF X=1 THEN 2710
|
||
2670 IF SGN(TM(X-1,Y-1))<>-S1 THEN 2710
|
||
2680 MV(N,1)=AA
|
||
2690 MV(N,2)=(X-1)*10+Y-1
|
||
2700 N=N+1
|
||
2710 IF X=8 THEN 2760
|
||
2720 IF SGN(TM(X+1,Y-1))<>-S1 THEN 2760
|
||
2730 MV(N,1)=AA
|
||
2740 MV(N,2)=(X+1)*10+Y-1
|
||
2750 N=N+1
|
||
2760 RETURN
|
||
2770 REM -- RAW KNIGHT MOVE --
|
||
2780 FOR C6=1 TO 15 STEP 2
|
||
2790 KL=V(C6):KM=V(C6+1)
|
||
2800 XT=X+KL
|
||
2810 YT=Y+KM
|
||
2820 IF XT>8 OR XT<1 OR YT>8 OR YT<1 THEN 2860
|
||
2830 MV(N,1)=AA
|
||
2840 MV(N,2)=XT*10+YT
|
||
2850 N=N+1
|
||
2860 NEXT C6
|
||
2870 RETURN
|
||
2880 REM -- RAW BISHOP MOVE --
|
||
2890 EL=(8-Y)*-(8-Y<=8-X)+(8-X)*-(8-X < 8-Y)
|
||
2900 IF EL=0 THEN 2930
|
||
2910 C6=11
|
||
2920 GOSUB 3060
|
||
2930 EL=(8-Y)*-(8-Y <= X-1)+(X-1)*-(X-1 < 8-Y)
|
||
2940 IF EL=0 THEN 2970
|
||
2950 C6=-9
|
||
2960 GOSUB 3060
|
||
2970 EL=(8-X)*-(8-X <= Y-1)+(Y-1)*-(Y-1 < 8-X)
|
||
2980 IF EL=0 THEN 3010
|
||
2990 C6=9
|
||
3000 GOSUB 3060
|
||
3010 EL=(Y-1)*-(Y-1 <= X-1)+(X-1)*-(X-1 < Y-1)
|
||
3020 IF EL=0 THEN 3050
|
||
3030 C6=-11
|
||
3040 GOSUB 3060
|
||
3050 RETURN
|
||
3060 FOR E=1 TO EL
|
||
3070 F=C6*E
|
||
3080 MV(N,1)=AA
|
||
3090 MV(N,2)=AA+F
|
||
3100 N=N+1
|
||
3110 IF TM(FNL(AA+F),FNM(AA+F))<>0 THEN 3130
|
||
3120 NEXT E
|
||
3130 RETURN
|
||
3140 REM -- RAW ROOK MOVE --
|
||
3150 EL=8-Y
|
||
3160 IF EL=0 THEN 3190
|
||
3170 C6=1
|
||
3180 GOSUB 3320
|
||
3190 EL=Y-1
|
||
3200 IF EL=0 THEN 3230
|
||
3210 C6=-1
|
||
3220 GOSUB 3320
|
||
3230 EL=8-X
|
||
3240 IF EL=0 THEN 3270
|
||
3250 C6=10
|
||
3260 GOSUB 3320
|
||
3270 EL=X-1
|
||
3280 IF EL=0 THEN 3310
|
||
3290 C6=-10
|
||
3300 GOSUB 3320
|
||
3310 RETURN
|
||
3320 FOR E=1 TO EL
|
||
3330 F=C6*E
|
||
3340 MV(N,1)=AA
|
||
3350 MV(N,2)=AA+F
|
||
3360 N=N+1
|
||
3370 IF TM(FNL(AA+F),FNM(AA+F))<>0 THEN 3390
|
||
3380 NEXT E
|
||
3390 RETURN
|
||
3400 REM -- RAW QUEEN MOVE --
|
||
3410 GOSUB 2880
|
||
3420 GOSUB 3140
|
||
3430 RETURN
|
||
3440 REM -- RAW KING MOVE --
|
||
3450 IF X=8 THEN 3510
|
||
3460 C6=10:GOSUB 3620
|
||
3470 IF Y=1 THEN 3500
|
||
3480 C6=9:GOSUB 3620
|
||
3490 IF Y=8 THEN 3520
|
||
3500 C6=11:GOSUB 3620
|
||
3510 IF X=1 THEN 3570
|
||
3520 C6=-10:GOSUB 3620
|
||
3530 IF Y=8 THEN 3570
|
||
3540 C6=-9:GOSUB 3620
|
||
3550 IF Y=1 THEN 3570
|
||
3560 C6=-11:GOSUB 3620
|
||
3570 IF Y=1 THEN 3590
|
||
3580 C6=-1:GOSUB 3620
|
||
3590 IF Y=8 THEN 3610
|
||
3600 C6=1:GOSUB 3620
|
||
3610 RETURN
|
||
3620 MV(N,1)=AA
|
||
3630 MV(N,2)=AA+C6
|
||
3640 N=N+1
|
||
3650 RETURN
|
||
3660 REM
|
||
3670 RR=0
|
||
3680 GOTO 3700
|
||
3690 RR=1
|
||
3700 IF TM(X1,Y1)<>0 THEN 3720
|
||
3710 LG=0:RETURN
|
||
3720 S=SGN(TM(X1,Y1))
|
||
3730 A=X1*10+Y1
|
||
3740 B=X2*10+Y2
|
||
3750 ON ABS(TM(X1,Y1)) GOSUB 4070,4270,4340,4510,4630,4680
|
||
3760 IF LG=0 THEN RETURN
|
||
3770 IF RR=1 THEN 3790
|
||
3780 LG=1:RETURN
|
||
3790 REM -- IF RESTRICTED --
|
||
3800 IF S=SGN(TM(X2,Y2)) THEN 3710
|
||
3810 T1=X1:T2=Y1:T3=X2:T4=Y2:T=TM(X2,Y2)
|
||
3820 TM(X2,Y2)=TM(X1,Y1):TM(X1,Y1)=0
|
||
3830 SV=S
|
||
3840 REM -- FIND KING --
|
||
3850 FOR Y2=1 TO 8
|
||
3860 FOR X2=1 TO 8
|
||
3870 IF TM(X2,Y2)=6*S THEN 3910
|
||
3880 NEXT X2
|
||
3890 NEXT Y2
|
||
3900 END
|
||
3910 REM
|
||
3920 FOR Y1=1 TO 8
|
||
3930 FOR X1=1 TO 8
|
||
3940 P=TM(X1,Y1):IF SGN(P)=S OR P=0 OR ABS(P)=6 THEN 3980
|
||
3950 GOSUB 3660
|
||
3960 S=SV
|
||
3970 IF LG=1 THEN 4050
|
||
3980 NEXT X1
|
||
3990 NEXT Y1
|
||
4000 LG=1
|
||
4010 TM(T1,T2)=TM(T3,T4)
|
||
4020 TM(T3,T4)=T
|
||
4030 X1=T1:Y1=T2:X2=T3:Y2=T4
|
||
4040 RETURN
|
||
4050 LG=0
|
||
4060 GOTO 4010
|
||
4070 REM -- RAW PAWN MOVE --
|
||
4080 IF SGN(Y2-Y1)=S THEN 4110
|
||
4090 LG=0:RETURN
|
||
4100 LG=1:RETURN
|
||
4110 IF S=-1 THEN 4190
|
||
4120 IF B-A=1 OR B-A=2 THEN 4160
|
||
4130 IF TM(X2,Y2)=0 THEN 4090
|
||
4140 IF B-A=-9 OR B-A=11 THEN 4100
|
||
4150 GOTO 4090
|
||
4160 IF Y2=2 THEN 4100
|
||
4170 IF B-A=1 THEN 4100
|
||
4180 GOTO 4090
|
||
4190 IF A-B=1 OR A-B=2 THEN 4230
|
||
4200 IF TM(X2,Y2)=0 THEN 4090
|
||
4210 IF A-B=-9 OR A-B=11 THEN 4100
|
||
4220 GOTO 4090
|
||
4230 IF Y2=7 THEN 4100
|
||
4240 IF A-B=1 THEN 4100
|
||
4250 IF Y1=7 AND A-B=2 THEN 4100
|
||
4260 GOTO 4090
|
||
4270 REM -- RAW KNIGHT MOVE --
|
||
4280 FOR P=17 TO 24
|
||
4290 P1=V(P)
|
||
4300 IF A+P1<>B THEN 4320
|
||
4310 LG=1:RETURN
|
||
4320 NEXT P
|
||
4330 LG=0:RETURN
|
||
4340 REM -- RAW BISHOP MOVE --
|
||
4350 IF Y2=Y1 OR X2=X1 THEN 4420
|
||
4360 SP=-9
|
||
4370 IF X2<X1 THEN 4470
|
||
4380 IF Y1<Y2 THEN 4430
|
||
4390 SP=9
|
||
4400 P=INT(ABS(A-B)/9)
|
||
4410 IF ABS(A-B)/9=P THEN 4490
|
||
4420 LG=0:RETURN
|
||
4430 SP=11
|
||
4440 P=INT(ABS(A-B)/11)
|
||
4450 IF ABS(A-B)/11<>P THEN 4420
|
||
4460 GOTO 4490
|
||
4470 IF Y1<Y2 THEN 4400
|
||
4480 SP=-11:GOTO 4440
|
||
4490 GOSUB 4950
|
||
4500 RETURN
|
||
4510 REM -- RAW ROOK MOVES --
|
||
4520 IF Y2=Y1 THEN 4590
|
||
4530 IF X1=X2 THEN 4550
|
||
4540 LG=0:RETURN
|
||
4550 P=ABS(B-A)
|
||
4560 SP=SGN(B-A)
|
||
4570 GOSUB 4950
|
||
4580 RETURN
|
||
4590 P=ABS(INT((B-A)/10))
|
||
4600 SP=SGN(B-A)*10
|
||
4610 GOSUB 4950
|
||
4620 RETURN
|
||
4630 REM -- RAW QUEEN MOVE --
|
||
4640 GOSUB 4340
|
||
4650 IF LG=1 THEN RETURN
|
||
4660 GOSUB 4510
|
||
4670 RETURN
|
||
4680 REM -- KING MOVE --
|
||
4690 IF ABS(A-B)<>20 THEN 4890
|
||
4700 IF A-B=20 THEN 4730
|
||
4710 IF CB<>1 AND CB<>3 THEN 4880
|
||
4720 GOTO 4740
|
||
4730 IF CB=0 OR CB=1 THEN 4880
|
||
4740 PS=SGN(A-B):FORP2=28+50*((PS=-1)*-1)TOA+10-20*((PS=-1)+1)STEP10*P
|
||
4750 IF TM(FNL(P2),FNM(P2))<>0 THEN 4880
|
||
4760 NEXT P2:T1=X1:T2=Y1:T3=X2:T4=Y2
|
||
4770 FOR P2=A TO 18+70*((PS=-1)*-1) STEP 10*-PS
|
||
4780 X2=FNL(P2):Y2=FNM(P2)
|
||
4790 FOR X1=1 TO 8
|
||
4800 FOR Y1=1 TO 8
|
||
4810 IF SGN(TM(X1,Y1))<>1 THEN 4840
|
||
4820 GOSUB 3690
|
||
4830 IF LG=1 THEN 4880
|
||
4840 NEXT Y1:NEXT X1:NEXT P2
|
||
4850 LG=1
|
||
4860 X1=T1:Y1=T2:X2=T3:Y2=T4
|
||
4870 RETURN
|
||
4880 LG=0:GOTO 4860
|
||
4890 FOR P=25 TO 32
|
||
4900 P1=V(P)
|
||
4910 IF B=A+P1 THEN 4940
|
||
4920 NEXT P
|
||
4930 LG=0:RETURN
|
||
4940 LG=1:RETURN
|
||
4950 REM
|
||
4960 LG=0
|
||
4970 IF P=0 THEN STOP
|
||
4980 IF P>1 THEN 5000
|
||
4990 LG=1:RETURN
|
||
5000 FOR P1=1 TO P-1
|
||
5010 P2=A+SP*P1
|
||
5020 IF TM(FNL(P2),FNM(P2))<>0 THEN RETURN
|
||
5030 NEXT P1
|
||
5040 LG=1:RETURN
|
||
5050 END
|
||
|
||
5000 FOR P1=1 TO |