File CHECKR.BA (BASIC source file)

Directory of image this file is from
This file as a plain text file

50 REMARKABLY TRANSLATED TO OS8 BASIC BY KAY R. FISHER ...DEC
100 PRINT"  THIS PROGRAM WILL PLAY CHECKERS.  THE COMPUTER IS X,"
200 PRINT"AND YOU ARE O. THE COMPUTER WILL GO FIRST,-NOTE: SQUARES"
300 PRINT"ARE IN THE FORM-(X,Y) AND SQ. 1,1 IS THE BOTTOM LEFT!"
400 PRINT"DO NOT ATTEMPT A DOUBLE JUMP OR YOUR PIECE MIGHT JUST "
500 PRINT"DISAPPEAR(SAME FOR A TRIPLE!)"
600 PRINT"     WAIT FOR THE COMP. TO MOVE!!!!!"
700 LET G=-1
800 DIM R(50)
900 LET L=-1
1000 DIM S(10,10)
1100 DATA 1,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,-1,15
1200 FOR X=1 TO 8
1300 FOR Y=1 TO 8
1400 READ J
1500 IF J=15 THEN 1800
1600 LET S(X,Y)=J
1700 GOTO 2000
1800 RESTORE
1900 READ S(X,Y)
2000 NEXT Y
2100 NEXT X
2200 REM
2300 LET L=-1*L
2400 FOR X=1 TO 8
2500 FOR Y=1 TO 8
2600 IF S(X,Y)=0 THEN 3500
2700 IF G>0 THEN 3000
2800 IF S(X,Y)>0 THEN 3500
2900 GOTO 3100
3000 IF S(X,Y)<0 THEN 3500
3100 IF ABS(S(X,Y))<>1 THEN 3300
3200 GOSUB 4300
3300 IF ABS(S(X,Y))<>2 THEN 3500
3400 GOSUB 6500
3500 IF X<>8 THEN 3800
3600 IF L=1 THEN 3800
3700 RETURN
3800 NEXT Y
3900 NEXT X
4000 PRINT
4100 GOSUB 11400
4200 GOTO 2300
4300 FOR A=-1 TO 1 STEP 2
4400 LET U=X+A
4500 LET V=Y+G
4600 IF U<1 THEN 6300
4700 IF U>8 THEN 6300
4800 IF V<1 THEN 6300
4900 IF V>8 THEN 6300
5000 IF S(U,V)<>0 THEN 5300
5100 GOSUB 9100
5200 GOTO 6300
5300 IF S(U,V)=G THEN 6300
5400 IF S(U,V)=2*G THEN 6300
5500 LET U=U+A
5600 LET V=V+G
5700 IF U<1 THEN 6300
5800 IF U>8 THEN 6300
5900 IF V<1 THEN 6300
6000 IF V>8 THEN 6300
6100 IF S(U,V)<>0 THEN 6300
6200 GOSUB 9100
6300 NEXT A
6400 RETURN
6500 REM KING MOVES
6600 FOR A=-1 TO 1 STEP 2
6700 FOR B=-1 TO 1 STEP 2
6800 LET U=X+A
6900 LET V=Y+B
7000 IF U<1 THEN 8700
7100 IF U>8 THEN 8700
7200 IF V<1 THEN 8700
7300 IF V>8 THEN 8700
7400 IF S(U,V)<>0 THEN 7700
7500 GOSUB 9100
7600 GOTO 8700
7700 IF S(U,V)=G THEN 8700
7800 IF S(U,V)=2*G THEN 8700
7900 LET U=U+A
8000 LET V=V+B
8100 IF U<1 THEN 8700
8200 IF U>8 THEN 8700
8300 IF V<1 THEN 8700
8400 IF V>8 THEN 8700
8500 IF S(U,V)<>0 THEN 8700
8600 GOSUB 9100
8700 NEXT B
8800 NEXT A
8900 RETURN
9000 GOTO 14200
9100 REM
9200 LET P=P+1
9300 IF P=K THEN 12300
9400 IF V<>(4.5+(3.5*G)) THEN 9600
9500 LET Q=Q+2
9600 IF X<>(4.5-(3.5*G)) THEN 9800
9700 LET Q=Q-2
9800 REM
9900 IF U<>1 THEN 10100
10000 LET Q=Q+1
10100 IF U<>8 THEN 10300
10200 LET Q=Q+1
10300 FOR C=-1 TO 1 STEP 2
10400 IF S(U+C,V+G)<1 THEN 10800
10500 LET Q=Q-1
10600 IF S(U-C,V-G)<>0 THEN 10800
10700 LET Q=Q-1
10800 REM THIS WAS THE EVALUATION SECTION
10900 REM
11000 NEXT C
11100 LET R(P)=Q
11200 LET Q=0
11300 RETURN
11400 IF P=0 THEN 18800
11500 FOR J=10 TO -10 STEP -1
11600 FOR F=1 TO P
11700 IF R(F)=J THEN 12000
11800 NEXT F
11900 NEXT J
12000 LET K=F+P
12100 GOSUB 2300
12200 RETURN
12300 PRINT"  I MOVE FROM (";X;Y;") TO (";U;V;")"
12400 LET F=0
12500 LET P=0
12600 LET K=0
12700 IF V<>(4.5+(3.5*G)) THEN 13000
12800 LET S(U,V)=2*G
12900 GOTO 13100
13000 LET S(U,V)=S(X,Y)
13100 LET S(X,Y)=0
13200 IF ABS(X-U)<>2 THEN 13400
13300 LET S((X+U)/2,(Y+V)/2)=0
13400 PRINT"BOARD";
13500 INPUT D$
13600 IF D$<>"YES" THEN 13900
13700 GOSUB 14100
13800 RETURN
13900 GOSUB 15800
14000 RETURN
14100 PRINT
14200 FOR Y=8 TO 1 STEP -1
14300 FOR X=1 TO 8
14400 LET I=2*X
14500 IF S(X,Y)<>0 THEN 14700
14600 PRINT TAB (I);".";
14700 IF S(X,Y)<>1 THEN 14900
14800 PRINT TAB(I);"O";
14900 IF S(X,Y)<>-1 THEN 15100
15000 PRINT TAB(I);"X";
15100 IF S(X,Y)<>-2 THEN 15300
15200 PRINT TAB(I);"X";TAB(I);"*";
15300 IF S(X,Y)<>2 THEN 15500
15400 PRINT TAB(I);"O";TAB(I);"*";
15500 NEXT X
15600 PRINT
15700 NEXT Y
15800 PRINT
15900 PRINT"FROM";
16000 INPUT E,H
16100 LET X=E
16200 LET Y=H
16300 IF S(X,Y)<>0 THEN 16700
16400 PRINT "THERE IS NO ONE OCCUPING THAT SPACE"
16500 PRINT
16600 GOTO 15900
16700 PRINT"TO";
16800 INPUT A,B
16900 LET X=A
17000 LET Y=B
17100 IF S(X,Y)=0 THEN 17500
17200 PRINT "THAT SPACE IS ALREADY OCCUPIED"
17300 PRINT
17400 GOTO 16700
17500 LET S(A,B)=S(E,H)
17600 LET S(A,B)=S(E,H)
17700 LET S(E,H)=0
17800 LET T=(4.5-(3.5*G))
17900 IF ABS(E-A)<>2 THEN 18100
18000 LET S((E+A)/2,(H+B)/2)=0
18100 IF B<>T THEN 18300
18200 LET S(A,B)=-2*G
18300 FOR X=8 TO 8
18400 FOR Y=8 TO 8
18500 RETURN
18600 NEXT Y
18700 NEXT X
18800 PRINT"   VERY GOOD,  YOU WIN!"
18900 PRINT
19000 PRINT
19100 PRINT "                     -CHUCK OUT"
19200 END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search