Listing of file='CHESS' on disk='vmedia/more_games.wvd.zip'
# Sector 388, program filename = 'CHESS' 0010 REM % CHESS : REM CHESS GAME : REM 07/10/80 CDH : REM 0105 PRINT : PRINT HEX(0306);AT(6,32);BOX(1,14);" C H E S S " : PRINT HEX(0A0A);TAB(23); : INPUT "DO YOU WANT INSTRUCTIONS (Y OR N)",Q$ : IF Q$="Y" THEN GOSUB 6070 : H5=8 : I5=4 0180 DATA -5,-3,-4,-9,-7,-4,-3,-5,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,5,3,4,9,7,4,3 ,5 0200 DIM B(8,8),M(8),C$(2,7)27,A$25,Z1$1 : F1,F2,F4,F9,R,S1,S6,S8,V6=0 : MAT READ B 0201 C$(1,1),C$(2,1)=HEX(C0C0C0C0C00A0808080808C0C0C0C0C00A0808080808C0C0C0C0C 0) 0202 C$(1,2)=HEX(C0C0C0C0C00A0808080808C0E8EDC0C00A0808080808C0FAFAD0C0) 0204 C$(1,3)=HEX(C0C0C0C0C00A0808080808C0F0D6D5C00A0808080808C0F8F5D5C0) 0206 C$(1,4)=HEX(C0C0C0C0C00A0808080808C0C8DDC0C00A0808080808C0FAFAD0C0) 0208 C$(1,5)=HEX(C0C0C0C0C00A0808080808C0EDEDC5C00A0808080808C0FAFAD0C0) 0210 C$(1,6)=HEX(C0D0D4D0C00A0808080808C0FBEBD1C00A0808080808C0FAFAD0C0) 0212 C$(1,7)=HEX(C0F0FEF4D00A0808080808C0F8D5FDD00A0808080808C0FAF5FFD0) 0222 C$(2,2)=HEX(C0C0C0C0C00A0808080808C0E8FDC0C00A0808080808C0FAFFD0C0) 0224 C$(2,3)=HEX(C0C0C0C0C00A0808080808C0F0FED5C00A0808080808C0F8FFD5C0) 0226 C$(2,4)=HEX(C0C0C0C0C00A0808080808C0C8DDC0C00A0808080808C0FAFFD0C0) 0228 C$(2,5)=HEX(C0C0C0C0C00A0808080808C0EDFDC5C00A0808080808C0FAFFD0C0) 0230 C$(2,6)=HEX(C0D0D4D0C00A0808080808C0FBFFD1C00A0808080808C0FAFFD0C0) 0232 C$(2,7)=HEX(C0F0FEF4D00A0808080808C0F8FFFDD00A0808080808C0FAFFFFD0) 0400 PRINT TAB(31); : INPUT "WHAT IS YOUR NAME",Z$ : PRINT 0460 PRINT HEX(0306); : FOR K=1TO 8 : PRINT AT(0,0);BOX(K*3,K*6);AT((8-K)*3,(8-K)*6);BOX(K*3,K*6) : NEXT K 0465 GOSUB 5700 0470 GOSUB 2770 : GOSUB 750 : GOTO 470 0520 ON ABS(B(C,D))+1 GOTO 540,570,540,600,630,660,540,690,540,720 : GOTO 540 0530 ON ABS(B(X,Y))+1 GOTO 540,570,540,600,630,660,540,690,540,720 0540 C0=1 : D$="CHARACTER ERROR" : RETURN 0570 C0=2 : D$="PAWN" : RETURN 0600 C0=3 : D$="KNIGHT" : RETURN 0630 C0=4 : D$="BISHOP" : RETURN 0660 C0=5 : D$="ROOK" : RETURN 0690 C0=6 : D$="QUEEN" : RETURN 0720 C0=7 : D$="KING" : RETURN 0750 GOSUB 5700 : IF R<1 THEN 1080 : IF V6>-10 THEN 900 : C=H2 : D=I2 : FOR X=1 TO 8 : FOR Y=1 TO 8 : IF B(X,Y)<=0 THEN 850 : GOSUB 1720 : IF Q=1 THEN 1660 0850 NEXT Y,X 0870 GOSUB '100 : PRINT AT(2,50);"AFTER";R;"MOVES, IT'S";AT(3,50);"A STALEMATE. GOOD PLAY. " : GOTO 6260 0900 FOR X=X8 TO X9 : FOR Y=Y8 TO Y9 : IF B(X,Y)<=0 THEN 1020 : FOR C=1 TO 8 : FOR D=1 TO 8 : IF B(C,D)>0 THEN 1000 : GOSUB 1720 : IF Q=0 THEN 1000 : GOSUB 4260 : IF Q=1 THEN 1080 1000 NEXT D,C 1020 NEXT Y,X : IF C5=0 THEN 870 : GOSUB '100 : PRINT AT(2,50);"THE COMPUTER HAS DEFEATED YOU";AT(3,50);"IN";R;"MOVES ";Z $;"." : GOTO 6260 1080 FOR K=19TO 21 : PRINT AT(K,50,29); : NEXT K : PRINT AT(19,50); "WHERE IS THE PIECE YOU WANT";AT(20,50);"TO MOVE (R,C)"; : INPUT X,Y : IF X<>10 THEN 1220 : GOSUB 4760 : IF F9=0 THEN 1080 : R=R+1 : GOSUB '100 : GOTO 1690 1210 GOTO 1080 1220 IF X>8OR Y>8OR X<1OR Y<1 OR B(X,Y)<=0 THEN 1210 : GOSUB 530 : FOR K=19TO 22 : PRINT AT(K,50,29); : NEXT K : PRINT AT(19,50);"PLAYER MOVES, ";D$;AT(20,50);"TO WHERE (R,C)"; : INPUT C,D : IF C=0 THEN 1080 : IF C>8OR D>8OR C<1OR D<1 THEN 1210 : IF B(C,D)<=0 THEN 1340 : PRINT HEX(07) : GOTO 1080 1340 GOSUB '100 : IF X<>4OR C<>3OR ABS(Y-D)<>1OR B(X,Y)<>1OR M(D)<>1 THEN 1440 : GOSUB 4260 : IF Q=0 THEN 1480 : B(X,D)=0 : PRINT AT(0,50);"YOU TAKE MY PAWN, EN PASSENT" : GOTO 1540 1440 GOSUB 1720 : IF Q=0 THEN 1490 : GOSUB 4260 : IF Q=1 THEN 1510 1480 PRINT AT(22,50);"YOU CAN'T MOVE INTO CHECK." 1490 PRINT AT(22,50);"ILLEGAL MOVE." : GOTO 1080 1510 GOSUB '100 : IF B(C,D)=0 THEN 1540 : GOSUB 520 : PRINT AT(0,50);"PLAYER TAKES MY ";D$ 1540 B(C,D)=B(X,Y) : R=R+1 : IF B(C,D)=9THEN F2=1 : IF B(C,D)<>5 THEN 1600 : IF Y=8 THEN F1=1 : IF Y=1 THEN F4=1 1600 B(X,Y)=0 : IF B(C,D)<>1OR C<>1 THEN 1690 : B(C,D)=7 : GOSUB '100 : PRINT AT(0,50);"(PLAYER PROMOTES TO QUEEN)" : GOTO 1690 1660 GOSUB '100 : PRINT AT(0,50);"CONGRATULATIONS ";Z$;",";AT(1,50);"YOU HAVE CHECKMATED TH E";AT(2,50);"COMPUTER IN";R;"MOVES." : GOTO 6260 1690 PRINT HEX(06) : PRINT AT(1,50);"ACCEPTED" : GOSUB 5700 : RETURN 1720 ON ABS(B(X,Y)) GOTO 1730,1950,1950,2230,2010,1950,2570,1950,2600 1730 IF ABS(Y-D)>1 OR ABS(X-C)>2 THEN 2750 : IF B(X,Y)>0 THEN 1850 : IF B(C,D)=0 THEN 1790 : IF C<>X+1 THEN 2750 : GOTO 1870 1790 IF C=X+1 THEN 1830 : IF C<>4OR X<>2OR B(3,D)<>0 THEN 2750 1830 IF D<>Y THEN 2750 : GOTO 2730 1850 IF B(C,D)=0 THEN 1890 : IF C<>X-1 THEN 2750 1870 IF ABS(D-Y)<>1 THEN 2750 : GOTO 2730 1890 IF C=X-1 THEN 1830 : IF C<>5OR X<>7OR B(6,D)<>0 THEN 2750 : GOTO 1830 1950 IF ABS(C-X)>2 OR ABS(D-Y)>2OR X=COR Y=DOR ABS(C-X)=ABS(D-Y) THEN 2750 : GOTO 2730 2010 IF X=C THEN 2130 : IF Y<>D THEN 2750 : IF ABS(C-X)=1 THEN 2730 : IF X>C THEN 2090 : FOR K=X+1 TO C-1 : IF B(K,D)<>0 THEN 2750 : NEXT K : GOTO 2730 2090 FOR K=C+1 TO X-1 : IF B(K,D)<>0 THEN 2750 : NEXT K : GOTO 2730 2130 IF ABS(D-Y)=1 THEN 2730 : IF Y>D THEN 2190 : FOR K=Y+1 TO D-1 : IF B(X,K)<>0 THEN 2750 : NEXT K : GOTO 2730 2190 FOR K=D+1 TO Y-1 : IF B(X,K)<>0 THEN 2750 : NEXT K : GOTO 2730 2230 IF ABS(C-X)<>ABS(D-Y) THEN 2750 : D4=D : C4=C : IF ABS(C-X)<>1 THEN 2280 : IF ABS(D-Y)=1 THEN 2730 2280 IF C<X OR D<Y THEN 2360 : FOR L=1 TO C-X-1 : D4=D4-1 : C4=C4-1 : IF B(C4,D4)<>0 THEN 2750 : NEXT L : GOTO 2730 2360 IF C>XOR D>Y THEN 2440 : FOR L=1 TO X-C-1 : C4=C4+1 : D4=D4+1 : IF B(C4,D4)<>0 THEN 2750 : NEXT L : GOTO 2730 2440 IF X<C THEN 2510 : FOR L=1 TO X-C-1 : C4=C4+1 : D4=D4-1 : IF B(C4,D4)<>0 THEN 2750 : NEXT L : GOTO 2730 2510 FOR L=1 TO C-X-1 : C4=C4-1 : D4=D4+1 : IF B(C4,D4)<>0 THEN 2750 : NEXT L : GOTO 2730 2570 IF X=COR Y=D THEN 2010 : GOTO 2230 2600 IF ABS(C-X)>1OR ABS(Y-D)>1 THEN 2750 : IF X<>Y THEN 2640 : IF C=D THEN 2750 2640 FOR X3=C-1 TO C+1 : FOR Y3=D-1 TO D+1 : IF X3>8OR Y3>8OR X3<1OR Y3<1 THEN 2710 : IF B(X3,Y3)+B(X,Y)=0 THEN 2750 2710 NEXT Y3,X3 2730 Q=1 : RETURN 2750 Q=0 : RETURN 2770 X8,Y8=8 : X9,Y9,C9,D9=1 : FOR H=1 TO 8 : M(H)=0 : FOR I=1 TO 8 : IF B(H,I)<=0 THEN 2900 : IF H<X8 THEN X8=H : IF I<Y8 THEN Y8=I : IF H>X9 THEN X9=H : IF I>Y9 THEN Y9=I : IF B(H,I)<>9 THEN 2960 : H5=H : I5=I 2900 IF B(H,I)=0 THEN 2960 : IF H>C9 THEN C9=H : IF I>D9 THEN D9=I : IF B(H,I)<>-9 THEN 2960 : H2=H : I2=I 2960 NEXT I,H : V6=-10 : P1,C8=0 : FOR X=1 TO C9 : FOR Y=1 TO D9 : IF B(X,Y)>=0 THEN 3400 : FOR C=1 TO 8 : FOR D=1 TO 8 : IF B(C,D)<0 THEN 3380 : GOSUB 1720 : IF Q=0 THEN 3380 : GOSUB 3820 : IF M8=10 THEN 3380 : IF C8=1 THEN GOSUB 4470 3110 V4=V4+2.5*RND(1)/(ABS(C-H5)+ABS(D-I5)) : IF S6=1 THEN 3260 : IF X<>1 THEN 3230 : IF Y=4 THEN V4=V4+1 3150 IF S1=1 THEN 3190 : IF Y>3 THEN 3190 : IF Y=1 THEN V4=V4-1 3180 IF Y>1 THEN V4=V4+1.2 3190 IF S8=1 THEN 3260 : IF Y<5 THEN 3230 : IF Y<8 THEN V4=V4+1.2 : IF Y=8 THEN V4=V4-1 3230 IF X<>2 THEN 3260 : IF Y=2OR Y=5 THEN V4=V4+1 3260 V5=B(C,D)+V4 : IF C<>8 THEN 3270 : IF B(X,Y)=-1 THEN V5=V5+3 3270 IF V5<V6 THEN 3380 : V6=V5 : X6=X : Y6=Y : C5=C8 : C6=C : D6=D : Y6=Y 3380 NEXT D,C 3400 NEXT Y,X : IF V6=-10 THEN 3740 : IF S6=1 THEN 3510 : IF V6>2 THEN 3510 : IF S1=1 THEN 3480 : GOSUB 5420 : IF S6=1 THEN 3790 3480 IF S8=1 THEN 4830 : GOSUB 5270 : IF S6=1 THEN 3790 3510 X=X6 : Y=Y6 : C=C6 : D=D6 : GOSUB 530 : IF B(X,Y)=-1 AND C=X+2 THEN M(D)=1 : GOSUB '100 : PRINT AT(0,50,29);AT(2,50);"COMPUTER MOVES ";AT(3,50);D$;" TO";C;",";D : IF B(C,D)=0 THEN 3630 : GOSUB 520 : PRINT AT(4,50);"AND TAKES YOUR ";D$ 3630 B(C,D)=B(X,Y) : IF C5=1 THEN PRINT AT(5,50);"...AND YOU'RE IN CHECK!" : B(X,Y)=0 : IF C<>8 THEN 3690 : IF B(C,D)<>-1 THEN 3690 : PRINT AT(4,50);"COMPUTER PROMOTES TO QUEEN" : B(C,D)=-7 3690 PRINT : IF X<>H2 THEN 3740 : IF Y<>I2 THEN 3740 : H2=C : I2=D 3740 IF B(C,D)=-9 THEN S6=1 : IF B(C,D)<>-5 THEN RETURN : IF Y=1 THEN S1=1 : IF Y=8 THEN S8=8 : RETURN 3790 GOSUB '100 : PRINT AT(2,50); : PRINT "COMPUTER CASTLES." : RETURN 3820 X2=X 3830 C2=C 3840 D2=D 3850 Y2=Y 3860 P4=B(C,D) 3870 Z7=C9 3880 Z4=D9 3890 B(C,D)=B(X,Y) 3900 C8,M8,V4,B(X,Y)=0 3910 IF C>C9 THEN 3912 : GOTO 3920 3912 C9=C 3920 IF D>D9 THEN 3922 : GOTO 3930 3922 D9=D 3930 FOR C=1 TO C9 3940 FOR D=1 TO D9 3950 IF B(C,D)>=-1 THEN 4070 3960 FOR X=X8 TO X9 3970 FOR Y=Y8 TO Y9 3980 IF B(X,Y)<=0 THEN 4050 3990 GOSUB 1720 4000 IF Q=0 THEN 4050 4010 N4=B(C,D) 4020 IF N4=-9 THEN 4022 : GOTO 4030 4022 M8=10 4030 IF ABS(N4)<B(X,Y) THEN 4032 : GOTO 4040 4032 GOSUB 5830 4040 IF N4<V4 THEN 4042 : GOTO 4050 4042 V4=N4 4050 NEXT Y,X 4070 NEXT D,C 4090 X=C2 4100 Y=D2 4110 C=H5 4120 D=I5 4130 IF C>Z7 THEN 4132 : GOTO 4140 4132 C9=Z7 4140 IF D>Z4 THEN 4142 : GOTO 4150 4142 D9=Z4 4150 GOSUB 1720 4160 IF Q=0 THEN 4190 4170 C8=1 4180 V4=V4+1 4190 C=C2 4200 D=D2 4210 X=X2 4220 Y=Y2 4230 B(X,Y)=B(C,D) 4240 B(C,D)=P4 4250 RETURN 4260 X2=X 4270 Y2=Y 4280 C2=C 4290 D2=D 4300 P4=B(C,D) 4310 B(C,D)=B(X,Y) 4320 B(X,Y)=0 4330 IF B(C,D)=9 THEN 4360 4340 C=H5 4350 D=I5 4360 FOR X=1 TO 8 4370 FOR Y=1 TO 8 4380 IF B(X,Y)>=0 THEN 4410 4390 GOSUB 1720 4400 IF Q=1 THEN 4450 4410 NEXT Y,X 4430 Q=1 4440 GOTO 4190 4450 Q=0 4460 GOTO 4190 4470 E5=B(C,D) 4480 E1=X 4490 E2=Y 4500 E3=C 4510 E4=D 4520 B(C,D)=B(X,Y) 4530 B(X,Y)=0 4540 FOR X=X8 TO X9 4550 FOR Y=Y8 TO Y9 4560 IF B(X,Y)<=0 THEN 4660 4570 FOR C=1 TO 8 4580 FOR D=1 TO 8 4590 IF B(C,D)>0 THEN 4640 4600 GOSUB 1720 4610 IF Q=0 THEN 4640 4620 GOSUB 4260 4630 IF Q=1 THEN 4690 4640 NEXT D,C 4660 NEXT Y,X 4680 V4=100 4690 X=E1 4700 Y=E2 4710 C=E3 4720 D=E4 4730 B(X,Y)=B(C,D) 4740 B(C,D)=E5 4750 RETURN 4760 FOR K=19TO 22 : PRINT AT(K,50,29); : NEXT K : PRINT AT(19,50);"(CASTLING)" 4770 A$=" " 4780 IF F9=1 THEN 4782 : GOTO 4790 4782 A$="CASTLED PREVIOUSLY" 4790 IF F2=1 THEN 4792 : GOTO 4800 4792 A$="ALREADY MOVED YOUR KING" 4800 IF C5=1 THEN 4802 : GOTO 4810 4802 A$="CAN'T CASTLE OUT OF CHECK" 4810 IF A$<>" " THEN 4940 : PRINT AT(20,50);"KING'S SIDE OR QUEEN'S";AT(21,50);"(ENTER K OR Q)"; 4830 INPUT V$ 4840 IF V$="K" THEN 4900 4850 IF F1=1 THEN 4852 : GOTO 4860 4852 GOSUB 5250 4860 FOR G1=5 TO 6 4870 GOSUB 5100 4880 NEXT G1 4890 GOTO 4940 4900 FOR G1=2 TO 3 4910 IF F4=1 THEN 4912 : GOTO 4920 4912 GOSUB 5250 4920 GOSUB 5100 4930 NEXT G1 4940 IF A$=" " THEN 4990 4950 F9=0 4960 PRINT AT(22,50);"YOU ";A$ 4980 RETURN 4990 F9=1 5000 B(8,4)=0 5010 IF V$="K" THEN 5060 5020 B(8,6)=9 5030 B(8,8)=0 5040 B(8,5)=5 5050 RETURN 5060 B(8,2)=9 : B(8,1)=0 : B(8,3)=5 : RETURN 5100 IF B(8,G1)<>0 THEN 5230 : D=G1 : C=8 : FOR X=1 TO 8 : FOR Y=1 TO 8 : IF B(X,Y)>=0 THEN 5180 : GOSUB 1720 : IF Q=1 THEN 5210 5180 NEXT Y,X : RETURN 5210 A$="HAVE CONTROLLED SQUARES" : RETURN 5230 A$="HAVE A PIECE BETWEEN" : RETURN 5250 A$="ALREADY MOVED YOUR ROOK" : RETURN 5270 C=1 5280 FOR D=2 TO 4 5290 GOSUB 5570 5300 IF Q=1 THEN RETURN 5310 NEXT D 5320 X,Y=1 5330 D=3 5340 GOSUB 3820 5350 IF V4<-2 THEN RETURN 5360 B(1,4),B(1,1)=0 5370 B(1,2)=-9 5380 I2=2 5390 B(1,3)=-5 5400 S6=1 : RETURN 5420 C=1 5430 FOR D=4 TO 7 5440 GOSUB 5570 5450 IF Q=1 THEN RETURN 5460 NEXT D 5470 X,C=1 5480 Y=8 5490 D=5 5500 GOSUB 3820 5510 IF V4<-2 THEN RETURN 5520 B(1,4),B(1,8)=0 5530 B(1,6)=-9 5540 I2=6 5550 B(1,5)=-5 5560 GOTO 5400 5570 Q=0 5580 IF B(C,D)=-9 THEN 5600 5590 IF B(C,D)<>0 THEN 5680 5600 FOR X=X8 TO X9 5610 FOR Y=Y8 TO Y9 5620 IF B(X,Y)<=0 THEN 5650 5630 GOSUB 1720 5640 IF Q=1 THEN RETURN 5650 NEXT Y,X : RETURN 5680 Q=1 : RETURN 5700 PRINT HEX(06010202020F); 5705 FOR C=1 TO 8 : FOR D=1 TO 8 : GOSUB 520 5710 IF C=1 OR C=3 OR C=5 OR C=7 THEN 5720 : IF D=2 OR D=4 OR D=6 OR D=8 THEN PRINT HEX(020400020E); : ELSE PRINT HEX(0F); : GOTO 5730 5720 IF D=1 OR D=3 OR D=5 OR D=7 THEN PRINT HEX(020400020E); : ELSE PRINT HEX(0F); 5730 PRINT AT((C-1)*3,(D-1)*6+1); 5740 IF B(C,D)>=0 THEN PRINT C$(1,C0); : ELSE PRINT C$(2,C0); 5750 PRINT HEX(01) : NEXT D,C : PRINT HEX(0F) : RETURN 5830 IF N4<-6 THEN RETURN : X1=X : Y1=Y : C1=C : D1=D : P6=N4 : B(C,D)=B(X,Y) : B(X,Y)=0 : FOR X=1 TO C9 : FOR Y=1 TO D9 : IF B(X,Y)>=0 THEN 5960 : GOSUB 1720 : IF Q=1 THEN 5990 5960 NEXT Y,X : GOTO 6000 5990 N4=0 6000 B(X1,Y1)=B(C1,D1) : B(C1,D1)=P6 : X=X1 : Y=Y1 : C=C1 : D=D1 : RETURN 6070 PRINT HEX(0603) : FOR K=1TO 8 : PRINT AT(0,0);BOX(K,K*2);AT(8-K,(8-K)*2);BOX(K,K*2) : NEXT K : FOR K=1TO 8 : PRINT AT(K-1,17);K : NEXT K : PRINT AT(8,0);" 1 2 3 4 5 6 7 8" : PRINT 6080 PRINT "AS THE COMPUTER REQUESTS IT, INPUT THE" : PRINT "COORDINATES OF YOUR MOVE- FIRST THE" : PRINT "LOCATION OF THE PIECE, THEN THE DESTINATION." : PRINT "TYPE X,Y WHERE X IS THE RANK (ROW) AND Y IS" : PRINT "THE FILE (COLUMN)" : PRINT : PRINT "\D3\D0\C5\C3\C9\C1\CC\A0\D2\D5\CC\C5\D3" 6140 PRINT " TO CASTLE, TYPE 10,10" : PRINT " TO START A MOVE ALL OVER, TYPE 0,0" : PRINT " TO MOVE EN PASSENT, GIVE COORDINATES AS USUAL" : PRINT : RETURN 6260 FOR P=1 TO 500 : NEXT P 6270 PRINT AT(19,50);"DO YOU WANT TO PLAY ANOTHER";AT(20,50);"GAME ";Z$;"? (Y /N)"; : LINPUT Z1$ : IF Z1$ = "N" THEN 6280 : IF Z1$ <> "Y" THEN 6270 : GOTO 105 6280 DEFFN'16 : LOAD DC T#0,"START" 7000 DEFFN'100 : PRINT HEX(06) : FOR K=0TO 22 : PRINT AT(K,50,29) : NEXT K : RETURN 8990 DEFFN'31 : SCRATCH T"CHESS" : SAVE T()"CHESS"