90 OPTION BASE 0 100 M=1: H=88: C=79: DIM A(99): DIM AA(99): DIM N(7): DIM B(9): DIM NN(10) 105 FOR I=10 TO 89: READ AA(I): NEXT 110 NN(0)=11: NN(1)= 10: NN(2)=9: NN(3)=1 120 NN(4)=-1: NN(5)=-9: NN(6)=-10: NN(7)=-11 130 CLS: LOCATE 4,20: PRINT"A B C D E F G H" 140 FOR I=1 TO 8: LOCATE I*2+4,14 142 PRINT " "; I; " . . . . . . . ." 144 NEXT I 150 FOR I=0 TO 99: A(I)=0: NEXT I 155 MC=0 160 T=C: P=44: GOSUB 1000: P=55: GOSUB 1000 170 T=H: P=45: GOSUB 1000: P=54: GOSUB 1000 200 REM HUMAN MOVE. 210 GOSUB 2000: IF(B$="!" AND M=0) OR Y+Z=64 OR Y*Z=0 THEN 900 215 LOCATE 22,1 220 INPUT "Your move (e.g. 3D) "; B$ 230 IF B$="!" THEN 300 240 Z$=LEFT$(B$,1): IF Z$<"1" OR Z$>"8" THEN 260 245 Y$=MID$(B$,2,1): IF Y$<"A" OR Y$>"H" THEN 260 250 P=(ASC(Z$)-48)*10+ASC(Y$)-64 255 T=H: F=0: GOSUB 3000: IF S>0 THEN 270 260 LOCATE 23,1: PRINT"Error !": GOTO 215 270 F=1: GOSUB 4000: GOSUB 3000 300 REM MACHINE MOVE 310 GOSUB 2000: IF (B$="!" AND M=0) OR Y+Z=64 OR Y*X=0 THEN 900 320 M=0: D=0: F=0: T=C: GOSUB 4000: PRINT "Let me think..." 330 FOR U=1 TO 8: FOR V= 1 TO 8: P=U*10+V 332 GOSUB 3000: IF S=0 THEN 365 350 S=((64-MC)*AA(P))+S*MC 355 IF S=D THEN IF RND(1)>.5 THEN D=D-1 360 IF S>D THEN D=S: M=P 365 NEXT V: NEXT U 369 GOSUB 4000 370 IF M>0 THEN F=1: P=M: GOSUB 5000: GOSUB 3000 380 IF M=0 THEN PRINT "I can't move " 390 FOR I=1 TO 300: NEXT: GOTO 200 900 REM ENDING. 910 GOSUB 4000 920 IF Y>Z THEN PRINT "Congratulations.. You won!": END 930 IF Y 0 THEN RETURN 3015 IF F=1 THEN MC=MC+1: GOSUB 1000 3020 FOR J=0 TO 7: Q=R: P=R: K=0 3030 Q=Q+NN(J): IF A(Q)=0 THEN 3080 3040 IF A(Q)=T THEN 3060 3050 K=K+1: GOTO 3030 3060 S=S+K: IF F=0 OR K<1 THEN 3080 3070 FOR L=1 TO K: P=P+NN(J): GOSUB 1000: NEXT L 3080 NEXT J 3090 RETURN 4000 REM CLEAR SCREEN INFO 4010 LOCATE 22,1: FOR I=1 TO 2: PRINT" ": NEXT 4020 LOCATE 22,1 4090 RETURN 5000 REM DISPLAY MY MOVE. 5010 X=(P-INT(P/10)*10) 5020 XX=INT(P/10) 5030 PRINT "I move ";XX;CHR$(X+64) 5040 RETURN 6000 DATA 0,16,4,11.2,5.6,5.6,11.2,4,16,0 6010 DATA 0,4,1,2.8,1.4,1.4,2.8,1,4,0 6020 DATA 0,11.2,2.8,8,4,4,8,2.8,11.2,0 6030 DATA 0,5.6,1.4,4,2,2,4,1.4,5.6,0 6040 DATA 0,5.6,1.4,4,2,2,4,1.4,5.6,0 6050 DATA 0,11.2,2.8,8,4,4,8,2.8,11.2,0 6060 DATA 0,4,1,2.8,1.4,1.4,2.8,1,4,0 6070 DATA 0,16,4,11.2,5.6,5.6,11.2,4,16,0