10 CLS:MEMSET&HB00:WIDTH20,16:DEFINTA-Z:DIMC(64):I=1
20 CLOCK=600*VAL(LEFT$(TIME$,2))+60*VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))
30 RANDOMIZECLOCK
40 RESTORE1160:POKE&H11E,&HA:POKE&H11F,&H40
50 FORADDRESS=&HA40 TO&HA8D:READMATRIX$:MATRIX=VAL("&H"+MATRIX$):POKEADDRESS,MATRIX:NEXTADDRESS
60 INPUT"LEVEL";B8!:B7!=(B8!+1+RND)/2
70 GOSUB750:GOSUB840:GOTO170
80 GOSUB830
90 F!=-99:A0=0:FORJ=1TO8:FORK=1TO8:IFA(J,K)=99THENA6=J:A7=K
100 NEXT:NEXT
110 FORX=1TO8:FORY=1TO8:IFA(X,Y)<0THENGOSUB240:IFF!>=B7!THENGOTO140
120 NEXT:NEXT:IFF!>=-9THENGOTO140ELSEGOSUB840
130 LOCATE16,3:PRINT"  ";:END
140 A(R,U)=A(E,Q):A(E,Q)=1:IFA(R,U)=-2ANDU=1THENA(R,U)=-9
150 X=R:Y=U:A0=4:GOSUB240:LOCATE16,1:PRINTCHR$(E+64);STR$(Q):LOCATE16,2:PRINTCHR$(R+64);STR$(U);
160 X=E:Y=Q:GOSUB850:X=R:Y=U:GOSUB850:IFC=1THENLOCATE16,3:PRINT" ";:C=0
170 LOCATE16,0:PRINTCHR$(144);:SOUND10,10:GOSUB940:D=0:B4=A:B9=B:B5=0:IFA(X,Y)=2ANDY=5ANDB=6ANDA(A,B)=1ANDABS(A-X)=1THENB5=1:GOTO200
180 IFX$="K"ORX$="Q"THENGOSUB840:GOTO90
190 A0=3:GOSUB230:IFD=0THENLOCATE16,3:PRINT"  ";:GOTO170
200 LOCATE16,0:PRINTCHR$(143);:LOCATE16,3:PRINT"   ";:A=B4:B=B9:A(A,B)=A(X,Y):A(X,Y)=1:GOSUB850:X=A:Y=B:GOSUB850
210 IFA(A,B)=2ANDB=8THENLOCATE16,3:PRINT"  ";:A(A,B)=9:X=A:Y=B:GOSUB850
220 IFB5=1THENA(A,B-1)=1:X=A:Y=B-1:GOSUB850:GOTO90ELSEGOTO90
230 ONA(X,Y)GOTO10,440,10,340,290,10,250,10,290:GOTO420
240 ON-A(X,Y)GOTO10,490,10,340,290,10,250,10,290:GOTO420
250 B=Y:FORA=X+1TO8:GOSUB600:IFS=0THENNEXT
260 FORA=X-1TO1STEP-1:GOSUB600:IFS=0THENNEXT
270 A=X:FORB=Y+1TO8:GOSUB600:IFS=0THENNEXT
280 FORB=Y-1TO1STEP-1:GOSUB600:IFS=0THENNEXT:RETURNELSERETURN
290 B=Y:FORA=X+1TO8:B=B+1:GOSUB600:IFS=0THENNEXT
300 B=Y:FORA=X-1TO1STEP-1:B=B-1:GOSUB600:IFS=0THENNEXT
310 B=Y:FORA=X-1TO1STEP-1:B=B+1:GOSUB600:IFS=0THENNEXT
320 B=Y:FORA=X+1TO8:B=B-1:GOSUB600:IFS=0THENNEXT
330 IFABS(A(X,Y))=9THENGOTO250ELSERETURN
340 A=X+2:B=Y+1:IFA<9ANDB<9THENGOSUB610
350 B=B-2:IFB>0ANDA<9THENGOSUB610
360 A=A-4:IFA>0ANDB>0THENGOSUB610
370 B=B+2:IFB<9ANDA>0THENGOSUB610
380 A=A+1:B=B+1:IFA>0ANDA<9ANDB<9THENGOSUB610
390 B=B-4:IFB>0ANDA>0ANDA<9THENGOSUB610
400 A=A+2:IFA>0ANDA<9ANDB>0THENGOSUB610
410 B=B+4:IFB<9ANDA>0ANDA<9THENGOSUB610:RETURNELSERETURN
420 FORA=X-1TOX+1:FORB=Y-1TOY+1:IFA(A,B)<>0THENGOSUB610
430 NEXT:NEXT:RETURN
440 A=X:IFY>2THENGOTO460
450 B=Y+1:IFA(A,B)=1THENGOSUB620:B=B+1:IFA(A,B)=1THENGOSUB620:GOTO470ELSEGOTO470ELSEGOTO470
460 B=Y+1:IFA(A,B)=1THENGOSUB620
470 A=X+1:B=Y+1:IFA(A,B)<0THENGOSUB620
480 A=A-2:IFA(A,B)<0THENGOSUB620:RETURNELSERETURN
490 A=X:IFY<7THENGOTO510
500 B=Y-1:IFA(A,B)=1THENGOSUB620:B=B-1:IFA(A,B)=1THENGOSUB620:GOTO520ELSEGOTO520ELSEGOTO520
510 B=Y-1:IFA(A,B)=1THENGOSUB620
520 A=X-1:B=Y-1:IFA(A,B)>1THENGOSUB620
530 A=A+2:IFA(A,B)>1THENGOSUB620:RETURNELSEGOTO550
540 T=A(A,B):IFT=-99THENB1=T:RETURNELSEGOTO550
550 A5=S:IFABS(T)<=A(X,Y)THENA(A,B)=A(X,Y):A(X,Y)=1:GOTO570
560 IFT<B1 THENB1=T:S=A5:RETURNELSES=A5:RETURN
570 A1=X:A2=Y:A3=A:A4=B:A8=T:A0=2:FORX=1TO8:FORY=1TO8:IFA(X,Y)<0THENGOSUB240:IFT=0THENGOTO590
580 NEXT:NEXT
590 X=A1:Y=A2:A=A3:B=A4:A0=5:A(X,Y)=A(A,B):A(A,B)=A8:GOTO560
600 S=0:IFA(A,B)=1THENGOTO620ELSEIFA(A,B)=0THENS=1:RETURNELSEIFSGN(A(A,B))=SGN(A(X,Y))THENS=1:RETURNELSES=1:GOTO620
610 IFA(A,B)=1THENGOTO620ELSEIFSGN(A(A,B))=SGN(A(X,Y))THENRETURNELSEGOTO620
620 ONA0 GOTO630,640,650,660,670:GOTO680
630 IFA6=A ANDA7=B THENB1=B1+1:RETURNELSERETURN
640 IFA3=A ANDA4=B THENT=0:RETURNELSERETURN
650 IFB4=A ANDB9=B THEND=1:RETURNELSERETURN
660 IFA6=A ANDA7=B THENC=1:RETURNELSERETURN
670 IFA(A,B)<0THENGOTO540ELSERETURN
680 B3=S:W=X:M=Y:N=A:H=B:P=A(A,B):A(A,B)=A(X,Y):A(X,Y)=1:B1=0
690 A0=5:FORX=1TO8:FORY=1TO8:IFA(X,Y)>1THENGOSUB230
700 NEXT:NEXT:X=N:Y=H:A0=1:GOSUB240:A0=0:S=B3:X=W:Y=M:A=N:B=H:A(X,Y)=A(A,B):A(A,B)=P
710 B6!=1/(ABS(4.5-A)+ABS(4.5-B)+1):IFA(X,Y)<-2ANDA(X,Y)>-9THENB6!=B6!+1/(ABS(A6-A)+ABS(A7-B)+5)+RND(0)/15
720 G!=P+B1+B6!:IFP=99THENGOSUB840:LOCATE16,3:PRINT"";:END
730 IFG!<=F!THENRETURN
740 F!=G!:E=X:Q=Y:R=A:U=B:RETURN
750 CLS
760 Y=0:FORJ=896TO0STEP-128:Y=Y+1:X=0:FORK=J TO42+J STEP6:X=X+1:T(X,Y)=K:NEXT:NEXT
770 Y=0:FORJ=960TO64STEP-128:Y=Y+1:X=0:FORK=J TO42+J STEP6:X=X+1:B(X,Y)=K:NEXT:NEXT
780 DATA-7,-4,-5,-9,-99,-5,-4,-7,-2,-2,-2,-2,-2,-2,-2,-2
790 DATA1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
800 DATA2,2,2,2,2,2,2,2,7,4,5,9,99,5,4,7
810 FORY=8TO1STEP-1:FORX=1TO7STEP2:S(X,Y)=I:S(X+1,Y)=-I:NEXT:I=-I:NEXT
820 RESTORE780:FORY=8TO1STEP-1:FORX=1TO8:READA(X,Y):NEXT:NEXT:RETURN
830 I=-I:A(4,1)=99:A(5,1)=9:A(4,8)=-99:A(5,8)=-9
840 FORY=1TO8:FORX=1TO8:GOSUB850:NEXT:NEXT:RETURN
850 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
860 ONABS(A(X,Y))GOSUB870,880,10,890,900,10,910,10,920:LINE(47,0)-(47,31),PSET:LINE(95,0)-(95,31),PSET:IFABS(A(X,Y))=99THENGOSUB930:RETURNELSERETURN
870 IFS(X,Y)>0THENPRINTCHR$(32);:RETURNELSEPRINTCHR$(140);:RETURN
880 IFI*A(X,Y)>0THENPRINT"";:RETURNELSEPRINT"";:RETURN
890 IFI*A(X,Y)>0THENPRINT"";:RETURNELSEPRINT"";:RETURN
900 IFI*A(X,Y)>0THENPRINT"";:RETURNELSEPRINT"";:RETURN
910 IFI*A(X,Y)>0THENPRINT"";:RETURNELSEPRINT"";:RETURN
920 IFI*A(X,Y)>0THENPRINT"";:RETURNELSEPRINT"";:RETURN
930 IFI*A(X,Y)>0THENPRINT"";:RETURNELSEPRINT"";:RETURN
940 X$=INKEY$
950 IFX$>="A"ANDX$<="H"THENX=VAL(CHR$(ASC(X$)-16)):GOTO1010
960 IFX$="K"ANDA(5,1)=99ANDA(8,1)=7ANDA(6,1)=1ANDA(7,1)=1THENA(5,1)=1:A(8,1)=1:A(7,1)=99:A(6,1)=7:GOTO1080
970 IFX$="Q"ANDA(5,1)=99ANDA(1,1)=7ANDA(2,1)=1ANDA(3,1)=1ANDA(4,1)=1THENA(5,1)=1:A(1,1)=1:A(3,1)=99:A(4,1)=7:GOTO1080
980 IFX$="K"ANDA(4,1)=99ANDA(1,1)=7ANDA(2,1)=1ANDA(3,1)=1THENA(4,1)=1:A(1,1)=1:A(2,1)=99:A(3,1)=7:GOTO1080
990 IFX$="Q"ANDA(4,1)=99ANDA(8,1)=7ANDA(5,1)=1ANDA(6,1)=1ANDA(7,1)=1THENA(4,1)=1:A(8,1)=1:A(6,1)=99:A(5,1)=7:GOTO1080
1000 GOTO940
1010 LOCATE16,1:PRINTX$;"  ";
1020 Y=VAL(INKEY$):IFY=0THENGOTO1020
1030 LOCATE17,1:PRINTSTR$(Y);
1040 IFA(X,Y)<2ORA(X,Y)>99THENLOCATE16,3:PRINT"  ";:GOTO940
1050 A$=INKEY$:IFA$<"A"ORA$>"H"THENGOTO1050ELSEA=VAL(CHR$(ASC(A$)-16))
1060 LOCATE16,2:PRINTA$+"  ";
1070 B=VAL(INKEY$):IFB=0THENGOTO1070ELSELOCATE17,2:PRINTSTR$(B);
1080 IFX$="K"ORX$="Q"THENLOCATE16,1:PRINTX$+"  ";:LOCATE16,2:PRINT"O-O";:RETURNELSERETURN
1090 GOTO90
1100 I=-1:GOSUB1110:GOSUB840:RETURN
1110 L=0:FORJ=1TO8:FORK=1TO8:L=L+1:IFA(J,K)<>1THENC(L)=-A(J,K)ELSEC(L)=A(J,K)
1120 NEXT:NEXT
1130 L=65:FORJ=1TO8:FORK=1TO8:L=L-1:A(J,K)=C(L):NEXT:NEXT
1140 RETURN
1150 END
1160 DATA 56,25,2F,25,56,00
1170 DATA 70,4A,47,4A,70,00,71,4A,45,4A,71,00,67,5A,41,5A,67,00
1180 DATA 6C,52,41,52,6C,00,5E,61,56,6A,4C,00,00,4E,72,4E,00,00
1190 DATA 70,7A,7F,7A,70,00,71,7A,7D,7A,71,00,67,7E,7F,7E,67,00
1200 DATA 6C,7E,7F,7E,6C,00,5E,7F,7A,6E,4C,00,00,4E,7E,4E,00,00
