00100 REM CHESS BASIC CHSV2B COPYRIGHT 1977 KEN TORNGREN 00110 DIMC(8,8),X(2,33),Y(2,33),A(16,8),V(70),F(70),G(70),H(70),I(70) 00120 MATC=ZER 00130 FORY=1TO8 00140 READB 00150 C(1,Y)=B+1000 00160 C(2,Y)=1001 00170 C(7,Y)=1 00180 C(8,Y)=B 00190 NEXTY 00200 RESTORE 00210 DATA5,3,103,9,99,103,3,5 00220 FORA=1TO8 00230 FORB=1TO4 00240 A(A,B)=(9-A+B)/20 00250 A(A+8,B)=(A+B)/20 00260 A(A,B+4)=(14-A-B)/20 00270 A(A+8,B+4)=(5+A-B)/20 00280 NEXTB 00290 NEXTA 00300 FORA=3TO6 00310 FORB=3TO6 00320 A(A,B)=A(A,B)+.1 00330 A(A+8,B)=A(A+8,B)+.1 00340 NEXTB 00350 NEXTA 00360 FORA=4TO5 00370 FORB=4TO5 00380 A(A,B)=A(A,B)+.2 00390 A(A+8,B)=A(A+8,B)+.2 00400 NEXTB 00410 NEXTA 00420 PRINT"OPTION"; 00430 INPUTA 00440 ONAGOTO 00460, 00580, 00970, 00630, 00580, 00540, 00420, 00420, 03510 00450 GOTO 00420 00460 PRINT"1-PRINT THIS LIST" 00470 PRINT"2-OPPONENT MOVES" 00480 PRINT"3-COMPUTER MOVES" 00490 PRINT"4-PRINT BOARD" 00500 PRINT"5-MODIFY BOARD" 00510 PRINT"6-CREATE PIECE" 00520 PRINT"9-END GAME" 00530 GOTO 00420 00540 PRINT"WHAT PIECE, WHERE"; 00550 INPUTA,F,G 00560 C(F,G)=A 00570 GOTO 00420 00580 INPUTF,G,H,I 00590 C(H,I)=C(F,G) 00600 C(F,G)=0 00610 IFA=2THEN 00970 00620 GOTO 00420 00630 PRINT"-------------------------" 00640 FORX=1TO8 00650 PRINT"I"; 00660 FORY=1TO8 00670 IFC(X,Y)<>0THEN 00700 00680 PRINT" I"; 00690 GOTO 00920 00700 IFC(X,Y)<1000THEN 00740 00710 PRINT"B"; 00720 A=C(X,Y)-1000 00730 GOTO 00760 00740 A=C(X,Y) 00750 PRINT"W"; 00760 IFA<>103THEN 00790 00770 PRINT"BI"; 00780 GOTO 00920 00790 IFA<>99THEN 00820 00800 PRINT"KI"; 00810 GOTO 00920 00820 ONAGOTO 00850, 00830, 00870, 00830, 00890, 00830, 00830, 00830, 00910 00830 PRINT"?I"; 00840 GOTO 00920 00850 PRINT"PI"; 00860 GOTO 00920 00870 PRINT"NI"; 00880 GOTO 00920 00890 PRINT"RI"; 00900 GOTO 00920 00910 PRINT"QI"; 00920 NEXTY 00930 PRINT 00940 PRINT"-------------------------" 00950 NEXTX 00960 GOTO 00420 00970 Q=W=M1=M3=V=0 00980 MATV=ZER 00990 D=M=1 01000 M2=-1 01010 MATX=ZER 01020 MATY=ZER 01030 E=1 01040 P=0 01050 S1=-1000 01060 FORA=1TO8 01070 FORB=1TO8 01080 IFM=2THEN 01200 01090 IFC(A,B)=0THEN 01300 01100 IFC(A,B)>1000THEN 01170 01110 IFC(A,B)<>1ORA<>1THEN 01130 01120 C(A,B)=9 01130 X(1,E)=A 01140 Y(1,E)=B 01150 GOTO 01260 01160 GOTO 01300 01170 IFC(A,B)<>1001ORA<>8THEN 01300 01180 C(A,B)=1009 01190 GOTO 01300 01200 IFC(A,B)=0THEN 01300 01210 IFC(A,B)<1000THEN 01280 01220 IFC(A,B)<>1001ORA<>8THEN 01240 01230 C(A,B)=1009 01240 X(2,E)=A 01250 Y(2,E)=B 01260 E=E+1 01270 GOTO 01300 01280 IFC(A,B)<>1ORA<>1THEN 01300 01290 C(A,B)=9 01300 NEXTB 01310 NEXTA 01320 FORN=1TOE-1 01330 V=0 01340 G=C(X(M,N),Y(M,N)) 01350 IFG=0THEN 03070 01360 G=G-M3 01370 IFG=99THEN 01420 01380 IFG=103THEN 02680 01390 ONGGOTO 01630, 01400, 02160, 01400, 02340, 01400, 01400, 01400, 02660 01400 PRINT"111" 01410 STOP 01420 FORX=-1TO1 01430 FORY=-1TO1 01440 IFX=0ANDY=0THEN 01460 01450 GOSUB 01490 01460 NEXTY 01470 NEXTX 01480 GOTO 03070 01490 H=X(M,N)+X 01500 I=Y(M,N)+Y 01510 IFH>8ORI>8ORH<1ORI<1THEN 01620 01520 IFC(H,I)=0THEN 01600 01530 IFM=1THEN 01570 01540 IFC(H,I)<1000THEN 01600 01550 V=-.6 01560 RETURN 01570 IFC(H,I)>1000THEN 01600 01580 V=-.6 01590 RETURN 01600 V=-.6 01610 GOSUB 02430 01620 RETURN 01630 X=M2 01640 Y=-1 01650 GOSUB 01710 01660 Y=1 01670 GOSUB 01710 01680 Y=0 01690 GOSUB 01940 01700 GOTO 03070 01710 H=X(M,N)+X 01720 I=Y(M,N)+Y 01730 IFI<9ANDI>0ANDH<9ANDH>0THEN 01750 01740 RETURN 01750 IFC(H,I)<>0THEN 01770 01760 RETURN 01770 IFM=1THEN 01860 01780 IFC(H,I)<1000THEN 01810 01790 V=-.3 01800 RETURN 01810 IFH<>8THEN 01830 01820 P=8 01830 V=-.2 01840 GOSUB 02900 01850 RETURN 01860 IFC(H,I)>1000THEN 01890 01870 V=-.3 01880 RETURN 01890 IFH<>1THEN 01910 01900 P=8 01910 V=-.2 01920 GOSUB 02430 01930 RETURN 01940 H=X(M,N)+X 01950 I=Y(M,N)+Y 01960 IFC(H,I)=0THEN 01980 01970 RETURN 01980 GOSUB 02430 01990 IFM=1THEN 02080 02000 IFH=3THEN 02020 02010 RETURN 02020 H=X(2,N)+2 02030 V=-.05 02040 IFC(H,I)=0THEN 02060 02050 RETURN 02060 GOSUB 02430 02070 RETURN 02080 IFH=6THEN 02100 02090 RETURN 02100 H=X(1,N)-2 02110 V=-.05 02120 IFC(H,I)=0THEN 02140 02130 RETURN 02140 GOSUB 02430 02150 RETURN 02160 FORX=-2TO2 02170 FORY=-2TO2 02180 IFABS(X)+ABS(Y)<>3THEN 02200 02190 GOSUB 02230 02200 NEXTY 02210 NEXTX 02220 GOTO 03070 02230 H=X(M,N)+X 02240 I=Y(M,N)+Y 02250 IFH>8ORI>8ORH<1ORI<1THEN 02330 02260 IFC(H,I)=0THEN 02320 02270 IFM=1THEN 02300 02280 IFC(H,I)<1000THEN 02320 02290 RETURN 02300 IFC(H,I)>1000THEN 02320 02310 RETURN 02320 GOSUB 02900 02330 RETURN 02340 FORX=-1TO1 02350 FORY=-1TO1 02360 IFABS(X)+ABS(Y)<>1THEN 02390 02370 F=0 02380 GOSUB 02770 02390 NEXTY 02400 NEXTX 02410 IFQ=1THEN 02680 02420 GOTO 03070 02430 IFM=2THEN 02580 02440 F(D)=X(1,N) 02450 G(D)=Y(1,N) 02460 H(D)=H 02470 I(D)=I 02480 C=C(H,I) 02490 IFC<1000THEN 02530 02500 C=C-1000 02510 IFC<100THEN 02530 02520 C=C-100 02530 V(D)=C+A(H,I)-A(X(1,N),Y(1,N))+P+V 02540 P=0 02550 D=D+1 02560 V(D)=-1000 02570 RETURN 02580 C=C(H,I) 02590 IFC<100THEN 02610 02600 C=C-100 02610 S2=C+A(H+8,I)-A(X(2,N)+8,Y(2,N))+P+V 02620 P=0 02630 IFS1>S2THEN 02650 02640 S1=S2 02650 RETURN 02660 Q=1 02670 GOTO 02340 02680 Q=0 02690 FORX=-1TO1 02700 FORY=-1TO1 02710 IFX=0ORY=0THEN 02740 02720 F=0 02730 GOSUB 02770 02740 NEXTY 02750 NEXTX 02760 GOTO 03070 02770 F=F+1 02780 H=X(M,N)+X*F 02790 I=Y(M,N)+Y*F 02800 IFH>8ORI>8ORH<1ORI<1THEN 03040 02810 IFC(H,I)=0THEN 03050 02820 IF(C(H,I)<>99ORM=1)AND(C(H,I)<>1099ORM=2)THEN 02840 02830 P=.5 02840 IFM=1THEN 02870 02850 IFC(H,I)<1000THEN 02890 02860 RETURN 02870 IFC(H,I)>1000THEN 02890 02880 RETURN 02890 V=-.1 02900 IFM=1THEN 02990 02910 IFH+1>8THEN 02990 02920 IFI-1<1THEN 03010 02930 IFC(H+1,I-1)<>1THEN 02990 02940 IFG=103THEN 02980 02950 V=-G 02960 GOSUB 02430 02970 RETURN 02980 V=100-G 02990 GOSUB 02430 03000 RETURN 03010 IFI+1>8THEN 02990 03020 IFC(H+1,I+1)<>1THEN 02990 03030 GOTO 02970 03040 RETURN 03050 GOSUB 02430 03060 GOTO 02770 03070 NEXTN 03080 M=2 03090 M1=8 03100 M2=1 03110 M3=1000 03120 IFW=0THEN 03180 03130 V(W)=V(W)-S1 03140 S1=-1000 03150 IFV(W+1)=-1000THEN 03240 03160 C(F(W),G(W))=U 03170 C(H(W),I(W))=U1 03180 W=W+1 03190 U=C(F(W),G(W)) 03200 U1=C(H(W),I(W)) 03210 C(H(W),I(W))=C(F(W),G(W)) 03220 C(F(W),G(W))=0 03230 GOTO 01010 03240 C(F(W),G(W))=U 03250 C(H(W),I(W))=U1 03260 J=1 03270 FORK=1TO99 03280 IFV(K)=-1000THEN 03330 03290 IFV(K)>V(J)THEN 03310 03300 GOTO 03320 03310 J=K 03320 NEXTK 03330 IFC(F(J),G(J))<>5ORF(J)<>8ORG(J)<>8ORH(J)<>8THEN 03380 03340 IFI(J)<>6ORC(8,5)<>99THEN 03380 03350 C(8,7)=99 03360 C(8,5)=0 03370 PRINT"O-O" 03380 IFV(J)>-30THEN 03440 03390 PRINT"OK, YOU WIN. REMATCH"; 03400 INPUTX 03410 IFX=0GOTO 03510 03420 IFX=1THEN 00420 03430 GOTO 00120 03440 IFV(J)<30THEN 03470 03450 PRINT"I WIN AGAIN! REMATCH TURKEY"; 03460 GOTO 03400 03470 PRINT"*";F(J);G(J);H(J);I(J);"*" 03480 C(H(J),I(J))=C(F(J),G(J)) 03490 C(F(J),G(J))=0 03500 GOTO 00420 03510 END  8