10 REM CHEKR.ECB 15 REM ...CHECKERS...Reworked for SOL-20, 6-17-80, R.E.H. 20 REM ...AUTHOR: ALAN J. SEGAL 30 REM ...151 SHRUBHOLLOW ROAD ROSLYN, N.Y. 11576 40 REM ...CONVERTED TO CDC BASIC: S. MUELLER 50 DIM R(50),S(10,10),B$(25) 60 LET K$="&K": LET J$="&J": PRINT K$;J$;J$ 70 FOR X=1 TO 22: LET B$=B$+CHR(5): NEXT X 80 PRINT TAB(15);B$ 90 PRINT TAB(15);B$(1,3);" CHECKERS ";B$(1,3) 100 PRINT TAB(15);B$;J$ 110 PRINT " This program will play CHECKERS. The computor" 120 PRINT "is X and you are O. The computor will move first." 130 PRINT J$;"#CAUTION#" 140 PRINT "DO NOT TRY TO DOUBLE JUMP. You will get the" 150 PRINT "chance. The squares are in the form (X,Y)" 160 PRINT "and thus (1,1) is the lower left.": PRINT 170 DATA -1,-1,1,1,1,1 180 READ G,L,X1,X2,Y1,Y2 190 DATA 1,0,1,0,0,0,-1,0 200 DATA 0,1,0,0,0,-1,0,-1 210 FOR X=1 TO 8 220 IF X/2=INT(X/2) THEN RESTORE 200 ELSE RESTORE 190 230 FOR Y=1 TO 8: READ S(X,Y): NEXT Y 240 NEXT X 250 PRINT "WAIT FOR THE COMPUTER TO MOVE." 260 LET L=-1*L 270 FOR X=1 TO 8 280 FOR Y=1 TO 8 290 IF S(X,Y)=0 THEN 370 300 IF G>0 THEN 320 310 IF S(X,Y)>0 THEN 370 ELSE 330 320 IF S(X,Y)<0 THEN 370 330 IF ABS(S(X,Y))<>1 THEN 350 340 GOSUB 450 350 IF ABS(S(X,Y))<>2 THEN 370 360 GOSUB 610 370 IF X<>8 THEN 400 380 IF L=1 THEN 400 390 RETURN 400 NEXT Y 410 NEXT X 420 PRINT 430 GOSUB 1060 440 GOTO 260 450 FOR A=-1 TO 1 STEP 2: REM ...Regular moves 460 LET U=X+A 470 LET V=Y+G 480 IF U<1 OR U>8 THEN 590 490 IF V<1 OR V>8 THEN 590 500 IF S(U,V)=0 THEN GOSUB 820 ELSE 520 510 GOTO 590 520 IF S(U,V)=G THEN 590 530 IF S(U,V)=2*G THEN 590 540 LET U=U+A 550 LET V=V+G 560 IF U<1 OR U>8 THEN 590 570 IF V<1 OR V>8 THEN 590 580 IF S(U,V)=0 THEN GOSUB 820 590 NEXT A 600 RETURN 610 REM ...KING MOVES 620 FOR A=-1 TO 1 STEP 2 630 FOR B=-1 TO 1 STEP 2 640 LET U=X+A 650 LET V=Y+B 660 IF U<1 OR U>8 THEN 780 670 IF V<1 OR V>8 THEN 780 680 IF S(U,V)<>1 THEN 780 690 GOSUB 820 700 GOTO 780 710 IF S(U,V)=G THEN 780 720 IF S(U,V)=2*G THEN 780 730 LET U=U+A 740 LET V=V+B 750 IF U<1 OR U>8 THEN 780 760 IF V<1 OR V>8 THEN 780 770 IF S(U,V)=1 THEN GOSUB 820 780 NEXT B 790 NEXT A 800 RETURN 810 GOTO 1450 820 REM ...SUBROUTINE... 830 LET P=P+1 840 IF P=K THEN 1150 850 IF V<>(4.5+(3.5*G)) THEN 870 860 LET Q=Q+2 870 IF X<>(4.5-(3.5*G)) THEN 890 880 LET Q=Q-2 890 REM ... 900 IF U<>1 THEN 920 910 LET Q=Q+1 920 IF U<>8 THEN 940 930 LET Q=Q+1 940 FOR C=-1 TO 1 STEP 2 950 IF U+C<1 OR V+G<1 THEN 1020 960 IF S(U+C,V+G)<1 THEN 1010 970 LET Q=Q-1 980 IF U-C<1 OR V-G<1 THEN 1020 990 IF S(U-C,V-G)<>1 THEN 1010 1000 LET Q=Q-1 1010 REM ...THIS WAS EVALUATION 1020 NEXT C 1030 LET R(P)=Q 1040 LET Q=0 1050 RETURN 1060 IF P=0 THEN 1910 1070 FOR J=10 TO -10 STEP -1 1080 FOR F=1 TO P 1090 IF R(F)=J THEN EXIT 1120 1100 NEXT F 1110 NEXT J 1120 LET K=F+P 1130 GOSUB 260 1140 RETURN 1150 PRINT K$;" I'll move from (";X;",";Y; 1160 PRINT " ) to (";U;",";V;" )" 1170 LET F=0: LET K=0: LET P=0 1180 IF V<>(4.5+(3.5*G)) THEN 1210 1190 LET S(U,V)=2*G: PRINT "... and get a KING." 1200 GOTO 1220 1210 LET S(U,V)=S(X,Y) 1220 LET S(X,Y)=0 1230 IF ABS(X-U)<>2 THEN 1250 1240 LET S((X+U)/2,(Y+V)/2)=0 1250 GOSUB 1420 1260 RETURN 1270 LET J9=0: REM ..."Extra jumps" Subroutine 1280 FOR X=-1 TO 1 STEP 2 1290 FOR Y=1 TO -1 STEP -2 1300 IF A+X<1 OR A+X>8 THEN 1390 1310 IF B+X<1 OR B+X>8 THEN 1390 1320 IF S(A,B)=1 AND Y=-1 THEN 1390 1330 IF S(A+X,B+Y)>=0 THEN 1390 1340 LET X2=A+(X*2): LET Y2=B+(Y*2) 1350 IF X2<1 OR X2>8 THEN 1390 1360 IF Y2<1 OR Y2>8 THEN 1390 1370 IF S(X2,Y2)=0 THEN LET J9=1 ELSE 1390 1380 LET X3=A: LET Y3=B 1390 NEXT Y 1400 NEXT X 1410 RETURN 1420 PRINT : REM ...DISPLAY the BOARD 1430 PRINT " 1 2 3 4 5 6 7 8" 1440 PRINT " ";B$(1,19) 1450 FOR Y=8 TO 1 STEP -1 1460 PRINT Y;" ";B$(1,1);" "; 1470 FOR X=1 TO 8 1480 LET I=2*X+4 1490 ON S(X,Y)+3 GOTO 1500,1510,1520,1530,1540 1500 PRINT TAB(I);"X*";: GOTO 1550 1510 PRINT TAB(I);"X";: GOTO 1550 1520 PRINT TAB(I);".";: GOTO 1550 1530 PRINT TAB(I);"O";: GOTO 1550 1540 PRINT TAB(I);"O*"; 1550 NEXT X 1560 PRINT " ";B$(1,1) 1570 NEXT Y 1580 PRINT " ";B$(1,19);J$ 1590 IF J9=1 THEN PRINT "You have another jump from ";X3;Y3 1600 IF J9=-1 THEN PRINT "I have another jump." 1610 INPUT "From ---=>",E,H 1620 LET X=E: LET Y=H 1630 IF S(X,Y)<>0 THEN 1660 1640 PRINT 1650 GOTO 1610 1660 INPUT " to ---=>",A,B 1670 LET X=A: LET Y=B 1680 IF S(X,Y)=0 THEN 1720 1690 PRINT "THAT SPACE IS ALREADY OCCUPIED." 1700 PRINT 1710 GOTO 1420 1720 IF J9=0 THEN 1770 1730 IF E=X3 AND H=Y3 THEN 1770 ELSE PRINT "&K" 1740 PRINT "You must continue with the piece at ";X3;Y3 1750 PRINT : GOTO 1420 1760 IF J9=0 THEN 1770 1770 LET S(A,B)=S(E,H): LET J9=0 1780 LET S(E,H)=0 1790 LET T=(4.5-(3.5*G)) 1800 IF ABS(E-A)<>2 THEN 1830 1810 LET S((E+A)/2,(H+B)/2)=0 1820 GOSUB 1270 1830 IF B<>T THEN 1850 1840 LET S(A,B)=-2*G: PRINT "You get a KING." 1850 IF J9>0 THEN 1420 1860 FOR X=8 TO 8 1870 FOR Y=8 TO 8 1880 RETURN 1890 NEXT Y 1900 NEXT X 1910 PRINT J$;"VERY GOOD ... YOU WIN." 1920 END