1 REM QBASIC Port by Andre Adrian, 29nov2011 2 DIM F9(100), N5(100) 5 RANDOMIZE 6 REM ******************************** 7 REM *** CHESS PROGRAM WRITTEN BY *** 8 REM *** MARK UNIACKE *** 9 REM ******************************** 10 INPUT "LEVEL"; O2 11 IF O2 < 0 OR O2 > 4 THEN PRINT "CAN'T YOU READ?": GOTO 10 12 DIM B8$(100) 13 A = 1: N6 = 1: H4 = 1: H6 = 1 20 INPUT "WHAT COLOUR DO YOU WANT (W/B)"; W5$ 30 IF W5$ <> "W" AND W5$ <> "B" THEN PRINT "READ IT": 32 IF W5$ <> "W" AND W5$ <> "B" THEN 20 34 N1 = -1000 40 GOTO 18000 140 INPUT "YOUR MOVE"; B$ 141 GOTO 29000 142 FOR P = 1 TO 4 143 L$(P) = MID$(B$, P, 1): L(P) = ASC(L$(P)): L(P) = L(P) - 64 144 NEXT P 145 L(2) = L(2) + 64: B$(1) = CHR$(L(2)): L(4) = L(4) + 64: G$ = CHR$(L(4)) 146 I = L(1): I1 = L(3): J = VAL(B$(1)): J1 = VAL(G$) 150 Z(I1, J1) = Z(I, J): Z(I, J) = 0: I = I1: J = J1: Z(I, J) = Z(I1, J1) 170 A = 1: N6 = 1: H4 = 1: H6 = 1: F5 = 0 199 REM ** 200 REM *** SEARCHING POSITION FOR COMPUTER PIECES *** 201 REM ** 210 FOR I5 = 1 TO 0 220 FOR J5 = 1 TO 8 222 L5 = 0: L6 = 0: L2 = 0: L7 = 0: L8 = 0: L9 = 0 225 I3 = I5 * 10: I3 = I3 + J5: Z9 = I3: Z1(A) = I3 226 H5 = 0 230 IF Z(I5, J5) <= 0 GOTO 350 235 I = I5: J = J5 240 ON Z(I5, J5) GOTO 1000, 2000, 3000, 4000, 5000, 4400 350 NEXT J5 360 NEXT I5 370 GOTO 5015 1000 I8 = I: J8 = J: Z1(A) = I3: Z9 = I3 1001 REM ** 1002 REM *** PAWN MOVE GENERATOR *** 1003 REM ** 1010 J = J + 1 1015 IF J = 8 GOTO 10000 1020 IF Z(I, J) = 0 GOTO 1030 1025 GOTO 1155 1030 I1 = I * 10 1040 I2 = I1 + J 1060 Z2(A) = I2: A = A + 1 1070 J = J8: I = I0 1075 IF F3 = 1 GOTO 1157 1080 IF J = 2 GOTO 1100 1085 J = J8: I = I8 1090 GOTO 1160 1100 J = J + 2 1110 IF Z(I, J) = 0 GOTO 1140 1120 J = J8: I = I8 1130 GOTO 1160 1140 Z1(A) = Z9 1141 F3 = 1 1150 GOTO 1030 1155 I = 18 1157 F3 = 0 1160 I = I + 1: J = J8: J = J + 1 1171 IF I > 8 GOTO 1230 1180 Z1(A) = Z9 1190 IF Z(I, J) < 0 THEN I1 = I * 10: I2 = I1 + J: Z2(A) = I2: A = A + 1 1230 I = I - 2 1231 IF I < 1 GOTO 350 1240 Z1(A) = Z9 1250 IF Z(I, J) < 0 GOTO 1300 1260 GOTO 350 1300 I1 = I * 10: I2 = I1 + J: Z2(A) = I2: A = A + 1 1310 GOTO 350 1319 REM ** 1320 REM *** END OF PAWN MOVE GENERATOR *** 1321 REM ** 1997 REM ** 1998 REM *** KNIGHT MOVE GENERATOR *** 1999 REM ** 2000 J8 = J: I8 = I: Z9 = I3 2005 J = J8: I = I8 2010 IF L2 = 0 THEN I = I - 2: J = J + 1 2011 IF L2 = 1 THEN I = I - 2: J = J - 1 2012 IF L2 = 2 THEN I = I + 2: J = J + 1 2013 IF L2 = 3 THEN I = I + 2: J = J - 1 2014 IF L2 = 4 THEN I = I - 1: J = J + 2 2015 IF L2 = 5 THEN I = I - 1: J = J - 2 2016 IF L2 = 6 THEN I = I + 1: J = J + 2 2017 IF L2 = 7 THEN I = I + 1: J = J - 2 2018 IF L2 = 8 THEN 350 2019 Z1(A) = I3 2020 IF I < 1 OR I > 8 OR J < 1 OR J > 8 GOTO 2085 2030 IF Z(I, J) <= 0 GOTO 2050 2040 GOTO 2085 2050 I1 = I * 10 2060 I2 = I1 + J 2070 Z2(A) = I2 2080 A = A + 1: L7 = 1 2085 L2 = L2 + 1 2090 GOTO 2005 2099 REM ** 2100 REM *** END OF KNIGHT MOVE GENERATOR *** 2101 REM ** 2997 REM ** 2998 REM *** BISHOP MOVE GENERATOR *** 2999 REM ** 3000 I8 = I: J8 = J: Z9 = I3 3002 I = I8: J = J8 3005 Z1(A) = Z9 3010 IF L8 = 0 THEN I = I - 1: J = J + 1 3011 IF L8 = 1 THEN I = I + 1: J = J - 1 3012 IF L8 = 2 THEN I = I - 1: J = J - 1 3013 IF L8 = 3 THEN I = I + 1: J = J + 1 3014 IF L8 = 4 AND H5 = 1 THEN 4000 3015 IF L8 = 4 GOTO 350 3018 IF I < 1 OR I > 8 OR J < 1 OR J > 8 GOTO 3081 3020 IF Z(I, J) <= 0 GOTO 3040 3030 GOTO 3081 3040 IF Z(I, J) < 0 THEN L9 = 1 3050 I1 = I * 10 3060 I2 = I1 + J 3065 Z2(A) = I2 3070 A = A + 1: L7 = 1 3080 IF L9 = 0 GOTO 3005 3081 L8 = L8 + 1 3082 GOTO 3002 3084 REM ** 3085 REM *** END OF BISHOP MOVE GENERATOR *** 3086 REM ** 3998 REM ** 3999 REM *** ROOK MOVE GENERATOR *** 4000 REM ** 4001 I8 = I: J8 = J: Z9 = I3 4003 J = J5: I = I5 4005 DATA —11,-10,-9,-1,1,9,10,11,3,3 4011 IF L5 = 0 THEN J = J + 1 4012 IF L5 = 1 THEN J = J - 1 4013 IF L5 = 2 THEN I = I + 1 4014 IF L5 = 3 THEN I = I - 1 4015 IF L5 = 4 THEN 350 4016 IF I < 1 OR I > 8 OR J < 1 OR J > 8 GOTO 4100 4020 IF Z(I, J) <= 0 GOTO 4040 4030 GOTO 4100 4040 IF Z(I, J) < 0 THEN L9 = 1 4050 I1 = I * 10 4060 I2 = I1 + J 4070 Z2(A) = I2 4080 A = A + 1: L7 = 1 4090 IF L9 = 0 GOTO 4005 4100 L5 = L5 + 1 4110 GOTO 4000 4111 REM ** 4112 REM *** END OF ROOK MOVE GENERATOR *** 4113 REM ** 4400 REM ***KING MOVES *** 4410 READ H1 4415 IF H1 = 3.3 THEN RESTORE: GOTO 4600 4420 Z1(A) = I3: H2 = I3 + H1 4440 I9 = VAL(LEFT$(NUM1$(H2), 1)): J9 = VAL(MID$(NUM1$(H2), 2, 1)) 4443 IF I9 < 1 OR I9 > 8 OR J9 < 1 OR J9 > 8 THEN 4410 4460 IF Z(19, J9) = 0 THEN Z2(A) = H2: A = A + 1 4470 GOTO 4410 4600 REM ***CASTLING FOR COMPUTER*** 4601 IF E8 = 1 GOTO 350 4610 IF Y3 = 1 AND Z(5, 1) = 6 AND Z(6, 1) = 0 AND Z(7, 1) = 0 AND Z(8, 1) = 4 THEN Z1(A) = 99: Z2(A) = 98 4620 IF Y3 = 1 AND Z(5, 1) = 6 AND Z(4, 1) = 0 AND Z(3, 1) = 0 AND Z(2, 1) = 0 AND Z(1, 1) = 4 THEN Z1(A) = 99: Z2(A) = 97: A = A + 1 4630 IF Y3 = 0 AND Z(4, 1) = 6 AND Z(3, 1) = 0 AND Z(2, 1) = 0 AND Z(1, 1) = 4 THEN Z1(A) = 99: Z2(A) = 96: A = A + 1 4640 IF Y3 = 0 AND Z(4, 1) = 6 AND Z(5, 1) = 0 AND Z(6, 1) = 0 AND Z(7, 1) = 0 AND Z(8, 1) = 4 THEN Z1(A) = 99: Z2(A) = 95: A = A + 1 4650 E8 = 1: GOTO 350 4997 REM ** 4998 REM *** SET VALUE FOR QUEEN MOVES SEE ROOK 4- BISHOP *** 4999 REM ** 5000 H5 = 1 5010 GOTO 3000 5011 REM ** 5012 REM *** SETTING UP ANOTHER MATRIX (X) *** 5013 REM *** AND FINDING MOBILITY OF PREVIOUSLY *** 5014 REM *** WORKED OUT MOVES *** 5015 REM ** 5100 R6 = A - 1 5110 FOR A = 1 TO R6 5113 MAT X = ZER 5115 MAT X = Z 5120 H4 = 1: H6 = 1 5130 GOTO 5510 5140 NEXT A 5150 GOTO 32400 5510 M = VAL(LEFT$(NUM1$(Z1(A)), 1)) 5511 REM ** 5512 REM *** THE NEXT 11 LINES SEARCH FOR DEVELOPMENT *** 5513 IF Z1(A) = 61 AND Z2(A) = 34 THEN T2 = 15 5514 IF Z1(A) = 31 AND Z2(A) = 64 THEN T2 = 13 5515 IF Z1(A) = 71 AND Z2(A) = 63 THEN T2 = 20 5516 IF Z1(A) = 21 AND Z2(A) = 33 THEN T2 = 20 5517 IF Z1(A) = 61 AND Z2(A) = 25 THEN T2 = 13 5518 IF Z1(A) = 31 AND Z2(A) = 25 THEN T2 = 10 5519 IF Z1(A) = 43 AND Z2(A) = 44 AND Z(5, 5) = -1 THEN T2 = -10 5520 IF Z1(A) = 53 AND Z2(A) = 54 AND Z(4, 5) = -1 THEN T2 = -10 5521 IF Z1(A) = 11 AND Z2(A) = 41 THEN T2 = 10 5522 IF Z1(A) = 61 AND Z2(A) = 51 THEN T2 = 10 5523 IF Z1(A) = 51 AND Z(5, 1) = 6 THEN T2 = -10 5525 N = VAL(MID$(NUM1$(Z1(A)), 2, 1)): F2 = X(M, N): X(M, N) = 0 5530 M = VAL(LEFT$(NUM1$(Z2(A)), 1)) 5540 N = VAL(MID$(NUM1$(Z2(A)), 2, 1)): U4 = X(M, N): X(M, N) = F2: IF U4 < 0 THEN X7 = U4: GOTO 30000 5541 P9 = X(M, N): P7 = M: P8 = N 5542 E6 = X7 5550 IF Z1(A) = 99 AND Z2(A) = 98 THEN X(7, 1) = 6: X(6, 1) = 4: T2 = 50: X(8, 1) = 0: X(5, 1) = 0 5552 IF Z1(A) = 99 AND Z2(A) = 97 THEN X(3, 1) = 6: X(5, 1) = 0: X(1, 1) = 0: X(4, 1) = 4: T2 = 30 5554 IF Z1(A) = 99 AND Z2(A) = 96 THEN X(4, 1) = 0: X(1, 1) = 0: X(2, 1) = 6: X(3, 1) = 4: T2 = 50 5556 IF Z1(A) = 99 AND Z2(A) = 95 THEN X(4, 1) = 0: X(8, 1) = 0: X(5, 1) = 4: X(6, 1) = 6: T2 = 30 5558 IF Z1(A) = 99 THEN P9 = 0: P7 = 0: P8 = 0 5997 REM ** 5998 REM *** SEARCHING MATRIX(X) FOR MOBILITY + CHECKS *** 5999 REM ** 6000 FOR M = 1 TO 8 6010 FOR N = 1 TO 8 6011 L2 = 0: L5 = 0: L6 = 0: L8 = 0: L9 = 0: G4 = 0 6012 N1 = N: M1 = M 6015 IF X(M, N) = 5 THEN M3 = M * 10: M3 = M3 + N 6020 IF G7 = 1 AND X(M, N) > O AND X(M, N) <> 6 GOTO 18700 6025 IF G7 = 0 AND X(M, N) < 0 AND X(M, N) <> -6 GOTO 18600 6040 NEXT N 6041 NEXT M 6045 IF G7 = 0 THEN G7 = 1: GOTO 6000 6046 H8 = 1 6050 GOTO 32000 10000 REM ** 10005 REM *** MOBILITY OF PLAYERS PAWN *** 10006 REM ** 10020 N1 = N1 - 1 10030 IF N1 = 1 AND X(M1, N1) = 0 THEN B3 = 300 10040 IF X(M1, N1) = 0 THEN 10060 10050 GOTO 10150 10060 C = C + 1 10065 M1 = M: N1 = N 10080 IF N1 = 7 GOTO 10110 10100 GOTO 10150 10110 N1 = N1 - 2 10120 IF X(M1, N1) = 0 THEN C = C + 1 10150 N1 = N: M1 = M 10170 N1 = N1 - 1: M1 = M1 + 1 10180 IF M1 > 8 GOTO 10220 10190 IF X(M1, N1) = 6 GOTO 20000 10195 IF X(M1, N1) > 0 AND M1 = P7 AND N1 = P8 THEN E3 = 1 10196 IF X(M1, N1) > O THEN H3(H4) = M1 * 10: H3(H4) = H3(H4) + N1: H4 = H4 + 1 10200 IF X(M1, N1) > 0 THEN C = C + 1 10220 M1 = M1 - 2 10225 IF X(M1, N1) = 6 GOTO 20000 10230 IF Ml < 1 GOTO 6040 10235 IF X(M1, N1) > 0 AND M1 = P7 AND N1 = P8 THEN E3 = 1 10236 IF X(M1, N1) > O THEN H3(H4) = M1 * 10: H3(H4) = H3(H1) + N1: H4 = H4 + 1 10240 IF X(M1, N1) > 0 THEN C = C + 1 10250 GOTO 6040 11000 REM ** 11002 REM *** MOBILITY OF PLAYERS KNIGHT *** 11004 REM ** 11010 M1 = M: N1 = N 11020 IF L2 = 0 THEN M1 = M1 - 2: N1 = N1 + 1 11030 IF L2 = 1 THEN M1 = M1 - 2: N1 = N1 - 1 11040 IF L2 = 2 THEN M1 = M1 + 2: N1 = N1 + 1 11050 IF L2 = 3 THEN M1 = M1 + 2: N1 = N1 - 1 11060 IF L2 = 4 THEN M1 = M1 - 1: N1 = N1 + 2 11070 IF L2 = 5 THEN M1 = M1 - 1: N1 = N1 - 2 11080 IF L2 = 6 THEN M1 = M1 + 1: N1 = N1 + 2 11090 IF L2 = 7 THEN M1 = M1 + 1: N1 = N1 - 2 11100 IF L2 = 8 THEN 6040 11110 IF M1 < 1 OR M1 > 8 OR N1 < 1 OR N1 > 8 GOTO 11130 11115 IF X(M1, N1) > 0 AND M1 = P7 AND N1 = P8 THEN E3 = 1 11116 IF X(M1, N1) > O THEN H3(H4) = M1 * 10: H3(H4) = H3(H4) + N1: H4 = H4 + 1 11120 IF X(M1, N1) >= 0 THEN C = C + 1 11125 IF X(Ml, N1) = 6 THEN 20000 11130 L2 = L2 + 1 11140 GOTO 11010 12000 REM ** 12002 REM *** MOBILITY OF PLAYERS BISHOP *** 12004 REM ** 12010 M1 = M: N1 = N 12020 IF L8 = 0 THEN M1 = M1 - 1: N1 = N1 + 1 12030 IF L8 = 1 THEN M1 = M1 + 1: N1 = N1 - 1 12040 IF L8 = 2 THEN M1 = M1 - 1: N1 = N1 - 1 12050 IF L8 = 3 THEN M1 = M1 + 1: N1 = N1 + 1 12060 IF L8 = 4 AND G4 = 1 THEN 13000 12070 IF L8 = 4 GOTO 6040 12080 IF M1 < 1 OR M1 > 8 OR N1 < 1 OR N1 > 8 GOTO 12140 12085 IF X(M1, N1) = 6 GOTO 20000 12086 IF X(M1, N1) > O THEN H3(H4) = M1 * 10: H3(H4) = H3(H4) + N1: H4 = H4 + 1 12087 IF X(Ml, N1) > 0 AND M1 = P7 AND N1 = P8 THEN E3 = 1 12090 IF X(M1, N1) >= 0 THEN 12110 12100 GOTO 12140 12110 C = C + 1 12120 IF X(M1, N1) > 0 GOTO 12140 12130 GOTO 12020 12140 L8 = L8 + 1 12150 GOTO 12010 13000 REM ** 13002 REM *** MOBILITY OF PLAYERS ROOK *** 13004 REM ** 13010 M1 = M: N1 = N 13020 IF L5 = 0 THEN N1 = N1 + 1 13030 IF L5 = 1 THEN N1 = N1 - 1 13040 IF L5 = 2 THEN M1 = M1 + 1 13050 IF L5 = 3 THEN M1 = M1 - 1 13060 IF L5 = 4 THEN 6040 13070 IF M1 < 1 OR M1 > 8 OR N1 < 1 OR N1 > 8 GOTO 13130 13075 IF X(M1, N1) = 6 GOTO 20000 13076 IF X(M1, N1) > O THEN H3(H4) = M1 * 10: H3(H4) = H3(H4) + N1: H4 = H4 + 1 13077 IF X(M1, N1) > O AND M1 = P7 AND N1 = P8 THEN E3 = 1 13080 IF X(M1, N1) >= 0 GOTO 13100 13090 GOTO 13130 13100 C = C + 1 13110 IF X(M1, N1) > 0 GOTO 13130 13120 GOTO 13020 13130 L5 = L5 + 1 13140 GOTO 13010 13300 G4 = 1: GOTO 12000: REM SETTING VALUE FOR QUEEN MOVE 14000 REM ** 14002 REM *** MOBILITY FOR COMPUTERS PAWN *** 14004 REM ** 14020 N1 = N1 + 1 14030 IF X(M1, N1) = 0 AND N1 = 8 THEN B4 = 200 14040 IF X(M1, N1) = 0 GOTO 14060 14050 GOTO 14150 14060 C1 = C1 + 1 14065 M1 = M: N1 = N 14080 IF N1 = 2 GOTO 14110 14110 N1 = N1 + 2 14120 IF X(M1, N1) = 0 THEN C1 = C1 + 1 14150 N1 = N: M1 = M 14170 N1 = N1 + 1: M1 = M1 + 1 14180 IF M1 > 8 GOTO 14220 14185 IF X(M1, N1) > O THEN H5(H6) = M1 * 10: H5(H6) = H5(H6) + N1: H6 = H6 + 1 14190 IF X(M1, N1) = -6 THEN C1 = 38: C = 4: GOTO 32300 14200 IF X(M1, N1) < 0 THEN C1 = C1 + 1 14220 M1 = M1 - 2 14225 IF X(MI, N1) = -6 THEN C1 = 38: C = 4: GOTO 32300 14230 IF M1 < 1 GOTO 6040 14235 IF X(M1, N1) > O THEN H5(H6) = M1 * 10: H5(H6) = H5(H6) + N1: H6 = H6 + 1 14240 IF X(M1, N1) < 0 THEN C1 = C1 + 1 14250 GOTO 6040 15000 REM ** 15002 REM *** MOBILITY FOR COMPUTERS KNIGHT *** 15004 REM ** 15010 M1 = M: N1 = N 15020 IF L2 = 0 THEN M1 = M1 - 2: N1 = N1 + 1 15030 IF L2 = 1 THEN M1 = M1 - 2: N1 = N1 - 1 15040 IF L2 = 2 THEN M1 = M1 + 2: N1 = N1 + 1 15050 IF L2 = 3 THEN M1 = M1 + 2: N1 = N1 - 1 15060 IF L2 = 4 THEN M1 = M1 - 1: N1 = N1 + 2 15070 IF L2 = 5 THEN M1 = M1 - 1: N1 = N1 - 2 15080 IF L2 = 6 THEN M1 = M1 + 1: N1 = N1 + 2 15090 IF L2 = 7 THEN M1 = M1 + 1: N1 = N1 - 2 15100 IF L2 = 8 GOTO 6040 15110 IF M1 < 1 OR M1 > 8 OR N1 < 1 OR Nl > 8 GOTO 15130 15115 IF X(M1, N1) > O THEN H5(H6) = M1 * 10: H5(H6) = H5(H6) + N1: H6 = H6 + 1 15120 IF X(M1, N1) <= 0 THEN C1 = C1 + 1 15125 IF X(M1, N1) = -6 THEN C1 = 38: C = 4: GOTO 32300 15130 L2 = L2 + 1 15140 GOTO 15010 16000 REM ** 16002 REM *** MOBILITY FOR COMPUTERS BISHOP *** 16004 REM ** 16010 M1 = M: N1 = N 16020 IF L8 = 0 THEN M1 = M1 - 1: N1 = N1 + 1 16030 IF L8 = 1 THEN M1 = M1 + 1: N1 = N1 - 1 16040 IF L8 = 2 THEN M1 = M1 - 1: N1 = N1 - 1 16050 IF L8 = 3 THEN M1 = M1 + 1: N1 = N1 + 1 16060 IF L8 = 4 AND G4 = 1 THEN 17000 16070 IF L8 = 4 THEN 6040 16080 IF M1 < 1 OR M1 > 8 OR N1 < 1 OR N1 > 8 GOTO 16140 16084 IF X(Ml, N1) > O THEN H5(H6) = M1 * 10: H5(H6) = H5(H6) + N1: H6 = H6 + 1 16085 IF X(M1, N1) = -6 THEN C1 = 38: C = 4: GOTO 32300 16090 IF X(Ml, N1) <= 0 GOTO 16110 16100 GOTO 16140 16110 C1 = C1 + 1 16120 IF X(Ml, N1) < 0 THEN 16140 16130 GOTO 16020 16140 L8 = L8 + 1 16150 GOTO 16010 17000 REM ** 17002 REM *** MOBILITY FOR COMPUTERS ROOK *** 17004 REM ** 17010 M1 = M: N1 = N 17020 IF L5 = 0 THEN N1 = N1 + 1 17030 IF L5 = 1 THEN N1 = N1 - 1 17040 IF L5 = 2 THEN M1 = M1 + 1 17050 IF L5 = 3 THEN M1 = M1 - 1 17060 IF L5 = 4 GOTO 6040 17070 IF M1 < 1 OR M1 > 8 OR N1 < 1 OR N1 > 8 GOTO 17130 17075 IF X(M1, N1) = -6 THEN C1 = 38: C = 4: GOTO 32300 17076 IF X(M1, N1) > O THEN H5(H6) = M1 * 10: H5(H6) = H5(H6) + N1: H6 = H6 + 1 17090 GOTO 17130 17100 C1 = C1 + 1 17110 IF X(M1, N1) < 0 GOTO 17130 17120 GOTO 17020 17130 L5 = L5 + 1 17140 GOTO 17010 17500 G4 = 1: GOTO 16000 18000 REM ** 18002 REM *** SETTING UP OF STARTING POSITION *44 18004 REM ** 18010 Z(1, 1) = 4: Z(2, 1) = 2: Z(3, 1) = 3: Z(4, 1) = 5: Z(5, 1) = 6: Z(6, 1) = 3 18020 Z(7, 1) = 2: Z(8, 1) = 4: FOR I = 1 TO 8: Z(I, 2) = 1: NEXT I 18040 FOR J = 3 TO 6 18050 FOR I = 1 TO 8 18060 Z(I, J) = 0 18070 NEXT I 18080 NEXT J 18090 FOR I = 1 TO 8 18100 Z(I, 7) = -1 18110 NEXT I 18120 Z(1, 8) = -4: Z(2, 8) = -2: Z(3, 8) = -3: Z(4, 8) = -5: Z(5, 8) = -6 18130 Z(6, 8) = -3: Z(7, 8) = -2: Z(8, 8) = -4: Z(5, 4) = 1 18134 Z(5, 4) = 0 18170 PRINT : PRINT : PRINT 18180 IF W5$ = "W" THEN Z(4, 8) = -6: Z(5, 8) = -5: Z(4, 1) = 6: Z(5, 1) = 5 18185 IF W5$ = "B" THEN Y3 = 1 18190 IF W5$ = "B" THEN 18400 18200 GOTO 140 18400 W6 = 100 * RND + 1 18410 IF W6 > 54 THEN Z(5, 2) = 0: Z(5, 4) = 1: PRINT "E2 TO E4" 18420 IF W6 < 55 AND W6 > 12 THEN Z(4, 2) = 0: Z(4, 4) = 1: PRINT "D2 TO D4" 18430 IF W6 < 13 AND W6 > 6 THEN Z(3, 2) = 0: Z(3, 4) = 1: PRINT "C2 TO C4" 18440 IF W6 < 7 THEN Z(7, 1) = 0: Z(6, 3) = 2: PRINT "G1 TO F3" 18450 GOTO 140 18600 U5 = ABS(X(M, N)) 18610 ON U5 GOTO 10000, 11000, 12000, 13000, 13300 18700 ON X(M, N) GOTO 14000, 15000, 16000, 17000, 17500 18710 GOTO 6040 20000 N5(N6) = -100000000: N6 = N6 + 1: T2 = 0: T3 = 0 20010 GOTO 32330 22000 PRINT "UNLUCKY--GOOD GAME": STOP 25000 IF T7 < 50 THEN PRINT "YES": STOP 25010 PRINT "NO --WHAT DO YOU THINK I AM A HUMAN!!!": GOTO 140 26000 INPUT "LEVEL CHANGE"; O2: GOTO 140 27000 PRINT TAB(20); "POSITION SETTING UP" 27010 PRINT TAB(20); "===================" 27020 PRINT : PRINT : PRINT "CODE FOR PIECES" 27030 PRINT : PRINT "TYPE" 27040 PRINT TAB(10); "1 FOR A PAWN'" 27050 PRINT TAB(10); "2 FOR A KNIGHT" 27060 PRINT TAB(10); "3 FOR A BISHOP" 27070 PRINT TAB(10); "4 FOR A ROOK" 27080 PRINT TAB(10); "5 FOR A QUEEN" 27090 PRINT TAB(10); "6 FOR A KING'" 27100 PRINT "NB--NEGATIVE NUMBERS FOR YOUR PIECE.TO END-END" 27110 PRINT : PRINT TAB(15); "--------------------------" 27120 PRINT "SO FOR YOUR KNIGHT ON C3 TYPE C,3,-2" 27130 INPUT "SOUARE"; E$, E1, E2 27140 IF E$ = "END" GOTO 27170 27150 E3 = ASC(E$): E3 = E3 - 64 27160 Z(E3, E1) = E2: GOTO 27130 27170 PRINT : PRINT TAB(20); "POSITION AFTER CHANGE": PRINT 27180 FOR I = 1 TO 8 27190 FOR J = 1 TO 8 27195 PRINT Z(I, J); : NEXT J: PRINT : NEXT I 27200 IF Y3 = 1 GOTO 210 ELSE 140 28999 REM *** PLAYER REQUESTS *** 29000 IF B$ = "CASQ" AND Y3 = 1 AND Z(5, 8) = -6 AND Z(1, 8) = -4 THEN 29300 29005 IF B$ = "CASQ" AND Y3 = 0 AND Z(4, 8) = -6 AND Z(8, 8) = -4 THEN 29300 29006 IF B$ = "CASK" AND Y3 = 0 AND Z(4, 8) = -6 AND Z(1, 8) = -4 THEN 29350 29010 IF B$ = "CASK" AND Z(5, 8) = -6 AND Z(8, 8) = -4 AND Y3 = 1 THEN 29350 29020 IF B$ = "RESIGNS" THEN 22000 29030 IF B$ = "PLEASE MAY I HAVE A DRAW?" THEN 25000 29040 IF B$ = "CLEV" THEN 26000 29050 IF B$ = "POSITION CHANGE" THEN 27000 29055 B8 = LEN(B$): IF B8 > 4 THEN PRINT "COMAND"; B$; "INVALID": GOTO 140 29060 GOTO 142 29300 REM *** QUEENSIDE CASTLING FOR PLAYER *** 29310 IF Y3 = 0 THEN Z(4, 8) = 0: Z(8, 8) = 0: Z(6, 8) = -6: Z(5, 8) = -4: GOTO 210 29320 Z(5, 8) = 0: Z(1, 8) = 0: Z(3, 8) = -6: Z(4, 8) = -4: GOTO 210 29350 REM *** KINGSIDE CASTLING FOR PLAYER *** 29360 IF Y3 = 0 THEN Z(4, 8) = 0: Z(1, 8) = 0: Z(2, 8) = -6: Z(3, 8) = -4: GOTO 210 29370 Z(5, 8) = 0: Z(7, 8) = -6: Z(8, 8) = 0: Z(6, 8) = -4: GOTO 210 30000 REM *** ROUTINE TO FIND VALUES OF PIECES *** 30010 X7 = ABS(X7) 30011 IF E3 = 1 THEN X7 = X(P7, P8) 30015 IF X7 = 1 THEN X7 = 100 30016 IF X7 = 2 THEN X7 = 335 30017 IF X7 = 3 THEN X7 = 350 30018 IF X7 = 4 THEN X7 = 500 30019 IF X7 = 5 THEN X7 = 900 30020 IF X7 = 6 THEN PRINT "I CAN TAKE YOUR KING SO I WIN "; 30021 IF X7 = 6 THEN PRINT "ON DEFAULT": 30022 IF X7 = 6 THEN 32767 30025 IF N3 = 1 THEN 32310 30026 IF E3 = 1 THEN E3 = X7: GOTO 32310 30030 GOTO 5541 32000 REM 32001 FOR D2 = 1 TO H4 32020 FOR D3 = 1 TO H6 32025 IF H3(D2) = M3 THEN T3 = 200 32030 IF H5(D3) = H3(D2) THEN H5(D3) = 300: H3(D2) = 100 32050 NEXT D3 32055 IF H3(D2) <> 100 THEN 32080 32060 NEXT D2 32070 GOTO 32100 32080 H7(H8) = H3(D2): H8 = H8 - 1 32090 GOTO 32060 32100 FOR H8 = 1 TO 40 32110 IF H7(H8) = 0 GOTO 32150 32120 M1 = VAL(LEFT$(NUM1$(H7(H8)), 1)) 32130 N1 = VAL(MID$(NUM1$(H7(H8)), 2, 1)) 32140 H7(H8) = X(M1, N1) 32150 NEXT H8 32160 FOR H8 = 1 TO 40 32170 IF H7(H8) > H9 THEN H9 = H7(H8) 32171 NEXT H8 32172 N3 = 1: X7 = H9: GOTO 30015 32300 IF C1 = 38 AND C = 4 AND E3 = 1 GOTO 30011 ELSE E3 = 0 32305 REM *** MOVE EVALUATION *** 32310 IF O2 = 1 THEN C4 = C1 - C: C4 = C4 * 50 32311 IF O2 = 2 THEN C4 = C1 - C: C4 = C4 * 20 32312 IF O2 = 3 THEN C4 = C1 - C: C4 = C4 * 5 32313 IF O2 = 4 THEN C4 = C1 - C: C4 = C4 * 2 32314 IF C1 = 38 AND C = 4 THEN B8$(N6) = "CHECK": GOTO 32318 32315 N5(N6) = T2 - T3 + C4 - X7 + E6 - B3 + B4: N6 = N6 + 1: T7 = T7 + N5(N6 - 1): GOTO 32330 32318 N5(N6) = T2 - T3 + C4 - E3 + E6 - B3 + B4: N6 = N6 + 1: T7 = T7 + N5(N6 - 1): GOTO 32330 32330 REM 32331 H9 = 0: T2 = 0: T3 = 0: C4 = 0: C1 = 0: C = 0: X7 = 0: E6 = 0: E3 = 0: B3 = 0: B4 = 0: N3 = 0: P7 = 0: P8 = 0: G4 = 0: L5 = 0: L6 = 0: L7 = 0: L8 = 0: L2 = 0 32332 FOR D2 = 1 TO 99: H5(D2) = 0: H3(D2) = 0: NEXT D2 32333 G7 = 0 32334 FOR H8 = 1 TO 99: H7(H8) = 0: NEXT H8 32335 U4 = 0: PZ = 0: P9 = 0: P8 = 0 32337 H8 = 0: H9 = 0 32339 GOTO 5140 32390 REM *** FINAL SELECTION OF MOVE *** 32400 FOR N3 = 1 TO N6 32410 IF N5(N3) > N1 THEN N1 = N5(N3) 32430 NEXT N3 32435 IF N1 < -100000 THEN PRINT "YOU HAVE CHECKMATED ME WELL-DONE": STOP 32440 FOR N3 = 1 TO N6 32450 IF N5(N3) = N1 THEN F5 = N3: F8 = F8 + 1: F9(F5) = F8 32460 NEXT N3 32470 D7 = INT(F8 * RND + 1) 32480 FOR F5 = 1 TO 100 32490 IF F9(F5) = D7 GOTO 32520 32500 NEXT F5 32520 I5 = VAL(LEFT$(NUM1$(Z1(F5)), 1)) 32530 J5 = VAL(MID$(NUM1$(Z1(F5)), 2, 1)): F2 = Z(I5, J5): Z(I5, J5) = 0 32535 I5 = I5 + 64: B1$ = CHR$(I5): B$ = NUM1$(J5): B1$ = B1$ + B$: PRINT "MY MOVE -- FROM "; B1$; " TO "; 32540 I5 = VAL(LEFT$(NUM1$(Z2(F5)), 1)) 32550 J5 = VAL(MID$(NUM1$(Z2(F5)), 2, 1)): Z(I5, J5) = F2 32555 I5 = I5 + 64: B1$ = CHR$(I5): B$ = NUM1$(J5): B1$ = B1$ + B$: PRINT B1$; 32556 IF B8$(F5) = "CHECK" THEN PRINT " CHECK" ELSE PRINT 32557 FOR F5 = 1 TO 100: F9(F5) = 0: NEXT F5 32561 FOR N6 = 1 TO 100: N5(N6) = 0: NEXT N6: N6 = 1 32565 N1 = -1000 32567 E8 = 0 32568 F8 = 0