10 CLEAR : CLS : REM AJEDREZ 15 DIM M(99): DIM T(28): DIM A(28): DIM C(8) 16 DIM D(56): DIM R(8): DIM Z(88): DIM S(64): DIM F(16) 18 REM 20 GOSUB 2970 30 REM GOTO 60 40 GOSUB 2580 50 GOSUB 2820 60 GOSUB 2580 70 REM*********************************************************************** 80 IF A$ = "T" THEN END 90 IF A$ = "I" THEN PRINT "INTERCAMBIAMOS LAS PIEZAS": GOSUB 3540: A$ = " " 100 IF A$ = "R" THEN GOTO 10 110 REM********************************************************************** 120 FOR Z = 1 TO 16: F(Z) = 0: NEXT Z: REM MATRIZ DE LA POSICION DE LAS FICHAS 130 U = 0: REM VARIABLE QUE CUENTA LAS FICHAS 140 REM 145 REM CUENTA LAS FICHAS 150 FOR D = 1 TO 64: IF M(S(D)) >= AN AND M(S(D)) <= TN THEN U = U + 1: F(U) = S(D): IF M(S(D)) = RN THEN SR = S(D) 160 NEXT D: IF U < 3 THEN GOTO 2230 170 D = 100: GOTO 650 175 REM EMPIEZA A BUSCAR JUGADA 180 FOR D = 1 TO U: IF M(F(D)) = RN THEN F(D) = F(U): F(U) = SR 190 NEXT D 200 D = INT(RAN# * 3) 210 IF A$ = "J" THEN D = 0 220 IF D < U THEN D = D + 1 230 Z = F(D): GOSUB 280 240 IF MM = 1 THEN GOSUB 2500: GOTO 40 250 IF D < U THEN GOTO 220 260 GOTO 2360 270 REM DE QUE FICHAS SE OCUPA LA MAQUINA CUANDO PIENSA LA JUGADA 280 IF M(Z) = DN THEN GOSUB 910 290 IF M(Z) = TN THEN GOSUB 1170 300 IF M(Z) = AN THEN GOSUB 1420 310 IF M(Z) = CN THEN GOSUB 1690 320 IF M(Z) = PN THEN GOSUB 2240 330 RETURN 340 REM COMPROBACION DE CASILLA DE SALTO ATACADA POR EL CONTRINCANTE 350 IF M(X) = 114 THEN MM = 0: D = D + 1: RETURN 360 IF X + 9 > 88 THEN GOTO 380 370 IF M(X + 9) < 85 AND M(X + 9) > 64 AND RAN# < .96 THEN RETURN 380 IF X - 11 < 11 THEN GOTO 400 390 IF M(X - 11) < 85 AND M(X - 11) > 64 AND RAN# < .96 THEN RETURN 400 AD = 0 410 AY = 0 420 AX = X + D(AY + AD) 430 IF AX < 11 OR AX > 88 THEN GOTO 460 440 AP = M(AX) 450 IF AP = D OR AP = T AND RAN# > .8 OR AP = A AND RAN# > .5 THEN RETURN 460 AY = AY + 1 470 IF AY < 8 THEN GOTO 420 480 AD = AD + 7 490 IF AD < 56 THEN GOTO 410 500 AY = 1 510 AX = X + C(AY) 520 IF AX < 11 OR AX > 88 THEN GOTO 540 530 IF M(AX) = C THEN RETURN 540 AY = AY + 1 550 IF AY < 9 THEN GOTO 510 560 AY = 1 570 AX = X + R(AY) 580 IF AX < 11 OR AX > 88 THEN GOTO 600 590 IF (M(AX) = R OR M(AX) = P) AND RAN# > .1 THEN RETURN 600 AY = AY + 1 610 IF AY < 9 THEN GOTO 570 620 MM = 1 630 RETURN 640 REM PELIGRO POR PARTE DE LAS PIEZAS HUMANAS 650 Z = SR 660 Y = 0 670 Y = Y + 1 680 X = Z + C(Y) 690 IF X < 11 OR X > 88 THEN 600 700 IF M(X) = C THEN GOTO 1870 710 IF Y < 8 THEN GOTO 670 720 REM VIGILANCIA DE LA REINA LOS ALFILES LAS TORRES Y LOS PEONES 730 L = 0 740 Y = 1 750 X = Z + D(Y + L) 760 IF X < 11 OR X > 88 THEN GOTO 810 770 IF M(X) = A OR M(X) = D OR M(X) = T THEN GOTO 1870 780 IF M(X) <> V THEN GOTO 810 790 Y = Y + 1 800 IF Y < 8 THEN GOTO 750 810 L = L + 7 820 IF L < 49 THEN GOTO 750 830 X = Z + 11 840 IF X > 88 THEN GOTO 860 850 IF M(X) = P THEN 1870 860 X = Z - 11 870 IF X < 11 THEN GOTO 180 880 IF M(X) = P THEN GOTO 1870 890 GOTO 180 900 REM 910 L = 0 920 Y = 1 930 X = Z + D(Y + L) 940 IF X < 11 OR X > 88 THEN GOTO 1000 950 IF M(X) = 42 OR M(X) >= AN AND M(X) <= TN THEN GOTO 1000 960 IF M(X) >= A AND M(X) <= T THEN GOSUB 350: IF MM <> 1 THEN GOTO 1000 970 IF MM = 1 THEN RETURN 980 Y = Y + 1 990 IF Y < 7 THEN GOTO 930 1000 L = L + 7 1010 IF L < 42 THEN GOTO 920 1020 RETURN 1030 REM 1040 L = 0 1050 Y = 1 1060 X = Z + D(Y + L) 1070 IF X < 11 OR X > 88 THEN GOTO 1130 1080 IF M(X) <> V THEN GOTO 1130 1090 IF RAN# > .5 THEN GOSUB 350: IF MM = 0 THEN GOTO 1130 1100 IF MM = 1 THEN RETURN 1110 Y = Y + 1 1120 IF Y < 8 THEN GOTO 1060 1130 L = L + 7 1140 IF L < 49 THEN GOTO 1050 1150 RETURN 1160 REM 1170 L = 0 1180 Y = 1 1190 X = Z + T(Y + L) 1200 IF X < 11 OR X > 88 THEN GOTO 1260 1210 IF M(X) = 42 OR M(X) >= AN AND M(X) <= TN THEN GOTO 1690 1220 IF M(X) >= A AND M(X) <= T THEN GOSUB 350: IF MM = 0 THEN GOTO 1260 1230 IF MM = 1 THEN RETURN 1240 Y = Y + 1 1250 IF Y < 7 THEN GOTO 1190 1260 L = L + 7 1270 IF L < 21 THEN GOTO 1180 1280 RETURN 1290 REM 1300 L = 0 1310 Y = 1 1320 X = Z + T(Y + L) 1330 IF X < 11 OR X > 88 THEN GOTO 1390 1340 IF M(X) <> V THEN GOTO 1390 1350 IF RAN# < .1 THEN GOSUB 350 1360 IF MM = 1 THEN RETURN 1370 Y = Y + 1 1380 IF Y < 7 THEN GOTO 1320 1390 L = L + 7 1400 IF L < 21 THEN GOTO 1310 1410 RETURN 1420 IF M(Z) <> AN THEN RETURN 1430 L = 0 1440 Y = 1 1450 X = Z + A(Y + L) 1460 IF X < 11 OR X > 88 THEN GOTO 1520 1470 IF M(X) = 42 OR M(X) >= AN AND M(X) <= TN THEN GOTO 1520 1480 IF M(X) >= A AND M(X) <= T THEN GOSUB 350: IF MM <> 1 THEN GOTO 1520 1490 IF MM = 1 THEN RETURN 1500 Y = Y + 1 1510 IF Y < 7 THEN GOTO 1450 1520 L = L + 7 1530 IF L < 21 THEN GOTO 1440 1540 RETURN 1550 REM 1560 L = 0 1570 Y = 1 1580 X = Z + A(Y + L) 1590 IF X < 11 OR X > 88 THEN GOTO 1650 1600 IF M(X) <> V THEN GOTO 1650 1610 IF RAN# > .05 THEN GOSUB 350: IF MM <> 1 THEN GOTO 1650 1620 IF MM = 1 THEN RETURN 1630 Y = Y + 1 1640 IF Y < 7 THEN GOTO 1580 1650 L = L + 7 1660 IF L < 21 THEN GOTO 1570 1670 RETURN 1680 REM 1690 Y = 1 1700 X = Z + C(Y) 1710 IF X < 11 OR X > 88 THEN GOTO 1750 1720 IF M(X) = 42 THEN GOTO 1750 1730 IF M(X) >= A AND M(X) <= T THEN GOSUB 350 1740 IF MM = 1 THEN RETURN 1750 Y = Y + 1 1760 IF Y < 9 THEN GOTO 1700 1770 RETURN 1780 REM MOVIMIENTO DEL CABALLO 1790 Y = 0 1800 X = Z + C(INT(RAN# * 8 + 1)) 1810 IF X < 11 OR X > 88 THEN GOTO 1800 1820 IF M(X) = 42 THEN GOTO 1800 1830 Y = Y + 1 1840 IF M(X) = V THEN GOSUB 350 1850 IF MM = 1 OR Y > 20 THEN RETURN 1860 GOTO 1800 1870 YR = 1 1880 Z = SR 1890 X = Z + R(YR): X1 = X 1900 IF X < 11 OR X > 88 THEN GOTO 2200 1910 IF M(X) = 42 OR M(X) > 64 AND M(X) < 85 THEN GOTO 2200 1920 IF M(X) > 96 AND M(X) < 117 THEN GOTO 2200 1930 Z = X 1940 Y = 0 1950 Y = Y + 1 1960 X = Z + C(Y) 1970 IF X < 11 OR X > 88 THEN GOTO 1990 1980 IF M(X) = C THEN GOTO 2200 1990 IF Y < 8 THEN GOTO 1950 2000 REM 2010 L = 0 2020 Y = 1 2030 X = Z + D(Y + L) 2040 IF X < 11 OR X > 88 THEN GOTO 2090 2050 IF M(X) = A OR M(X) = D OR M(X) = T THEN GOTO 2200 2060 IF M(X) <> V THEN GOTO 2090 2070 Y = Y + 1 2080 IF Y < 8 THEN GOTO 2030 2090 L = L + 7 2100 IF L < 49 THEN GOTO 2030 2110 X = Z + 11 2120 IF X > 88 THEN GOTO 2140 2130 IF M(X) = P THEN GOTO 2200 2140 X = Z - 11 2150 IF X < 11 THEN GOTO 2170 2160 IF M(X) = P THEN GOTO 2200 2170 X = X1: Z = SR 2180 MM = 1 2190 GOSUB 2500: GOTO 40 2200 YR = YR + 1 2210 Z = SR 2220 IF YR < 9 THEN GOTO 1880 2230 PRINT "ME RINDO KASPAROV!!!!": END 2240 X = Z + 9 2250 IF M(X) >= A AND M(X) <= T THEN MM = 1: IF M(X) = P AND RAN# < .2 THEN MM = 0 2260 IF MM = 1 THEN RETURN 2270 IF Z = 12 THEN RETURN 2280 X = Z - 11 2290 IF M(X) >= A AND M(X) <= T THEN MM = 1: IF M(X) = P AND RAN# < .2 THEN MM = 0 2300 RETURN 2310 REM 2320 IF Z - 10 * (INT(Z / 10)) = 7 AND M(Z - 1) = V AND M(Z - 2) = V AND (M(Z - 13) = V OR M(Z - 13) = 42) AND (M(Z + 7) = V OR M(Z + 7) = 42) THEN X = Z - 2: MM = 1: RETURN 2330 IF M(Z - 1) = V AND M(Z - 12) < 97 AND M(Z + 8) < 97 THEN X = Z - 1: MM = 1: RETURN 2340 IF RAN# < .05 AND M(Z - 1) = V THEN X = Z - 1: MM = 1 2350 RETURN 2355 REM BUSCAR JUGADA QUE NO IMPLIQUE COMER A SU CONTRINCANTE******************** 2360 D = INT(RAN# * RAN# * 5) 2365 IF D > U THEN GOTO 2360 2370 IF D < U THEN D = D + 1 2380 Z = F(D) 2390 IF M(Z) = PN THEN GOSUB 2320 2400 IF M(Z) = CN THEN GOSUB 1790 2410 IF M(Z) = AN THEN GOSUB 1560 2420 IF M(Z) = TN THEN GOSUB 1300 2430 IF M(Z) = DN THEN GOSUB 1040 2440 IF M(Z) = RN AND A$ <> "J" AND RAN# < .07 THEN GOSUB 1870 2450 IF MM = 0 AND D < U THEN GOTO 2370 2460 IF MM = 1 THEN GOSUB 2500: GOTO 40 2470 UK = UK + 1: IF UK > 8 THEN GOTO 2230 2480 GOTO 2360 2490 REM PENSAR JUGADA******************************************************* 2500 BEEP 2505 IF M(Z) = RN AND A$ <> "J" AND RAN# > .1 THEN MM = 0: GOTO 2365 2510 IF M(Z) = PN AND ((X - 10 * INT(X / 10) > Z - 10 * INT(Z / 10) OR ABS(X - Z) > 11)) THEN MM = 0: U = U + 1: GOTO 230 2520 IF M(X) = R THEN PRINT "JAQUE LAUCHERO": MM = 0: U = U + 1: GOTO 230 2530 M(X) = M(Z): M(Z) = V 2540 PRINT "YO MUEVO DESDE "; 2550 FZ = INT(Z / 10): PRINT CHR$(FZ + 64); Z - 10 * FZ; " A "; : FX = INT(X / 10): PRINT CHR$(FX + 64); X - 10 * FX: FOR O = 1 TO 1500: NEXT O 2555 REM ***************************************************************************** 2560 RETURN 2570 REM********************************************************************* 2580 REM LOCATE 1, 1: REM CLS 2590 REM 2600 FOR X = 8 TO 1 STEP -1 2610 REM PRINT TAB(10); X; " "; 2620 FOR Y = 10 TO 80 STEP 10 2630 IF M(Y + 1) = PN THEN M(Y + 1) = DN 2640 IF M(Y + 8) = P THEN M(Y + 8) = D 2650 REM PRINT CHR$(M(X + Y)); " "; 2660 NEXT Y: NEXT X: MM = 0 2665 REM 2670 REM PRINT 2680 REM 2690 RETURN 2700 Z = SR 2710 QK = 0 2720 M = Z + R(QK) 2730 IF M < 11 OR M > 88 THEN GOTO 2780 2740 IF M(M) = 42 OR M(M) > 64 AND M(M) < 85 OR MM = 0 THEN GOTO 2780 2750 X = M 2760 SR = Z 2770 RETURN 2780 IF QK < 8 THEN GOTO 2720 2790 IF A$ <> "J" THEN RETURN 2800 GOTO 2230 2810 REM 2820 PRINT 2830 INPUT "DESDE (LETRA,NUMERO)"; A$ 2835 IF A$ = "FIN" OR A$ = "fin" THEN END 2840 IF LEN(A$) <> 2 THEN GOTO 2820 2850 INPUT "HASTA"; B$ 2860 IF LEN(B$) <> 2 THEN GOTO 2850 2870 X = 10 * (ASC(A$) - 64) + VAL(RIGHT$(A$, 1)) 2880 Y = 10 * (ASC(B$) - 64) + VAL(RIGHT$(B$, 1)) 2890 PRINT "SELECCIONE J PARA DAR JAQUE" 2910 PRINT "I PARA INTERCAMBIAR LADOS" 2920 PRINT "T PARA TERMINAR EL JUEGO" 2925 PRINT "R PARA RECOMENZAR" 2930 INPUT "O BIEN EXE PARA CONTINUAR"; A$ 2935 CLS 2940 IF M(Y) >= 65 AND M(Y) <= 84 AND M(Y) <> 67 THEN GOSUB 3660 2950 M(Y) = M(X): M(X) = 46: RETURN 2960 REM INICIALIZACION 2970 CLS : PRINT "POR FAVOR PONGA EL TECLADO EN MAYUSCULAS": PRINT " Y A CONTINUACION PULSE RETURN" 2990 CLS 3000 REM 3010 MM = 0: A$ = "" 3030 P = 112: T = 116: A = 97: C = 99: D = 100: R = 114: V = 46 3040 PN = 80: TN = 84: AN = 65: CN = 67: DN = 68: RN = 82 3050 FOR Z = 1 TO 99: M(Z) = -99: NEXT Z 3060 REM 3070 FOR Z = 1 TO 64: READ X: READ Y: M(X) = Y: NEXT Z 3080 DATA 18,84,28,67,38,65,48,68 3090 DATA 58,82,68,65,78,67,88,84 3100 DATA 17,80,27,80,37,80,47,80 3110 DATA 57,80,67,80,77,80,87,80 3120 DATA 16,46,26,46,36,46,46,46 3130 DATA 56,46,66,46,76,46,86,46 3140 DATA 15,46,25,46,35,46,45,46 3150 DATA 55,46,65,46,75,46,85,46 3160 DATA 14,46,24,46,34,46,44,46 3170 DATA 54,46,64,46,74,46,84,46 3180 DATA 13,46,23,46,33,46,43,46 3190 DATA 53,46,63,46,73,46,83,46 3200 DATA 12,112,22,112,32,112,42,112 3210 DATA 52,112,62,112,72,112,82,112 3220 DATA 11,116,21,99,31,97,41,100 3230 DATA 51,114,61,97,71,99,81,116 3240 REM 3250 RESTORE 3270 3255 REM VALORES DE MATRIZ PARA JUGADAS DE CABALLO 3260 FOR Z = 1 TO 8: READ C(Z): NEXT Z 3270 DATA 19,-19,21,-21,-8,8,12,-12 3275 REM VALORES PARA JUGADAS DE LA TORRE 3280 FOR Z = 1 TO 28: READ T(Z): NEXT Z 3290 DATA 10,20,30,40,50,50,50 3300 DATA -1,-2,-3,-4,-5,-5,-5 3310 DATA -10,-20,-30,-40,-50,-50,-50 3320 DATA 1,2,3,4,5,5,5 3330 RESTORE 3350 3335 REM VALORES PARA JUGADAS DEL ALFIL 3340 FOR Z = 1 TO 28: READ A(Z): NEXT Z 3350 DATA -11,-22,-33,-44,-55,-55,-55 3360 DATA 11,22,33,44,55,55,55 3370 DATA 9,18,27,36,45,45,45 3380 DATA -9,-18,-27,-36,-45,-45,-45 3390 RESTORE 3290 3400 FOR Z = 1 TO 56: READ D(Z): NEXT Z 3410 FOR Z = 1 TO 8: READ R(Z): NEXT Z 3420 DATA 1,11,9,10,-10,-9,-11,-1 3425 REM ORDEN DE COMPROBACION DE CASILLAS 3430 FOR Z = 1 TO 64: READ S(Z): NEXT Z 3440 DATA 46,56,36,66,47,57,45,55 3450 DATA 37,67,35,65,28,78,27,77 3460 DATA 44,54,26,76,38,68,17,87 3470 DATA 18,88,34,64,25,75,16,86 3480 DATA 48,24,74,15,85,14,84,43 3490 DATA 53,33,62,23,73,52,42,62 3500 DATA 32,83,13,72,22,12,82,41 3510 DATA 51,31,61,21,71,11,81,58 3520 RETURN 3530 REM CAMBIO DE LADOS 3540 FOR Z = 11 TO 88: Z(Z) = M(Z): NEXT Z 3550 FOR Z = 11 TO 88: X = Z - 10 * INT(Z / 10) 3560 IF X = 0 OR X = 9 THEN GOTO 3580 3570 M(Z) = Z(Z + 9 - X * 2) 3580 NEXT Z 3590 FOR Z = 11 TO 88: M = M(Z) 3600 IF M >= A THEN M(Z) = M(Z) + PN - P 3610 IF M <= TN AND M >= AN THEN M(Z) = M(Z) - PN + P 3620 NEXT Z 3630 GOSUB 2580 3640 RETURN 3650 REM 3660 MC = INT(RAN# * 4) + 1 3670 ON MC GOSUB 3690, 3700, 3710, 3720 3680 FOR J = 1 TO 1: NEXT J: RETURN 3690 PRINT "JUGADA ESTUPIDA!": RETURN 3700 PRINT "MAL MOVIMIENTO": RETURN 3710 PRINT "MALA MOVIDA ": RETURN 3720 PRINT "MATE EN SEIS JUGADAS": RETURN 3730 REM RINT "*****************************" 3740 GOSUB 3800 3750 REM FOR X = 8 TO 1 STEP -1 3760 REM LPRINT TAB(5); X; " "; 3770 REM FOR Y = 10 TO 80 STEP 10 3780 REM LPRINT CHR$(M(X + Y)); " "; 3790 REM NEXT Y: LPRINT X: NEXT X 3800 REM LPRINT : LPRINT TAB(9); "A B C D E F G H": LPRINT 3810 RETURN