10 'Chess Mike Weiblen [72506,2072] 060385 20 DEFINTA-Z:DEFSNGF:DIMA(7,7),U(1,6) 30 P0$=CHR$(255)+"P NB R QK":R0$=CHR$(27)+"p":N0$=CHR$(27)+"q":C0$=CHR$(27)+"K":X$="74500547":U=-1 40 CLS:PRINT"Model 100 Chess":PRINT:PRINT"Do you want to be white (Y/N)";:C$=INPUT$(1) 50 IFC$>"Y"THENC$=CHR$(ASC(C$)-32) 60 IFC$<>"Y"ANDC$<>"N"THEN40 70 FORX=0TO7:A(X,0)=VAL(MID$(X$,X+1,1)):A(X,7)=-A(X,0):A(X,1)=2:A(X,6)=-2:NEXT 90 IFC$="Y"THENA(3,0)=9:A(4,0)=99:A(3,7)=-9:A(4,7)=-99:I=1:GOSUB5000:GOTO1500 92 A(3,0)=99:A(4,0)=9:A(3,7)=-99:A(4,7)=-9:I=-1:GOSUB5000:GOTO1000 500 U=U+1:U(U,0)=S:U(U,1)=X:U(U,2)=Y:U(U,3)=A:U(U,4)=B:U(U,5)=Q0:U(U,6)=A(A,B):A(A,B)=A(X,Y):A(X,Y)=0:RETURN 600 S=U(U,0):X=U(U,1):Y=U(U,2):A=U(U,3):B=U(U,4):Q0=U(U,5):A(X,Y)=A(A,B):A(A,B)=U(U,6):U=U-1:RETURN 700 Z=0:Y=Y+1:IFY>7THENY=0:X=X+1:IFX>7THENZ=1 710 RETURN 1000 'Computer Move 1030 F=-99:Q0=5:X=0:Y=0 1040 PRINT@102,"Thinking "CHR$(X+65)CHR$(Y+49);C0$;:IFA(X,Y)<0THENGOSUB2000 1050 IFA(X,Y)=99THENX8=X:Y8=Y 1060 GOSUB700:IFZ=0THEN1040 1080 IFF<-9THENPRINT@102,"I Concede"C0$;:GOTO9000 1090 A(A0,B0)=A(X0,Y0):A(X0,Y0)=0:IFA(A0,B0)=-2ANDB0=0THENA(A0,B0)=-9 1095 PRINT@102,"My move: "CHR$(X0+65)CHR$(Y0+49)CHR$(A0+65)CHR$(B0+49);:X=X0:Y=Y0:GOSUB5500:X=A0:Y=B0:GOSUB5500 1100 V0=0:X=A0:Y=B0:Q0=1:GOSUB2000:IFV0>0THENPRINT@116,"Chk"; 1500 'Player Move 1510 PRINT@182,"Your move"C0$;:INPUTX$ 1512 IFX$="P"THEN1000 1514 IFX$="K"THEN1710 1516 IFX$="Q"THEN1730 1518 IFLEN(X$)<>4THEN1590 1520 X=ASC(LEFT$(X$,1))-65:Y=ASC(MID$(X$,2,1))-49:A=ASC(MID$(X$,3,1))-65:B=ASC(RIGHT$(X$,1))-49:P9=0 1522 IFX<0ORY<0ORA<0ORB<0ORA>7ORB>7THEN1590 1523 IFX>7ORY>7THEN1600 1525 IFA(X,Y)<=0THEN1590 1527 IFA(X,Y)=2ANDA(A,B)=0ANDY=4ANDB=5ANDABS(X-A)=1THENP9=1:GOTO1530 1528 D=0:A0=A:B0=B:Q0=3:GOSUB2000:IFD=0THEN1590 1530 A=A0:B=B0:A(A,B)=A(X,Y):A(X,Y)=0:IFA(A,B)=2ANDB=7THENA(A,B)=9 1540 GOSUB5500:X=A:Y=B:GOSUB5500:IFP9=1THENY=B-1:A(X,Y)=0:GOSUB5500 1550 GOTO1000 1590 PRINT@182,"Invalid"C0$;:BEEP:GOTO1500 1599 'Edit Board 1600 X=A:Y=B:IFLEFT$(X$,1)="E"THENZ=0:GOTO1690 1610 IFLEFT$(X$,1)<>"C"ANDLEFT$(X$,1)<>"P"THEN1590 1620 Z=INSTR(P0$,MID$(X$,2,1)):IFZ<2ORZ=3THEN1590 1630 IFZ=10THENZ=99 1640 IFLEFT$(X$,1)="C"THENZ=-Z 1690 A(X,Y)=Z:GOSUB5500:GOTO1500 1700 'Castling 1710 IFA(4,0)=99ANDA(7,0)=7THENA(4,0)=0:A(7,0)=0:A(6,0)=99:A(5,0)=7:GOTO1747 1720 IFA(3,0)=99ANDA(0,0)=7THENA(3,0)=0,A(0,0)=0,A(1,0)=99,A(2,0)=7:GOTO1747 1725 GOTO1590 1730 IFA(4,0)=99ANDA(0,0)=7THENA(4,0)=0:A(0,0)=0:A(2,0)=99:A(3,0)=7:GOTO1747 1740 IFA(3,0)=99ANDA(7,0)=7THENA(3,0)=0:A(7,0)=0:A(5,0)=99:A(4,0)=7:GOTO1747 1745 GOTO1590 1747 GOSUB5000:GOTO1000 2000 'Scan Piece's Moves 2010 PRINT @113,"*";:IFABS(A(X,Y))=99THEN2100 2020 ONABS(A(X,Y))-1GOTO2500,0,2400,2300,0,2200,0,2200 2100 'King 2110 A=X-2 2120 B=Y-2:A=A+1 2130 B=B+1:GOSUB3200:IFB5ANDS=0THENB=B-1:GOSUB3000 2620 B=Y-1 2630 A=X+1:GOSUB3100:A=A-2:GOTO3100 2640 'Move Range Check 3000 S=0:IFA(A,B)THENS=1:RETURN 3020 GOTO4000 3100 IFA<0ORA>7THENRETURN 3110 IFA(A,B)=0ORSGN(A(A,B))=SGN(A(X,Y))THENRETURN 3120 GOTO4000 3200 S=0:IFA<0ORA>7ORB<0ORB>7THENS=1:RETURN 3210 IFA(A,B)THENS=1 3220 IFSGN(A(A,B))=SGN(A(X,Y))THENRETURN 4000 'Reason for Scan 4010 PRINT @113," ";:ONQ0GOTO4100,4200,4300,4500,4600 4100 'Player's King Threatened? 4110 IFA(A,B)=99THENV0=V0+1 4120 RETURN 4200 'Comp Piece Protected? 4210 IFU(U,3)=AANDU(U,4)=BTHENP=0 4220 RETURN 4300 'Player Move Valid? 4310 IFA0=AANDB0=BTHEND=1 4320 RETURN 4500 'Comp Piece Threatened? 4510 IFA(A,B)>=0THENRETURN 4520 P=A(A,B):IFABS(P)>A(X,Y)THEN4580 4530 GOSUB500:Q0=2:X=0:Y=0 4550 IFA(X,Y)<0THENGOSUB2000:IFP=0THEN4570 4560 GOSUB700:IFZ=0THEN4550 4570 GOSUB600 4580 IFP0THENGOSUB2000 4640 GOSUB700:IFZ=0THEN4630 4650 X=U(U,3):Y=U(U,4):Q0=1:GOSUB2000:GOSUB600 4660 F9=1/(ABS(3.5-A)+ABS(3.5-B)+1)+RND(1)/15:IFA(X,Y)=>-9ANDA(X,Y)<=-2THENF9=F9+1/(ABS(X8-A)+ABS(Y8-B)+5) 4670 F9=F9+A(A,B)+V0:IFF9>FTHENF=F9:X0=X:Y0=Y:A0=A:B0=B 4680 RETURN 5000 CLS:FORY=7TO0STEP-1:PRINT@40*(7-Y),Y+1;:FORX=0TO7:GOSUB5500:NEXTX:NEXTY:RETURN 5500 'Display piece 5520 PRINT@40*(7-Y)+X*2+4,"";:G6=A(X,Y):IFG6*I>0THENPRINTR0$; 5530 IFG6=0THENG6=3:IFINT((X+Y)/2)=(X+Y)/2THENG6=1 5540 IFABS(G6)=99THENG6=10 5570 PRINTMID$(P0$,ABS(G6),1);N0$;:RETURN 9000 BEEP:PRINT@262,"Hit any key";:X$=INPUT$(1):MENU