Compucolor.org – Virtual Media

Listing of file='CHESS.BAS;01' on disk='vmedia/bounce_ball-sector.ccvf'

50 PLOT 15,6,6,12,27,24
60 DIM B(100),P(6,20)
100 REM  LOAD THE BOARD
110 PLOT 27,4:PRINT "LOAD CHESS.DSP":PLOT 27,27
120 PL$(1)= "WHITE":PL$(3)= "BLACK"
130 FOR K= 1TO 6:READ P$(K):NEXT :DATA "PAWN","KNIGHT","BISHOP","ROOK","QUEEN","KING"
200 REM  SET UP BOARD SQUARES
210 FOR K= 12TO 89:B(K)= 0:NEXT
220 FOR K= 1TO 9:B(K)= 99:NEXT
230 FOR K= 92TO 100:B(K)= 99:NEXT
240 FOR K= 10TO 90STEP 10:B(K)= 99:B(K+ 1)= 99:NEXT
250 REM  GET DATA FOR PRINTING PIECES
260 LOAD "P.ARY"
300 REM  SET UP INITIAL PIECE CONFIGURATION
310 PL(1)= 1:PL(2)= - 1:PLOT 15,8
320 PRINT "DO YOU WISH":PRINT "TO PLAY"
330 INPUT "WHITE? ";A$:A$= LEFT$ (A$,1)
340 IF A$= "N"THEN PL(1)= - 1:PL(2)= 1:GOTO 360
350 IF A$< > "Y"AND A$< > "O"THEN GOSUB 6520:GOTO 330
360 PLOT 8:GOSUB 6500
1000 REM  ROOKS
1002 B(12)= PL(2)* 4:B(19)= PL(2)* 4:B(82)= PL(1)* 4:B(89)= PL(1)* 4
1010 REM  KNIGHTS
1012 B(13)= PL(2)* 2:B(18)= PL(2)* 2:B(83)= PL(1)* 2:B(88)= PL(1)* 2
1020 REM  BISHOPS
1022 B(14)= PL(2)* 3:B(17)= PL(2)* 3:B(84)= PL(1)* 3:B(87)= PL(1)* 3
1030 REM  PAWNS
1032 FOR K= 22TO 29:B(K)= PL(2):NEXT
1034 FOR K= 72TO 79:B(K)= PL(1):NEXT
1040 REM  KINGS & QUEENS
1042 B(15)= (5- (PL(2)= 1))* PL(2)
1044 B(16)= (5- (PL(2)= - 1))* PL(2)
1046 B(85)= (6+ (PL(1)= 1))* PL(1)
1048 B(86)= (6+ (PL(1)= - 1))* PL(1)
2000 FC= 17+ (PL(2)= - 1)
2010 FOR S= 12TO 19:GOSUB 3000:NEXT
2050 FOR S= 22TO 29:GOSUB 3000:NEXT
2100 FC= 17+ (PL(1)= - 1)
2110 FOR S= 72TO 79:GOSUB 3000:NEXT
2150 FOR S= 82TO 89:GOSUB 3000:NEXT
2160 GOTO 8000
2200 END
3000 REM DRAW A PIECE
3010 GOSUB 4000:GOSUB 5000:K= ABS (B(S))
3020 PLOT 30,BC,29,FC,3,X,Y
3025 PLOT 2,254
3030 FOR J= 1TO 5:PLOT P(K,J):NEXT :GOSUB 6000
3040 FOR J= 6TO 10:IF P(K,J)= 255THEN GOSUB 7000:GOTO 3060
3050 PLOT P(K,J)
3060 NEXT J
3070 GOSUB 6000
3080 FOR J= 11TO 15:IF P(K,J)= 255THEN GOSUB 7000:GOTO 3100
3090 PLOT P(K,J)
3100 NEXT J
3110 GOSUB 6000
3120 FOR J= 16TO 20:PLOT P(K,J):NEXT :PLOT 255:RETURN
4000 REM  SET UP FOREGROUND AND BACKGROUND COLORS
4002 REM  S=SQUARE ON WHICH TO DRAW A PIECE
4004 REM  BC=BACKGROUND COLOR, FC=FOREGROUND COLOR
4006 REM  FC HAS BEEN SET TO 16 FOR BLACK AND 17 FOR WHITE
4010 BC= 20:S1= INT (S/ 10):IF S1/ 2= INT (S1/ 2)THEN 4040
4020 IF S/ 2= INT (S/ 2)THEN BC= 22
4030 RETURN
4040 IF S/ 2< > INT (S/ 2)THEN BC= 22
4050 RETURN
5000 REM  DETERMINE WHERE TO DRAW THE PIECE
5002 REM  S IS GIVEN AS THE SQUARE NUMBER (12-89)
5004 REM  NOW DETERMINE ITS PLOT POSITION
5010 Y= INT ((S- 1)/ 10)
5020 X= (S- (10* Y+ 2))* 6+ 16
5030 Y= (Y- 1)* 4
5040 RETURN
6000 REM 
6010 PLOT 255,26,26,26,26,26,10,2,254:RETURN
6500 FOR SP= 1TO 8:PRINT SPC( 13)"":NEXT :RETURN
6520 PLOT 28:PRINT SPC( 13)"":PLOT 28:RETURN
7000 REM 
7010 PLOT 255,30,FC,32,30,BC,29,2,254:RETURN
7400 REM  CHECK FOR CASTLING
7410 D= T3- F3:IF ABS (D)< > 2THEN RETURN
7415 PLOT 6,5,3,0,Y1+ 5:PRINT "CASTLES"
7420 F4= T3+ 2* SGN (D):IF B(F4)= 99THEN F4= F4- SGN (D)
7430 S= F4:GOSUB 7500:T4= F3+ SGN (D):B(T4)= B(F4):B(F4)= 0
7440 S= T4:GOSUB 3000:RETURN
7500 REM  ERASE A SQUARE
7510 GOSUB 4000:PLOT 30,BC:GOSUB 5000
7515 PLOT 3,X,Y
7520 FOR SP= 1TO 4:PRINT SPC( 5):PLOT 10,26,26,26,26,26:NEXT :PLOT 29:PRINT :RETURN
7900 FLG= 0:IF LEN (A$)< > 2THEN FLG= - 1:GOSUB 6520:RETURN
7910 IF LEFT$ (A$,1)< "A"OR LEFT$ (A$,1)> "H"OR RIGHT$ (A$,1)< "1"OR RIGHT$ (A$,1)> "8"THEN FLG= - 1:GOSUB 6520
7920 RETURN
7950 PRINT :PRINT "ILLEGAL!":FOR T= 1TO 500:NEXT :RETURN
8000 P= - 1
8100 REM  BEGIN EACH MOVE HERE
8110 P= - P:FC= 17+ (P= - 1):Y1= ABS (P+ PL(1))* 8
8120 PLOT 15,6,2,3,0,Y1:GOSUB 6500:PLOT 3,0,Y1
8140 PRINT PL$(2- P)" MOVES"
8150 INPUT "FROM: ";A$:GOSUB 7900:IF FLGTHEN 8150
8160 F1= ASC (LEFT$ (A$,1))- 63:F2= 90- 10* VAL (RIGHT$ (A$,1)):F3= F1+ F2
8170 IF SGN (B(F3))< > SGN (P)THEN GOSUB 7950:GOTO 8120
8200 INPUT "TO: ";A$:GOSUB 7900:IF FLGTHEN 8120
8210 T1= ASC (LEFT$ (A$,1))- 63:T2= 90- 10* VAL (RIGHT$ (A$,1)):T3= T1+ T2
8220 IF SGN (B(T3))= SGN (P)THEN GOSUB 7950:GOTO 8120
8224 DL= ABS (T3- F3)
8225 GOSUB 9000:IF FLGTHEN GOSUB 7950:GOTO 8120
8230 IF B(T3)< > 0THEN PLOT 21:PRINT :PRINT P$(ABS (B(F3)))" TAKES":PRINT P$(ABS (B(T3)))
8240 B(T3)= B(F3):B(F3)= 0:S= F3:GOSUB 7500
8250 S= T3:GOSUB 3000:IF ABS (B(T3))= 6THEN GOSUB 7400
8260 GOTO 8110
9000 FLG= 0:ON ABS (B(F3))GOTO 11000,12000,13000,14000,15000,16000
11000 IF DL> 20THEN FLG= - 1:RETURN
11005 IF DL= 10AND B(T3)< > 0THEN FLG= - 1:RETURN
11010 IF ((DL= 9)OR (DL= 13))AND (B(T3)= 0)THEN FLG= - 1:RETURN
11015 RETURN
12000 RETURN
13000 RETURN
14000 IF (DL> 7)AND (DL/ 10< > INT (DL/ 10))THEN FLG= - 1:RETURN
14005 RETURN
15000 RETURN
16000 IF DL< > 1AND (DL< 9OR DL> 11)THEN FLG= - 1:RETURN
16005 RETURN