THE
PAST
MASTER
CLUB
A SIMPLE CHESS GAME FOR TWO
1 '' CH.BAS COPYRIGHTED NICK VAN VLIET 1993 TRANSLATED OCT/99 û
10 COLOR 1, 1, 4: CLS :
20 Q = 1: F = Q - Q: R = Q + Q: P = R + Q: S = P + Q: D = S + Q: T = D + Q: U = T + Q: V = U + Q: W = V + Q: Y = 15: X = T: Z = 22
30 OPEN "o", #1, "CHESLIST"
40 Z$ = " rnbqkbnr"
50 Z$ = Z$ + " pppppppp"
60 Z$ = Z$ + " "
70 Z$ = Z$ + " "
80 Z$ = Z$ + " "
90 Z$ = Z$ + " "
100 Z$ = Z$ + " PPPPPPPP"
110 Z$ = Z$ + " RNBQKBNR"
111 '' --KING IN CHECK ?--
112 ''
120 COLOR X: COLOR 11, S, P
130 LOCATE Q, Q: PRINT " CODEBREAKER "; : COLOR F, S: PRINT " NICK VAN VLIET ";
140 COLOR Y, D: PRINT " "; : PRINT DATE$; " "; : PRINT TIME$; : PRINT " "; :
COLOR Y, F
150 PRINT " CHESS FOR TWO ": COLOR X, X
160 A$ = " "
170 D$ = "RNBQKBNR"
180 C$ = "PPPPPPPP"
190 LOCATE R, Q: COLOR P, P: PRINT A$; : COLOR S, P: PRINT "CAP LOCK "; : COLOR F, Y:
PRINT " CASTLE: 2L. or 2R. EP: 1L. or 1R. ": COLOR F, X
200 LOCATE P, Q: PRINT " "; : PRINT CHR$(201); : FOR I = 1 TO 3: PRINT CHR$(205); :
NEXT I
210 FOR I = 1 TO 7
220 PRINT CHR$(203); : FOR H = 1 TO 3: PRINT CHR$(205); : NEXT H: NEXT I
230 PRINT CHR$(187); : GOSUB 2070
240 COLOR Y, X: PRINT "1"; : COLOR F, X: FOR I = 1 TO 8: PRINT CHR$(186);
250 IF I = R * INT(I / R) THEN COLOR F, X ELSE COLOR F, Y
260 PRINT " "; MID$(D$, I, 1); " "; : COLOR F, X
270 NEXT I: PRINT CHR$(186); : GOSUB 2070
280 GOSUB 2040
290 IF U$ = "Y" THEN B$ = Z$ ELSE B$ = B$
300 COLOR Y, X: PRINT "2"; : COLOR F, X: FOR I = 1 TO 8: PRINT CHR$(186);
310 IF I = R * INT(I / R) THEN COLOR F, Y ELSE COLOR F, X
320 PRINT " P "; : COLOR F, X
330 NEXT I: PRINT CHR$(186); : GOSUB 2070
340 GOSUB 2040
350 COLOR Y, X: PRINT "3"; : COLOR F, X: FOR I = 1 TO 8: PRINT CHR$(186);
360 IF I = R * INT(I / R) THEN COLOR F, X ELSE COLOR X, Y
370 PRINT " "; : COLOR F, X
380 NEXT I: PRINT CHR$(186); : GOSUB 2070
390 GOSUB 2040
400 COLOR Y, X: PRINT "4"; : COLOR F, X: : FOR I = 1 TO 8: PRINT CHR$(186);
410 IF I = R * INT(I / R) THEN COLOR F, Y ELSE COLOR F, X
420 PRINT " "; : COLOR F, X
430 NEXT I: PRINT CHR$(186); : GOSUB 2070
440 GOSUB 2040
450 COLOR Y, X: PRINT "5"; : COLOR F, X: FOR I = 1 TO 8: PRINT CHR$(186);
460 IF I = R * INT(I / R) THEN COLOR F, X ELSE COLOR X, Y
470 PRINT " "; : COLOR F, X
480 NEXT I: PRINT CHR$(186); : GOSUB 2070
490 GOSUB 2040
500 COLOR Y, X: PRINT "6"; : COLOR F, X: FOR I = 1 TO 8: PRINT CHR$(186);
510 IF I = R * INT(I / R) THEN COLOR X, Y ELSE COLOR F, X
520 PRINT " "; : COLOR F, X
530 NEXT I: PRINT CHR$(186); : GOSUB 2070
540 GOSUB 2040
550 COLOR Y, X: PRINT "7"; : COLOR F, X: FOR I = 1 TO 8: PRINT CHR$(186);
560 IF I = R * INT(I / R) THEN COLOR Y, X ELSE COLOR Y, Y
570 PRINT " P "; : COLOR F, X
580 NEXT I: PRINT CHR$(186); : GOSUB 2070
590 GOSUB 2040
600 COLOR Y, X: PRINT "8"; : COLOR F, X: FOR I = 1 TO 8: PRINT CHR$(186);
610 IF I = R * INT(I / R) THEN COLOR Y, Y ELSE COLOR Y, X
620 PRINT " "; MID$(D$, I, 1); " "; : COLOR F, X
630 NEXT I: PRINT CHR$(186); : GOSUB 2070
640 PRINT " "; : PRINT CHR$(200); : FOR I = 1 TO 3: PRINT CHR$(205); : NEXT I
650 FOR I = 1 TO 7
660 PRINT CHR$(202); : FOR H = 1 TO 3: PRINT CHR$(205); : NEXT H: NEXT I
670 PRINT CHR$(188); : GOSUB 2070
680 COLOR Y, P: PRINT " A B C D E F G H "
690 C$ = " "
700 DIM P$(W): DIM Q$(S): DIM D$(U): LOCATE Z, Q: COLOR Y, Q
710 U$ = "Y"
720 '' INPUT "STARTING A NEW GAME OR CONTINUEING A SAVED GAME ?(Y/N) ",U$
730 LOCATE Z, Q: IF U$ = "Y" THEN B$ = Z$ ELSE B$ = B$
740 IF U$ = "N" THEN PRINT " '' EMBER TO "; CHR$(34); "GOTO 900"; CHR$(34); C$
750 D$(Q) = "K1810"
760 D$(R) = "Q8810"
770 D$(P) = "R8414"
780 D$(S) = "N1820"
790 D$(D) = "B8410"
800 D$(T) = "p1640"
810 D$(U) = "P1630"
820 Q$(Q) = "-12-10012010-01-11001011002-02"
830 Q$(R) = "-13-23-21-09013023021009"
840 Q$(P) = "-01001-12-10-11-22"
850 Q$(S) = "-01001012010011022"
860 LOCATE P, 40: PRINT " WHITE BLACK": N = F: NUM = F
870 PRINT #1, " WHITE BLACK"
880 LOCATE S, 40: PRINT " ---------------"
890 DIM EP(R, 11): DIM R(R, R): DIM K(R)
900 '' ******MAIN LOOP******
910 ZZ = F
920 COLOR T, T: FOR I = Q TO V: FOR H = Q TO V
930 LOCATE R * (I - Q) + S, S * (H - Q) + S: G = 11 * (I - Q) + P + H
940 IF G = R * INT(G / R) THEN COLOR Y, Y ELSE COLOR T, T
950 K = ASC(MID$(B$, G, Q)): IF K < 97 THEN COLOR Y ELSE COLOR F
960 PRINT CHR$(K + (K > 97) * 32)
970 NEXT H: NEXT I: IF ZZ THEN RETURN
980 N = -(N = F): N1 = -(N = F): NUM = NUM + N: O$ = B$
990 LOCATE S + NUM - 10 * INT(NUM / 10), 39: COLOR F, Q: IF N THEN PRINT NUM; A$
1000 IF N THEN J$ = "WHITE " ELSE J$ = "BLACK "
1010 FOR I = Q TO 11: EP(N + Q, I) = F: NEXT I
1020 '' ***ERROR LOOP***
1030 Y$ = "": COLOR Y, Q: LOCATE Z, Q: PRINT A$; A$: B$ = O$
1040 I = F: LOCATE Z, Q: PRINT "FROM SQUARE ? "; : GOSUB 1840: KF = K
1050 K4 = K: K3 = K2: PRINT "-"; : IF B <> P THEN GOTO 1020
1060 Y$ = Y$ + X$ + K$ + "-": I = S: LOCATE Z, Q: PRINT "TO SQUARE ? ": GOSUB 1840: KT = K
1070 K5 = K: K6 = F: IF B > Q THEN GOTO 1020
1080 '' --JUMPS--
1090 Y$ = Y$ + X$ + K$: AA = F: KC = F: FLAG = Q: GOSUB 1330: IF FLAG THEN GOTO 1020
1100 K$ = MID$(B$, KF, Q): MID$(B$, KT, Q) = K$: MID$(B$, KF, Q) = " ": ZZ = Q: GOSUB 920
1110 '' --KING IN CHECK ?--
1120 KC = KF: GOSUB 1230: IF FLAG THEN GOTO 1200
1130 IF ASC(K$) = 75 + N1 * 32 THEN K(N + Q) = Q
1140 IF ASC(K$) = 82 + N1 * 32 THEN R(N + Q, -(K3 = S) - (K3 = 11)) = Q
1150 IF N THEN PRINT #1, NUM; " "; Y$; " "; ELSE PRINT #1, Y$
1160 GOTO 900
1170 PRINT #1, Y$ + "-" + X$ + K$ + " "; : IF N1 THEN PRINT #1, ""
1180 IF MID$(O$, KC, Q) = "K" OR MID$(O$, KC, Q) = "k" THEN GOTO 1260
1190 GOTO 900
1200 '' --DISCOVERED CHECK--
1210 LOCATE Z, Q: COLOR 27: PRINT "DISCOVERED CHECK";
1220 ZZ = Q: B$ = O$: GOSUB 920: GOTO 1020
1230 '' ***IS KING IN CHECK?***
1240 A = ASC("K") + 32 * N1: FOR K = Q TO 88: IF A = ASC(MID$(B$, K, Q)) THEN GOTO 1280
1250 NEXT K
1260 LOCATE Z, Q: COLOR 27: PRINT "KING IS KILLED!: GAME OVER! ";
1270 INPUT "", U$: CHAIN "GAME"
1280 KT = K: FOR M = S TO 88: K = M: GOSUB 1910: IF B <> F THEN GOTO 1310
1290 KF = M: N = -(N = F): N1 = -(N = F): K = M: GOSUB 1330: N = -(N = F): N1 = -(N = F)
1300 IF FLAG THEN RETURN
1310 NEXT M
1320 RETURN
1330 '' ***JUMPS***
1340 A = ASC(MID$(B$, KF, Q)): IF A > 97 THEN A = A + 32 * (A <> 112)
1350 FOR I = Q TO U
1360 IF A = ASC(MID$(D$(I), Q, Q)) THEN GOTO 1390
1370 NEXT I
1380 LOCATE Z, Q: COLOR 27: PRINT "***ERROR****"; A$; : INPUT U$: CHAIN "CH"
1390 FOR H = Q TO VAL(MID$(D$(I), P, Q)) - R * (I = Q): K = KF
1400 G = P * (VAL(MID$(D$(I), D, Q)) + H - Q) + Q
1410 G = VAL(MID$(Q$(VAL(MID$(D$(I), S, Q))), G, P))
1420 FOR L = Q TO VAL(MID$(D$(I), R, Q))
1430 K = K + G: GOSUB 1910
1440 IF B > Q THEN GOTO 1520
1450 IF K = KT THEN FLAG = -(FLAG = F)
1460 IF B = F AND I = Q AND H > V THEN GOTO 1520
1470 IF B = F AND I > D AND H > S THEN RETURN
1480 IF FLAG AND KC THEN RETURN
1490 IF FLAG = F AND KC = F THEN GOTO 1540
1500 IF B = F THEN GOTO 1520
1510 NEXT L
1520 NEXT H
1530 RETURN
1540 IF I < T AND I > Q THEN RETURN
1550 IF B = Q AND H > U THEN GOTO 1710
1560 IF B = Q AND H = T AND KF > 14 + 55 * N AND KF < 23 + 55 * N THEN EP(N + Q, K2) = Q
1570 IF B = F AND H < P AND KF > 36 + 11 * N1 AND KF < 45 + 11 * N1 THEN GOTO 1670
1580 IF B = Q AND H = D AND KT > 3 + 77 * N1 AND KT < 12 + 77 * N1 THEN GOTO 1610
1590 IF B = F AND (H = P OR H = S) AND KT > 3 + 77 * N1 AND KT < 12 + 77 * N1 THEN GOTO 1610
1600 RETURN
1610 '' --PAWN PROMOTION--
1620 LOCATE Z, Q: INPUT "PAWNPROMOTION (Q/R/N/B)?", X$
1630 X = ASC(X$): IF X$ = "Q" OR X$ = "R" OR X$ = "N" OR X$ = "B" THEN GOTO 1650
1640 GOTO 1610
1650 Y$ = Y$ + ">" + CHR$(X + 32 * N1): MID$(B$, K4, Q) = CHR$(X + 32 * N1)
1660 RETURN
1670 '' --EPKILL--
1680 IF EP(N1 + Q, K3 + G) = F THEN RETURN
1690 MID$(B$, K5, Q) = MID$(B$, K4, Q): MID$(B$, K4, Q) = " ": KF = KT: KT = KT + (N1 - N) * 11
1700 RETURN
1710 '' --CASTLE--
1720 IF K(N + Q) OR R(N + Q, -(K3 = S) - R * (K3 = 11)) THEN RETURN
1730 G = G / R: K = K4: FOR I = Q TO R - (G = -Q): K = K + G: GOSUB 1910
1740 IF B <> Q THEN FLAG = Q
1750 IF FLAG THEN RETURN
1760 NEXT I: KJ = K + G
1770 KF = K4: K = K4: CK = K + G: FOR M = Q TO R: K = K + G: MID$(B$, K, Q) = MID$(B$, KF, Q)
1780 MID$(B$, KF, Q) = " ": ID = K: KG = G: KM = M
1790 '' --KING IN CHECK ?--
1800 KC = Q: GOSUB 1280: IF FLAG THEN RETURN
1810 K = ID: KF = K: M = KM: G = KG: NEXT M
1820 KT = CK: KF = KJ
1830 RETURN
1840 '' ***PRINT ROW & COLUMN***
1850 LOCATE Z + Q, Q: PRINT J$; : INPUT "", X$
1852 IF X$ = "Q" OR A$ = "q" THEN CLOSE #1: CHAIN "GAME"
1858 E = ASC("1"): A = ASC(MID$(X$, Q, Q)) - E
1860 LOCATE Z, Q: PRINT A$, A$, A$, A$,
1870 IF (A < 0 OR A > 7) THEN GOTO 1850
1880 E = ASC("A"): AA = ASC(MID$(X$, R, Q)) - E
1890 IF (AA < 0 OR AA > 7) THEN GOTO 1850
1900 K = 11 * A + AA + 4: K6 = K:
LOCATE S + NUM - 10 * INT(NUM / 10), (43 + I + N1 * V): PRINT X$;
1910 '' ***SQUARE ID***
1920 K1 = INT((K - .5) / 11): K2 = K - 11 * K1
1930 '' --OFF BOARD--
1940 B = R: IF K2 < S OR K < S OR K > 88 THEN RETURN
1950 '' LOCATE 19,40:PRINT "10030 K=";K;" K1=";K1;" K2=";K2;" B$=";K$;" "
1960 K$ = MID$(B$, K, Q): A = ASC(K$): IF K6 THEN PRINT K$;
1970 '' --EMPTY--
1980 B = Q: IF K$ = " " THEN RETURN
1990 '' --OWN--
2000 B = P: IF ((A > 65 + 32 * N1) AND (A < 83 + 32 * N1)) THEN RETURN
2010 '' --OPPONENT--
2020 B = F
2030 RETURN
2040 PRINT " "; CHR$(204); : FOR I = Q TO P: PRINT CHR$(205); : NEXT I
2050 FOR I = Q TO U: PRINT CHR$(206); : FOR H = Q TO P: PRINT CHR$(205);
NEXT H: NEXT I
2060 PRINT CHR$(185); : GOSUB 2070: RETURN
2070 PRINT " "; : COLOR P, P: PRINT " ": COLOR F, X:
RETURN
9900 '' --SAVE PROGRAM--
9910 '' SAVE"CH.BAS"
9920 '' COLOR 15,1,1:CLS
9930 '' SYSTEM
END
RETURN TO TOP
PREVIOUS MENU
PMC MENU
HOME PAGE