100 REM CHESS BASIC CHSV2B COPYRIGHT 1977 KEN TORNGREN 110 DIMC(8,8),X(2,33),Y(2,33),A(16,8),V(70),F(70),G(70),H(70),I(70) 120 MATC=ZER 130 FORY=1TO8 140 READB 150 C(1,Y)=B+1000 160 C(2,Y)=1001 170 C(7,Y)=1 180 C(8,Y)=B 190 NEXTY 200 RESTORE 210 DATA5,3,103,9,99,103,3,5 220 FORA=1TO8 230 FORB=1TO4 240 A(A,B)=(9-A+B)/20 250 A(A+8,B)=(A+B)/20 260 A(A,B+4)=(14-A-B)/20 270 A(A+8,B+4)=(5+A-B)/20 280 NEXTB 290 NEXTA 300 FORA=3TO6 310 FORB=3TO6 320 A(A,B)=A(A,B)+.1 330 A(A+8,B)=A(A+8,B)+.1 340 NEXTB 350 NEXTA 360 FORA=4TO5 370 FORB=4TO5 380 A(A,B)=A(A,B)+.2 390 A(A+8,B)=A(A+8,B)+.2 400 NEXTB 410 NEXTA 420 PRINT"OPTION"; 430 INPUTA 440 ONAGOTO 460, 580, 970, 630, 580, 540, 420, 420, 3510 450 GOTO 420 460 PRINT"1-PRINT THIS LIST" 470 PRINT"2-OPPONENT MOVES" 480 PRINT"3-COMPUTER MOVES" 490 PRINT"4-PRINT BOARD" 500 PRINT"5-MODIFY BOARD" 510 PRINT"6-CREATE PIECE" 520 PRINT"9-END GAME" 530 GOTO 420 540 PRINT"WHAT PIECE, WHERE"; 550 INPUTA,F,G 560 C(F,G)=A 570 GOTO 420 580 INPUTF,G,H,I 590 C(H,I)=C(F,G) 600 C(F,G)=0 610 IFA=2THEN 970 620 GOTO 420 630 PRINT"-------------------------" 640 FORX=1TO8 650 PRINT"I"; 660 FORY=1TO8 670 IFC(X,Y)<>0THEN 700 680 PRINT" I"; 690 GOTO 920 700 IFC(X,Y)<1000THEN 740 710 PRINT"B"; 720 A=C(X,Y)-1000 730 GOTO 760 740 A=C(X,Y) 750 PRINT"W"; 760 IFA<>103THEN 790 770 PRINT"BI"; 780 GOTO 920 790 IFA<>99THEN 820 800 PRINT"KI"; 810 GOTO 920 820 ONAGOTO 850, 830, 870, 830, 890, 830, 830, 830, 910 830 PRINT"?I"; 840 GOTO 920 850 PRINT"PI"; 860 GOTO 920 870 PRINT"NI"; 880 GOTO 920 890 PRINT"RI"; 900 GOTO 920 910 PRINT"QI"; 920 NEXTY 930 PRINT 940 PRINT"-------------------------" 950 NEXTX 960 GOTO 420 970 Q=W=M1=M3=V=0 980 MATV=ZER 990 D=M=1 1000 M2=-1 1010 MATX=ZER 1020 MATY=ZER 1030 E=1 1040 P=0 1050 S1=-1000 1060 FORA=1TO8 1070 FORB=1TO8 1080 IFM=2THEN 1200 1090 IFC(A,B)=0THEN 1300 1100 IFC(A,B)>1000THEN 1170 1110 IFC(A,B)<>1ORA<>1THEN 1130 1120 C(A,B)=9 1130 X(1,E)=A 1140 Y(1,E)=B 1150 GOTO 1260 1160 GOTO 1300 1170 IFC(A,B)<>1001ORA<>8THEN 1300 1180 C(A,B)=1009 1190 GOTO 1300 1200 IFC(A,B)=0THEN 1300 1210 IFC(A,B)<1000THEN 1280 1220 IFC(A,B)<>1001ORA<>8THEN 1240 1230 C(A,B)=1009 1240 X(2,E)=A 1250 Y(2,E)=B 1260 E=E+1 1270 GOTO 1300 1280 IFC(A,B)<>1ORA<>1THEN 1300 1290 C(A,B)=9 1300 NEXTB 1310 NEXTA 1320 FORN=1TOE-1 1330 V=0 1340 G=C(X(M,N),Y(M,N)) 1350 IFG=0THEN 3070 1360 G=G-M3 1370 IFG=99THEN 1420 1380 IFG=103THEN 2680 1390 ONGGOTO 1630, 1400, 2160, 1400, 2340, 1400, 1400, 1400, 2660 1400 PRINT"111" 1410 STOP 1420 FORX=-1TO1 1430 FORY=-1TO1 1440 IFX=0ANDY=0THEN 1460 1450 GOSUB 1490 1460 NEXTY 1470 NEXTX 1480 GOTO 3070 1490 H=X(M,N)+X 1500 I=Y(M,N)+Y 1510 IFH>8ORI>8ORH<1ORI<1THEN 1620 1520 IFC(H,I)=0THEN 1600 1530 IFM=1THEN 1570 1540 IFC(H,I)<1000THEN 1600 1550 V=-.6 1560 RETURN 1570 IFC(H,I)>1000THEN 1600 1580 V=-.6 1590 RETURN 1600 V=-.6 1610 GOSUB 2430 1620 RETURN 1630 X=M2 1640 Y=-1 1650 GOSUB 1710 1660 Y=1 1670 GOSUB 1710 1680 Y=0 1690 GOSUB 1940 1700 GOTO 3070 1710 H=X(M,N)+X 1720 I=Y(M,N)+Y 1730 IFI<9ANDI>0ANDH<9ANDH>0THEN 1750 1740 RETURN 1750 IFC(H,I)<>0THEN 1770 1760 RETURN 1770 IFM=1THEN 1860 1780 IFC(H,I)<1000THEN 1810 1790 V=-.3 1800 RETURN 1810 IFH<>8THEN 1830 1820 P=8 1830 V=-.2 1840 GOSUB 2900 1850 RETURN 1860 IFC(H,I)>1000THEN 1890 1870 V=-.3 1880 RETURN 1890 IFH<>1THEN 1910 1900 P=8 1910 V=-.2 1920 GOSUB 2430 1930 RETURN 1940 H=X(M,N)+X 1950 I=Y(M,N)+Y 1960 IFC(H,I)=0THEN 1980 1970 RETURN 1980 GOSUB 2430 1990 IFM=1THEN 2080 2000 IFH=3THEN 2020 2010 RETURN 2020 H=X(2,N)+2 2030 V=-.5 2040 IFC(H,I)=0THEN 2060 2050 RETURN 2060 GOSUB 2430 2070 RETURN 2080 IFH=6THEN 2100 2090 RETURN 2100 H=X(1,N)-2 2110 V=-.5 2120 IFC(H,I)=0THEN 2140 2130 RETURN 2140 GOSUB 2430 2150 RETURN 2160 FORX=-2TO2 2170 FORY=-2TO2 2180 IFABS(X)+ABS(Y)<>3THEN 2200 2190 GOSUB 2230 2200 NEXTY 2210 NEXTX 2220 GOTO 3070 2230 H=X(M,N)+X 2240 I=Y(M,N)+Y 2250 IFH>8ORI>8ORH<1ORI<1THEN 2330 2260 IFC(H,I)=0THEN 2320 2270 IFM=1THEN 2300 2280 IFC(H,I)<1000THEN 2320 2290 RETURN 2300 IFC(H,I)>1000THEN 2320 2310 RETURN 2320 GOSUB 2900 2330 RETURN 2340 FORX=-1TO1 2350 FORY=-1TO1 2360 IFABS(X)+ABS(Y)<>1THEN 2390 2370 F=0 2380 GOSUB 2770 2390 NEXTY 2400 NEXTX 2410 IFQ=1THEN 2680 2420 GOTO 3070 2430 IFM=2THEN 2580 2440 F(D)=X(1,N) 2450 G(D)=Y(1,N) 2460 H(D)=H 2470 I(D)=I 2480 C=C(H,I) 2490 IFC<1000THEN 2530 2500 C=C-1000 2510 IFC<100THEN 2530 2520 C=C-100 2530 V(D)=C+A(H,I)-A(X(1,N),Y(1,N))+P+V 2540 P=0 2550 D=D+1 2560 V(D)=-1000 2570 RETURN 2580 C=C(H,I) 2590 IFC<100THEN 2610 2600 C=C-100 2610 S2=C+A(H+8,I)-A(X(2,N)+8,Y(2,N))+P+V 2620 P=0 2630 IFS1>S2THEN 2650 2640 S1=S2 2650 RETURN 2660 Q=1 2670 GOTO 2340 2680 Q=0 2690 FORX=-1TO1 2700 FORY=-1TO1 2710 IFX=0ORY=0THEN 2740 2720 F=0 2730 GOSUB 2770 2740 NEXTY 2750 NEXTX 2760 GOTO 3070 2770 F=F+1 2780 H=X(M,N)+X*F 2790 I=Y(M,N)+Y*F 2800 IFH>8ORI>8ORH<1ORI<1THEN 3040 2810 IFC(H,I)=0THEN 3050 2820 IF(C(H,I)<>99ORM=1)AND(C(H,I)<>1099ORM=2)THEN 2840 2830 P=.5 2840 IFM=1THEN 2870 2850 IFC(H,I)<1000THEN 2890 2860 RETURN 2870 IFC(H,I)>1000THEN 2890 2880 RETURN 2890 V=-.1 2900 IFM=1THEN 2990 2910 IFH+1>8THEN 2990 2920 IFI-1<1THEN 3010 2930 IFC(H+1,I-1)<>1THEN 2990 2940 IFG=103THEN 2980 2950 V=-G 2960 GOSUB 2430 2970 RETURN 2980 V=100-G 2990 GOSUB 2430 3000 RETURN 3010 IFI+1>8THEN 2990 3020 IFC(H+1,I+1)<>1THEN 2990 3030 GOTO 2970 3040 RETURN 3050 GOSUB 2430 3060 GOTO 2770 3070 NEXTN 3080 M=2 3090 M1=8 3100 M2=1 3110 M3=1000 3120 IFW=0THEN 3180 3130 V(W)=V(W)-S1 3140 S1=-1000 3150 IFV(W+1)=-1000THEN 3240 3160 C(F(W),G(W))=U 3170 C(H(W),I(W))=U1 3180 W=W+1 3190 U=C(F(W),G(W)) 3200 U1=C(H(W),I(W)) 3210 C(H(W),I(W))=C(F(W),G(W)) 3220 C(F(W),G(W))=0 3230 GOTO 1010 3240 C(F(W),G(W))=U 3250 C(H(W),I(W))=U1 3260 J=1 3270 FORK=1TO99 3280 IFV(K)=-1000THEN 3330 3290 IFV(K)>V(J)THEN 3310 3300 GOTO 3320 3310 J=K 3320 NEXTK 3330 IFC(F(J),G(J))<>5ORF(J)<>8ORG(J)<>8ORH(J)<>8THEN 3380 3340 IFI(J)<>6ORC(8,5)<>99THEN 3380 3350 C(8,7)=99 3360 C(8,5)=0 3370 PRINT"O-O" 3380 IFV(J)>-30THEN 3440 3390 PRINT"OK, YOU WIN. REMATCH"; 3400 INPUTX 3410 IFX=0GOTO 3510 3420 IFX=1THEN 420 3430 GOTO 120 3440 IFV(J)<30THEN 3470 3450 PRINT"I WIN AGAIN! REMATCH TURKEY"; 3460 GOTO 3400 3470 PRINT"*";F(J);G(J);H(J);I(J);"*" 3480 C(H(J),I(J))=C(F(J),G(J)) 3490 C(F(J),G(J))=0 3500 GOTO 420 3510 END C