10 CLS:MEMSET&HB00:CLEAR:WIDTH20,16:SCROLL9,0
20 DEFINTA-Z:DIMC(64)
30 I=1:CL$="N"
40 CLOCK=600*VAL(LEFT$(TIME$,2))+60*VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))
50 RANDOMIZECLOCK
60 RESTORE1930:POKE&H11E,&HA:POKE&H11F,&H40
70 FORADDRESS=&HA40 TO&HA8D:READMATRIX$:MATRIX=VAL("&H"+MATRIX$):POKEADDRESS,MATRIX:NEXTADDRESS
80 INPUT"LEVEL";B8!:B7!=(B8!+1+RND)/2
90 GOSUB770:GOSUB880:GOTO190
100 GOSUB870
110 F!=-99:A0=0:FORJ=1TO8:FORK=1TO8:IFA(J,K)=99THENA6=J:A7=K
120 NEXT:NEXT
130 FORX=1TO8:FORY=1TO8:IFA(X,Y)<0THENGOSUB260:IFF!>=B7!THENGOTO160
140 NEXT:NEXT:IFF!>=-9THENGOTO160ELSEGOSUB880
150 LOCATE16,0:PRINT"";:GOTO1850
160 A(R,U)=A(E,Q):A(E,Q)=1:IFA(R,U)=-2ANDU=1THENA(R,U)=-9
170 X=R:Y=U:A0=4:GOSUB260:LOCATE16,1:PRINTCHR$(E+64);STR$(Q):LOCATE16,2:PRINTCHR$(R+64);STR$(U);
180 X=E:Y=Q:GOSUB890:X=R:Y=U:GOSUB890:IFC=1THENLOCATE16,3:PRINT" ";:C=0
190 LOCATE16,0:PRINTCHR$(144);:SOUND10,10:GOSUB1570:D=0:B4=A:B9=B:B5=0:IFA(X,Y)=2ANDY=5ANDB=6ANDA(A,B)=1ANDABS(A-X)=1THENB5=1:GOTO220
200 IFX$="K"ORX$="Q"THENGOSUB880:GOTO110
210 A0=3:GOSUB250:IFD=0THENLOCATE16,3:PRINT"  ";:GOTO190
220 LOCATE16,0:PRINTCHR$(143);:LOCATE16,3:PRINT"   ";:A=B4:B=B9:A(A,B)=A(X,Y):A(X,Y)=1:GOSUB890:X=A:Y=B:GOSUB890:IFN$="N"THENGOSUB880:N$=" "
230 IFA(A,B)=2ANDB=8THENLOCATE16,0:PRINT"";:GOSUB1780:X=A:Y=B:GOSUB890
240 IFB5=1THENA(A,B-1)=1:X=A:Y=B-1:GOSUB890:GOTO110ELSEGOTO110
250 ONA(X,Y)GOTO10,460,10,360,310,10,270,10,310:GOTO440
260 ON-A(X,Y)GOTO10,510,10,360,310,10,270,10,310:GOTO440
270 B=Y:FORA=X+1TO8:GOSUB620:IFS=0THENNEXT
280 FORA=X-1TO1STEP-1:GOSUB620:IFS=0THENNEXT
290 A=X:FORB=Y+1TO8:GOSUB620:IFS=0THENNEXT
300 FORB=Y-1TO1STEP-1:GOSUB620:IFS=0THENNEXT:RETURNELSERETURN
310 B=Y:FORA=X+1TO8:B=B+1:GOSUB620:IFS=0THENNEXT
320 B=Y:FORA=X-1TO1STEP-1:B=B-1:GOSUB620:IFS=0THENNEXT
330 B=Y:FORA=X-1TO1STEP-1:B=B+1:GOSUB620:IFS=0THENNEXT
340 B=Y:FORA=X+1TO8:B=B-1:GOSUB620:IFS=0THENNEXT
350 IFABS(A(X,Y))=9THENGOTO270ELSERETURN
360 A=X+2:B=Y+1:IFA<9ANDB<9THENGOSUB630
370 B=B-2:IFB>0ANDA<9THENGOSUB630
380 A=A-4:IFA>0ANDB>0THENGOSUB630
390 B=B+2:IFB<9ANDA>0THENGOSUB630
400 A=A+1:B=B+1:IFA>0ANDA<9ANDB<9THENGOSUB630
410 B=B-4:IFB>0ANDA>0ANDA<9THENGOSUB630
420 A=A+2:IFA>0ANDA<9ANDB>0THENGOSUB630
430 B=B+4:IFB<9ANDA>0ANDA<9THENGOSUB630:RETURNELSERETURN
440 FORA=X-1TOX+1:FORB=Y-1TOY+1:IFA(A,B)<>0THENGOSUB630
450 NEXT:NEXT:RETURN
460 A=X:IFY>2THENGOTO480
470 B=Y+1:IFA(A,B)=1THENGOSUB640:B=B+1:IFA(A,B)=1THENGOSUB640:GOTO490ELSEGOTO490ELSEGOTO490
480 B=Y+1:IFA(A,B)=1THENGOSUB640
490 A=X+1:B=Y+1:IFA(A,B)<0THENGOSUB640
500 A=A-2:IFA(A,B)<0THENGOSUB640:RETURNELSERETURN
510 A=X:IFY<7THENGOTO530
520 B=Y-1:IFA(A,B)=1THENGOSUB640:B=B-1:IFA(A,B)=1THENGOSUB640:GOTO540ELSEGOTO540ELSEGOTO540
530 B=Y-1:IFA(A,B)=1THENGOSUB640
540 A=X-1:B=Y-1:IFA(A,B)>1THENGOSUB640
550 A=A+2:IFA(A,B)>1THENGOSUB640:RETURNELSEGOTO570
560 T=A(A,B):IFT=-99THENB1=T:RETURNELSEGOTO570
570 A5=S:IFABS(T)<=A(X,Y)THENA(A,B)=A(X,Y):A(X,Y)=1:GOTO590
580 IFT<B1 THENB1=T:S=A5:RETURNELSES=A5:RETURN
590 A1=X:A2=Y:A3=A:A4=B:A8=T:A0=2:FORX=1TO8:FORY=1TO8:IFA(X,Y)<0THENGOSUB260:IFT=0THENGOTO610
600 NEXT:NEXT
610 X=A1:Y=A2:A=A3:B=A4:A0=5:A(X,Y)=A(A,B):A(A,B)=A8:GOTO580
620 S=0:IFA(A,B)=1THENGOTO640ELSEIFA(A,B)=0THENS=1:RETURNELSEIFSGN(A(A,B))=SGN(A(X,Y))THENS=1:RETURNELSES=1:GOTO640
630 IFA(A,B)=1THENGOTO640ELSEIFSGN(A(A,B))=SGN(A(X,Y))THENRETURNELSEGOTO640
640 ONA0 GOTO650,660,670,680,690:GOTO700
650 IFA6=A ANDA7=B THENB1=B1+1:RETURNELSERETURN
660 IFA3=A ANDA4=B THENT=0:RETURNELSERETURN
670 IFB4=A ANDB9=B THEND=1:RETURNELSERETURN
680 IFA6=A ANDA7=B THENC=1:RETURNELSERETURN
690 IFA(A,B)<0THENGOTO560ELSERETURN
700 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
710 A0=5:FORX=1TO8:FORY=1TO8:IFA(X,Y)>1THENGOSUB250
720 NEXT:NEXT:X=N:Y=H:A0=1:GOSUB260:A0=0:S=B3:X=W:Y=M:A=N:B=H:A(X,Y)=A(A,B):A(A,B)=P
730 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
740 G!=P+B1+B6!:IFP=99THENGOSUB880:LOCATE16,3:PRINT"";:GOTO1850
750 IFG!<=F!THENRETURN
760 F!=G!:E=X:Q=Y:R=A:U=B:RETURN
770 CLS
780 Y=0:FORJ=896TO0STEP-128:Y=Y+1:X=0:FORK=J TO42+J STEP6:X=X+1:T(X,Y)=K:NEXT:NEXT
790 Y=0:FORJ=960TO64STEP-128:Y=Y+1:X=0:FORK=J TO42+J STEP6:X=X+1:B(X,Y)=K:NEXT:NEXT
800 DATA -7,-4,-5,-9,-99,-5,-4,-7
810 DATA -2,-2,-2,-2,-2,-2,-2,-2
820 DATA 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,1
830 DATA 2,2,2,2,2,2,2,2
840 DATA 7,4,5,9,99,5,4,7
850 FORY=8TO1STEP-1:FORX=1TO7STEP2:S(X,Y)=I:S(X+1,Y)=-I:NEXT:I=-I:NEXT
860 RESTORE800:FORY=8TO1STEP-1:FORX=1TO8:READA(X,Y):NEXT:NEXT:RETURN
870 I=-I:A(4,1)=99:A(5,1)=9:A(4,8)=-99:A(5,8)=-9
880 FORY=1TO8:FORX=1TO8:GOSUB890:NEXT:NEXT:RETURN
890 IFS(X,Y)>0THENGOTO910
900 ONABS(A(X,Y))GOSUB950,1020,10,1320,1420,10,1520,10,1120:LINE(47,0)-(47,31),PSET:LINE(95,0)-(95,31),PSET:IFABS(A(X,Y))=99THENGOSUB1220:RETURNELSERETURN
910 ONABS(A(X,Y))GOSUB920,970,10,1270,1370,10,1470,10,1070:LINE(47,0)-(47,31),PSET:LINE(95,0)-(95,31),PSET:IFABS(A(X,Y))=99THENGOSUB1170:RETURNELSERETURN
920 IFS(X,Y)<0THENGOTO950
930 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
940 PRINTCHR$(32);:RETURN
950 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
960 PRINTCHR$(140);:RETURN
970 IFI*A(X,Y)<0THENGOTO1000
980 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
990 PRINT"";:RETURN
1000 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1010 PRINT"";:RETURN
1020 IFI*A(X,Y)<0THENGOTO1050
1030 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1040 PRINT"";:RETURN
1050 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1060 PRINT"";:RETURN
1070 IFI*A(X,Y)<0THENGOTO1100
1080 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1090 PRINT"";:RETURN
1100 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1110 PRINT"";:RETURN
1120 IFI*A(X,Y)<0THENGOTO1150
1130 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1140 PRINT"";:RETURN
1150 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1160 PRINT"";:RETURN
1170 IFI*A(X,Y)<0THENGOTO1200
1180 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1190 PRINT"";:RETURN
1200 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1210 PRINT"";:RETURN
1220 IFI*A(X,Y)<0THENGOTO1250
1230 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1240 PRINT"";:RETURN
1250 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1260 PRINT"";:RETURN
1270 IFI*A(X,Y)<0THENGOTO1300
1280 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1290 PRINT"";:RETURN
1300 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1310 PRINT"";:RETURN
1320 IFI*A(X,Y)<0THENGOTO1350
1330 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1340 PRINT"";:RETURN
1350 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1360 PRINT"";:RETURN
1370 IFI*A(X,Y)<0THENGOTO1400
1380 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1390 PRINT"";:RETURN
1400 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1410 PRINT"";:RETURN
1420 IFI*A(X,Y)<0THENGOTO1450
1430 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1440 PRINT"";:RETURN
1450 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1460 PRINT"";:RETURN
1470 IFI*A(X,Y)<0THENGOTO1500
1480 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1490 PRINT"";:RETURN
1500 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1510 PRINT"";:RETURN
1520 IFI*A(X,Y)<0THENGOTO1550
1530 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1540 PRINT"";:RETURN
1550 LOCATEX-1+8*((Y-1)\4),4-((Y-1)MOD4+1)
1560 PRINT"";:RETURN
1570 REM
1580 X$=INKEY$
1590 IFX$>="A"ANDX$<="H"THENX=VAL(CHR$(ASC(X$)-16)):GOTO1650
1600 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:GOTO1720
1610 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:GOTO1720
1620 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:GOTO1720
1630 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:GOTO1720
1640 GOTO1580
1650 LOCATE16,1:PRINTX$;"  ";
1660 Y=VAL(INKEY$):IFY=0THENGOTO1660
1670 LOCATE17,1:PRINTSTR$(Y);
1680 IFA(X,Y)<2ORA(X,Y)>99THENLOCATE16,3:PRINT"  ";:GOTO1570
1690 A$=INKEY$:IFA$<"A"ORA$>"H"THENGOTO1690ELSEA=VAL(CHR$(ASC(A$)-16))
1700 LOCATE16,2:PRINTA$+"  ";
1710 B=VAL(INKEY$):IFB=0THENGOTO1710ELSELOCATE17,2:PRINTSTR$(B);
1720 IFX$="K"ORX$="Q"THENLOCATE16,1:PRINTX$+"  ";:LOCATE16,2:PRINT"O-O";:GOSUB1750ELSEGOSUB1750
1730 REM
1740 RETURN
1750 RETURN
1760 RETURN
1770 GOTO110
1780 Z$=INPUT$(1)
1790 IFZ$="P"THENA(A,B)=2:RETURN
1800 IFZ$="N"THENA(A,B)=4:RETURN
1810 IFZ$="B"THENA(A,B)=5:RETURN
1820 IFZ$="R"THENA(A,B)=7:RETURN
1830 IFZ$="Q"THENA(A,B)=9:RETURN
1840 GOTO1790
1850 REM
1860 END
1870 I=-1:GOSUB1880:GOSUB880:RETURN
1880 L=0:FORJ=1TO8:FORK=1TO8:L=L+1:IFA(J,K)<>1THENC(L)=-A(J,K)ELSEC(L)=A(J,K)
1890 NEXT:NEXT
1900 L=65:FORJ=1TO8:FORK=1TO8:L=L-1:A(J,K)=C(L):NEXT:NEXT
1910 RETURN
1920 END
1930 DATA 56,25,2F,25,56,00
1940 DATA 70,4A,47,4A,70,00,71,4A,45,4A,71,00,67,5A,41,5A,67,00
1950 DATA 6C,52,41,52,6C,00,5E,61,56,6A,4C,00,00,4E,72,4E,00,00
1960 DATA 70,7A,7F,7A,70,00,71,7A,7D,7A,71,00,67,7E,7F,7E,67,00
1970 DATA 6C,7E,7F,7E,6C,00,5E,7F,7A,6E,4C,00,00,4E,7E,4E,00,00
