Listing of file='JCHECK.BAS;01' on disk='vmedia/chip_106-sector.ccvf'
10 REM J-CHECKERS 20 REM FILE "N","JCHECK",1,384,1 30 POKE 32940,223:POKE 32941,191 40 CLEAR 200:GOSUB 3110:OUT 8,255 50 PLOT 12,15,6,2 60 POKE 33282,195:POKE 33283,224:POKE 33284,191 70 GOTO 210 80 REM SCROLL 90 LN= LN+ 1:IF LN< = 12THEN PLOT 3,37,LN:RETURN 100 IF LN> 12THEN LN= 12 110 A1= CALL (0) 120 PLOT 3,37,12:PRINT TAB( 25)"":PLOT 3,37,12 130 RETURN 140 REM KEYBOARD INPUT 150 OUT 8,255:POKE 33278,0 160 X= PEEK (33278):IF X= 0GOTO 160 170 IF X= 83THEN PLOT 3,37,LN:PRINT "SAVE GAME":GOTO 3560 180 IF X< 48OR X> 57GOTO 150 190 X= VAL (CHR$ (X)) 200 RETURN 210 PLOT 6,5,2,31,116,242,97,116,97,84,31,84,31,116,255 220 PLOT 14,3,27,5:PRINT "J-CHECKERS" 230 PLOT 15,3,25,8:PRINT "BY J. F. WHITE" 240 PLOT 3,10,16:PRINT "ADAPTED FROM 'CREATIVE COMPUTING', DEC. 1982" 250 FOR I= 0TO 22:PLOT 3,I,18,60,3,63- I,18,62 260 FOR J= 1TO 20:NEXT J,I 270 PLOT 3,24,18:PRINT "BY RICK TAUBOLD" 280 DIM R(4),T(4),S(8,8),S$(8,8) 290 RESTORE 330:FOR X= 1TO 8:FOR Y= 1TO 8:READ J:IF J= 15THEN 310 300 S(X,Y)= J:GOTO 320 310 RESTORE 330:READ S(X,Y) 320 NEXT Y,X 330 DATA 1,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,-1,15 340 RESTORE 360 350 FOR J= 1TO 8:FOR I= 1TO 8:READ S$(I,J):NEXT I,J 360 DATA 0223,0,1023,0,1823,0,2623,0,0,0620,0,1420,0,2220,0,3020 370 DATA 0217,0,1017,0,1817,0,2617,0,0,0614,0,1414,0,2214,0,3014 380 DATA 0211,0,1011,0,1811,0,2611,0,0,0608,0,1408,0,2208,0,3008 390 DATA 0205,0,1005,0,1805,0,2605,0,0,0602,0,1402,0,2202,0,3002 400 FOR Z= 1TO 1000:NEXT Z 410 PLOT 12,6,4,3,0,1 420 PRINT "THIS IS THE GAME OF CHECKERS. BLACK IS 'd' AND WHITE IS 'd'" 430 PRINT "SQUARES ARE REFERRED TO BY A COORDINATE SYSTEM" 440 PRINT "(1,1) IS THE LOWER LEFT CORNER" 450 PRINT "(1,8) IS THE UPPER LEFT CORNER" 460 PRINT "(8,1) IS THE LOWER RIGHT CORNER" 470 PRINT "(8,8) IS THE UPPER RIGHT CORNER" 480 PRINT :PRINT "THE COMPUTER WILL TYPE '+ TO' WHEN YOU HAVE ANOTHER JUMP." 490 PRINT :PRINT "TYPE '0' IF YOU CANNOT JUMP." 500 PRINT :PRINT "YOU WILL BE ASKED WHICH TYPE OF COMPUTER SEARCH YOU WANT" 510 PRINT "PRUNED SEARCH IS FASTEST.":PRINT 520 PRINT "1. STRAIGHT LEVEL 1 EVALUATION" 530 PRINT "2. LEVEL 1-- WITH ITERATIVE DEEPENING" 540 PRINT "3. LEVEL 2-- PRUNED SEARCH" 550 PRINT "4. LEVEL 2-- ALPHA/BETA SEARCH" 560 PRINT "5. LEVEL 2-- MINIMAX SEARCH":PRINT 570 INPUT "DO WANT AN OVERVIEW OF THESE GAME TYPES? (Y/N) ";X$:PLOT 28,11 580 IF LEFT$ (X$,1)= "Y"THEN GOSUB 3810:GOTO 410 590 INPUT "LOAD AN OLD GAME? (Y/N) ";X$ 600 IF LEFT$ (X$,1)= "Y"GOTO 3640 610 PRINT 620 INPUT "SELECT TYPE OF GAME PLAY: ";SR 630 IF SR< 1OR SR> 5THEN PLOT 28,11:GOTO 620 640 IF SR= 2THEN PRINT :INPUT "SET TIME FOR SEARCH (SECONDS): ";ST 650 L= 1:IF SR= 3OR SR= 4OR SR= 5THEN L= 2 660 PRINT 670 INPUT "DO YOU WANT TO GO FIRST? (Y/N) ";C$ 680 C$= LEFT$ (C$,1) 690 IF C$< > "Y"AND C$< > "N"THEN PLOT 28,11:GOTO 670 700 PRINT 710 INPUT "DO YOU WANT THE BELL SIGNAL? (Y/N) ";B$ 720 BB= 0:IF B$= "Y"THEN BB= 7 730 PLOT 12,27,24:GOSUB 3310:GOSUB 2360:TB= TA 740 R(0)= - 99:G= - 1:P1= 12:P2= 12 750 IF C$= "Y"THEN C1$= "d":C2$= "d":C3$= "k":C4$= "k":M= M+ 1:CC= 7:PC= 1:GOTO 1240 760 C1$= "d":C2$= "d":C3$= "k":C4$= "k":CC= 1:PC= 7:REM 770 PLOT 3,12,29:PRINT " MY MOVE":OUT 8,247:M= M+ 1 780 IF SR= 2AND L= 2THEN X= R(1):Y= R(2):B= G:FOR A= - 1TO 1STEP 2:GOSUB 880:NEXT A 790 IF M= 2AND S(2,6)= 0THEN R(1)= 3:R(2)= 7:R(3)= 2:R(4)= 6:GOTO 1100 800 FOR X= 1TO 8:FOR Y= 1TO 8:IF S(X,Y)> - 1GOTO 830 810 IF S(X,Y)= - 1THEN B= G:FOR A= - 1TO 1STEP 2:GOSUB 880:NEXT A 820 IF S(X,Y)= - 2THEN FOR B= - 1TO 1STEP 2:FOR A= - 1TO 1STEP 2:GOSUB 880:NEXT A,B 830 NEXT Y,X 840 IF SR= 2AND ID= 0AND L< 2THEN L= L+ 1:GOTO 780 850 ID= 0:IF SR= 2THEN L= 1 860 GOTO 1090 870 REM 1ST MOVE GENERATOR 880 IF ID= 1THEN RETURN 890 U= X+ A:V= Y+ B:IF U< 1OR U> 8OR V< 1OR V> 8THEN RETURN 900 IF S(U,V)= 0THEN GOSUB 950:RETURN 910 IF S(U,V)< 0THEN RETURN 920 U= U+ A:V= V+ B:IF U< 1OR U> 8OR V< 1OR V> 8THEN RETURN 930 IF S(U,V)= 0THEN GOSUB 950 940 RETURN 950 UA= U:VA= V:XA= X:YA= Y:ED= 1:GA= G 960 GOSUB 2390:Q0= 0 970 IF SR= 2GOTO 1010 980 IF Q0> 8THEN GOSUB 1840:GOTO 1030 990 IF SR= 3AND Q0> 0THEN GOSUB 1840:GOTO 1030 1000 IF SR= 3GOTO 1030 1010 IF SR= 4AND L= 2THEN GOSUB 1840:GOTO 1030 1020 IF L= 2THEN GOSUB 1840:GOTO 1030 1030 IF Q0> R(0)THEN R(0)= Q0:R(1)= X:R(2)= Y:R(3)= U:R(4)= V:GOTO 1060 1040 IF Q0= R(0)AND RND (1)> .5THEN R(0)= Q0:R(1)= X:R(2)= Y:R(3)= U:R(4)= V:GOTO 1060 1050 GOTO 1080 1060 IF SR= 2THEN GOSUB 90:PRINT "CONSIDERING";R(1);",";R(2);" TO ";R(3);",";R(4);"" 1070 T1= T(1):T2= T(2):T3= T(3):T4= T(4) 1080 Q0= 0:RETURN 1090 IF R(0)= - 99THEN 1780 1100 PLOT 6,CC:GOSUB 90:PRINT "FROM ";R(1);",";R(2);" TO ";R(3);",";R(4):R(0)= - 99 1110 IF R(4)= 1THEN S(R(3),R(4))= - 2:GOTO 1130 1120 S(R(3),R(4))= S(R(1),R(2)) 1130 S(R(1),R(2))= 0:I= R(1):J= R(2):GOSUB 3210:I= R(3):J= R(4):GOSUB 3210 1140 IF ABS (R(1)- R(3))< > 2GOTO 1240 1150 S((R(1)+ R(3))/ 2,(R(2)+ R(4))/ 2)= 0 1160 I= (R(1)+ R(3))/ 2:J= (R(2)+ R(4))/ 2:GOSUB 3210 1170 X= R(3):Y= R(4):IF S(X,Y)= - 1THEN B= - 2:FOR A= - 2TO 2STEP 4:GOSUB 1210 1180 IF S(X,Y)= - 2THEN FOR A= - 2TO 2STEP 4:FOR B= - 2TO 2STEP 4:GOSUB 1210:NEXT B 1190 NEXT A:IF R(0)< > - 99THEN GOSUB 90:PRINT " TO ";R(3);",";R(4):R(0)= - 99:GOTO 1110 1200 GOTO 1240 1210 U= X+ A:V= Y+ B:IF U< 1OR U> 8OR V< 1OR V> 8THEN RETURN 1220 IF S(U,V)= 0AND S(X+ A/ 2,Y+ B/ 2)> 0THEN ID= 0:GOSUB 950 1230 RETURN 1240 PLOT 6,2:GOSUB 90:PRINT :GOSUB 2360:TD= TA:TF= TF+ INT ((TD- TB)/ 60* 100+ .00001)/ 100 1250 P1= 0:P2= 0:PLOT 3,12,29:PRINT "YOUR MOVE" 1260 FOR Y= 1TO 8:FOR X= 1TO 8 1270 IF S(X,Y)= 0GOTO 1320 1280 IF S(X,Y)= 1THEN P1= P1+ 1:GOTO 1320 1290 IF S(X,Y)= - 1THEN P2= P2+ 1:GOTO 1320 1300 IF S(X,Y)= - 2THEN P2= P2+ 3:GOTO 1320 1310 IF S(X,Y)= 2THEN P1= P1+ 3 1320 NEXT X 1330 NEXT Y 1340 X$= " " 1350 FOR I= 16TO 20:PLOT 3,40,I:PRINT X$:NEXT I 1360 PLOT 3,40,16:PRINT "MOVE NO. ";M; 1370 PLOT 3,40,18:PRINT "MY TIME= ";TF; 1380 PLOT 3,40,20:PRINT "YOUR TIME= ";TG:REM 1390 IF P1= 0THEN 1770 1400 IF P2= 0THEN 1780 1410 IF P1> P2THEN P3= (P1- P2)* P1/ P2 1420 IF P2> P1THEN P3= (P1- P2)* P2/ P1 1430 IF P1< 7OR P2< 7THEN PLOT 3,40,25:PRINT "END GAME" 1440 IF L= 2AND SR= 5GOTO 1460 1450 GOTO 1480 1460 GOSUB 90:PRINT "YOUR BEST MOVE IS: " 1470 GOSUB 90:PRINT T1;",";T2;" TO ";T3;",";T4;"" 1480 PLOT BB,BB 1490 GOSUB 2360:TE= TA 1500 PLOT 6,PC:GOSUB 90:PRINT "FROM ";:GOSUB 150:E= X 1510 PLOT 3,47,LN:GOSUB 150:H= X 1520 PLOT BB,BB 1530 IF E< 1OR E> 8OR H< 1OR H> 8THEN GOSUB 1800:GOTO 1500 1540 IF S(E,H)< = 0THEN GOSUB 1800:GOTO 1500 1550 PLOT 6,PC:GOSUB 90:PRINT " TO ";:GOSUB 150:A= X 1560 PLOT 3,47,LN:GOSUB 150:B= X 1570 PLOT BB,BB 1580 IF A< 0OR A> 8OR B< 0OR B> 8THEN GOSUB 1800:GOTO 1550 1590 IF S(A,B)= 0AND ABS (A- E)< = 2AND ABS (A- E)= ABS (B- H)GOTO 1610 1600 GOSUB 1800:GOTO 1500 1610 IF ABS (A- E)= 2AND S((A+ E)/ 2,(B+ H)/ 2)> - 1THEN GOSUB 1800:GOTO 1500 1620 IF S(E,H)< > 2AND B- H< 0THEN GOSUB 1800:GOTO 1550 1630 S(A,B)= S(E,H):S(E,H)= 0:I= E:J= H:GOSUB 3210:I= A:J= B:GOSUB 3210 1640 IF ABS (E- A)< > 2GOTO 1740 1650 S((E+ A)/ 2,(H+ B)/ 2)= 0:I= (E+ A)/ 2:J= (H+ B)/ 2:GOSUB 3210 1660 GOSUB 90:PRINT " + TO ";:GOSUB 150:A1= X 1670 IF A1< 1THEN PLOT 8:GOTO 1740 1680 PLOT 3,47,LN:GOSUB 150:B1= X:PLOT BB,BB 1690 IF S(A1,B1)< > 0OR ABS (A1- A)< > 2OR ABS (B1- B)< > 2THEN GOSUB 1800:GOTO 1660 1700 IF ABS (A1- A)= 2AND S((A1+ A)/ 2,(B1+ B)/ 2)> - 1THEN GOSUB 1800:GOTO 1660 1710 IF S(A,B)< > 2AND B1- B< 0THEN GOSUB 1800:GOTO 1660 1720 E= A:H= B:A= A1:B= B1:IF B= 8THEN S(E,H)= 2 1730 GOTO 1630 1740 IF B= 8THEN S(A,B)= 2:I= A:J= B:GOSUB 3210 1750 PLOT 6,2:GOSUB 2360:TB= TA:TG= TG+ INT ((TB- TE)/ 60* 100+ .0001)/ 100 1760 ID= 0:GOTO 770 1770 GOSUB 90:PRINT "I WIN !":PLOT 6,2,3,0,27:OUT 8,255:END 1780 GOSUB 90:PRINT "YOU WIN !":PLOT 6,2,3,0,27:OUT 8,255:END 1790 REM REJECT MOVE 1800 PLOT BB 1810 GOSUB 90:PRINT "ILLEGAL MOVE - TRY AGAIN" 1820 RETURN 1830 REM 2ND LEVEL 1840 IF SR= 2THEN GOSUB 2360:IF TA- TB> ST- 5THEN ID= 1:RETURN 1850 T(0)= - 98:G1= 1 1860 A7= S(X,Y):A8= S(U,V):S(U,V)= S(X,Y):S(X,Y)= 0 1870 IF ABS (X- U)= 2THEN A3= S((X+ U)/ 2,(Y+ V)/ 2):S((X+ U)/ 2,(Y+ V)/ 2)= 0 1880 FOR X1= 1TO 8:FOR Y1= 1TO 8:IF S(X1,Y1)< 1GOTO 1910 1890 IF S(X1,Y1)= 1THEN B1= G1:FOR A1= - 1TO 1STEP 2:GOSUB 1980:NEXT A1 1900 IF S(X1,Y1)= 2THEN FOR B1= - 1TO 1STEP 2:FOR A1= - 1TO 1STEP 2:GOSUB 1980:NEXT A1,B1 1910 NEXT Y1,X1 1920 S(X,Y)= A7:S(U,V)= A8 1930 IF ABS (X- U)= 2THEN S((X+ U)/ 2,(Y+ V)/ 2)= A3 1940 Q0= Q0- T(0):IF SR= 3THEN Q0= Q0+ 3 1950 IF SR= 2THEN Q0= Q0+ 3 1960 AB= 0 1970 RETURN 1980 IF ID= 1OR AB= 1THEN RETURN 1990 U1= X1+ A1:V1= Y1+ B1:IF U1< 1OR U1> 8OR V1< 1OR V1> 8THEN RETURN 2000 IF S(U1,V1)= 0THEN GOSUB 2060:RETURN 2010 IF S(U1,V1)> 0THEN RETURN 2020 U1= U1+ A1:V1= V1+ B1:IF U1< 1OR U1> 8OR V1< 1OR V1> 8THEN RETURN 2030 IF S(U1,V1)= 0THEN GOSUB 2060 2040 RETURN 2050 REM 2ND MOVE GENERATOR 2060 UA= U1:VA= V1:XA= X1:YA= Y1:ED= 8:GA= G1 2070 GOSUB 2390 2080 Q1= Q 2090 IF SR= 2AND Q1> 8THEN GOSUB 2160 2100 IF SR= 4AND Q0- Q1< R(0)THEN AB= 1 2110 IF Q1> T(0)THEN T(0)= Q1:T(1)= X1:T(2)= Y1:T(3)= U1:T(4)= V1 2120 IF Q1= T(0)AND RND (1)> .5THEN T(0)= Q1:T(1)= X1:T(2)= Y1:T(3)= U1:T(4)= V1 2130 Q1= 0 2140 RETURN 2150 REM 3RD LEVEL 2160 IF SR= 2THEN GOSUB 2360:IF TA- TB> ST- 5THEN ID= 1:RETURN 2170 A4= S(X1,Y1):A5= S(U1,V1):S(U1,V1)= S(X1,Y1):S(X1,Y1)= 0 2180 IF ABS (X1- U1)= 2THEN A6= S((X1+ U1)/ 2,(Y1+ V1)/ 2):S((X1+ U1)/ 2,(Y1+ V1)/ 2)= 0 2190 FOR X2= 1TO 8:FOR Y2= 1TO 8 2200 IF S(X2,Y2)> - 1GOTO 2230 2210 IF S(X2,Y2)= - 1THEN B2= G:FOR A2= - 1TO 1STEP 2:GOSUB 2280:NEXT A2 2220 IF S(X2,Y2)= - 2THEN FOR B2= - 1TO 1STEP 2:FOR A2= - 1TO 1STEP 2:GOSUB 2280:NEXT A2,B2 2230 NEXT Y2,X2 2240 S(X1,Y1)= A4:S(U1,V1)= A5 2250 IF ABS (X1- U1)= 2THEN S((X1+ U1)/ 2,(Y1+ V1)/ 2)= A6 2260 RETURN 2270 REM 3RD MOVE GENERATOR 2280 U2= X2+ A2:V2= Y2+ B2:IF U2< 1OR U2> 8OR V2< 1OR V2> 8THEN RETURN 2290 IF S(U2,V2)< = 0THEN RETURN 2300 U2= U2+ A2:V2= V2+ B2:IF U2< 1OR U2> 8OR V2< 1OR V2> 8THEN RETURN 2310 IF S(U2,V2)= 0THEN GOSUB 2330 2320 RETURN 2330 Q1= Q1+ P3- 9 2340 RETURN 2350 REM TIMER 2360 TA= 3600* PEEK (33211)+ 60* PEEK (33210)+ PEEK (33209) 2370 RETURN 2380 REM EVALUATION 2390 Q= 0:IF SR= 2THEN GOSUB 2360:IF TA- TB> ST- 5THEN ID= 1:RETURN 2400 IF P1< 7OR P2< 7THEN GOSUB 2880 2410 CP= 0:IF ABS (YA- VA)= 2THEN Q= Q+ 10:CP= 1:IF GA= - 1THEN Q= Q+ 20 2420 IF GA= - 1AND XA= 3AND YA= 5THEN Q= Q- .2 2430 IF GA= 1AND XA= 6AND YA= 4THEN Q= Q- .2 2440 FOR C= - 1TO 1STEP 2:IF UA+ C< 1OR UA+ C> 8OR VA+ GA< 1OR VA+ GA> 8GOTO 2600 2450 IF S(UA+ C,VA+ GA)= GAOR S(UA+ C,VA+ GA)= 2* GATHEN Q= Q+ 1 2460 IF UA- C< 1OR UA- C> 8OR VA- GA< 1OR VA- GA> 8GOTO 2600 2470 IF S(XA,YA)= 2* GAGOTO 2490 2480 GOTO 2520 2490 IF S(UA+ C,VA- C)= 0AND S(UA- C,VA+ C)= 0AND S(UA- 1,VA+ C)= - 2* GAGOTO 2510 2500 GOTO 2520 2510 IF S(UA+ 1,VA- C)= - 2* GATHEN Q= Q+ 3 2520 IF (S(UA+ C,VA+ GA)= - GAOR S(UA+ C,VA+ GA)= - 2* GA)GOTO 2540 2530 GOTO 2550 2540 IF S(UA- C,VA- GA)= 0OR (UA- C= XAAND VA- GA= YA)THEN Q= Q- 3 2550 IF S(UA+ C,VA- GA)= - 2* GAAND (S(UA- C,VA+ GA)= 0OR (UA- C= XAAND VA+ GA= YA))THEN Q= Q- 3 2560 IF S(UA+ C,VA+ GA)= - 2* GAAND (UA- C= XAAND VA- GA= YA)THEN Q= Q- 3 2570 IF UA+ 2* C< 1OR UA+ 2* C> 8OR VA+ 2* GA< 1OR VA+ 2* GA> 8GOTO 2600 2580 IF S(UA+ C,VA+ GA)= 0AND S(UA+ 2* C,VA+ 2* GA)= 0AND S(UA,VA+ 2* GA)= - GATHEN Q= Q+ .5 2590 IF S(UA+ C,VA+ GA)= 0AND S(UA+ 2* C,VA+ 2* GA)= 0AND S(UA,VA+ 2* GA)= - 2* GATHEN Q= Q+ .5 2600 NEXT C 2610 IF S(XA,YA)= 2* GATHEN Q= Q+ .2:GOTO 2740 2620 REM MAN ONLY 2630 IF VA= EDTHEN Q= Q+ 2 2640 IF CP= 1THEN FC= - 2:FOR FC= - 2TO 2STEP 4:GOSUB 2820:NEXT 2650 IF YA= ED- GA* 2THEN Q= Q+ .2 2660 IF YA= ED- GATHEN Q= Q+ .3 2670 IF YA= ED- 7* GATHEN Q= Q- 2.2 2680 IF XA= 1OR XA= 8GOTO 2710 2690 IF XA+ 1> 8OR XA- 1< 1OR YA- GA< 1OR YA- GA> 8GOTO 2710 2700 IF S(XA+ 1,YA- GA)= 2* GAOR S(XA- 1,YA- GA)= - 2* GATHEN Q= Q+ 2 2710 IF UA= 1OR UA= 8THEN Q= Q+ 1:IF VA= EDTHEN Q= Q- 1.2 2720 RETURN 2730 REM KING ONLY 2740 IF CP= 1THEN FOR FB= - 2TO 2STEP 4:FOR FC= - 2TO 2STEP 4:GOSUB 2820:NEXT FC,FB 2750 IF VA= 5AND (UA= 3OR UA= 4OR UA= 5)THEN Q= Q+ .25 2760 IF VA= 4AND (UA= 3OR UA= 4OR UA= 5)THEN Q= Q+ .25 2770 IF UA- 1< 1OR UA+ 1> 8OR VA- GA< 1OR VA- GA> 8GOTO 2790 2780 IF S(UA- 1,VA- GA)= - GAAND S(UA+ 1,VA- GA)= - GATHEN Q= Q+ 1 2790 IF UA= 1OR UA= 8THEN Q= Q- .5 2800 IF VA= 1OR VA= 8THEN Q= Q- .5 2810 RETURN 2820 UC= UA+ FB:VC= VA+ FC 2830 IF UC< 1OR UC> 8OR VC< 1OR VC> 8THEN RETURN 2840 IF S(UC,VC)= 0AND S((UC+ UA)/ 2,(VC+ VA)/ 2)= - GATHEN Q= Q+ 10 2850 IF S(UC,VC)= 0AND S((UC+ UA)/ 2,(VC+ VA)/ 2)= - 2* GATHEN Q= Q+ 11 2860 RETURN 2870 REM ENDINGS 2880 IF GA= 1THEN RETURN 2890 IF P2< 6AND P1> P2GOTO 2960 2900 IF V= 3AND S(U,1)> 0THEN Q= Q+ 2 2910 IF S(X,Y)< > - 2GOTO 3000 2920 IF U= 3AND S(1,V)> 0THEN Q= Q+ 2 2930 IF U= 6AND S(8,V)> 0THEN Q= Q+ 2 2940 IF V= 6AND S(U,8)> 0THEN Q= Q+ 2 2950 GOTO 3000 2960 IF (U= 7AND V= 1)OR (U= 8AND V= 2)OR (U= 1AND V= 7)OR (U= 2AND V= 8)THEN Q= Q+ 1.5 2970 IF 8- U> U- 1AND U- 1< X- 1AND 8- V< 8- YTHEN Q= Q+ .3:GOTO 3000 2980 IF 8- U< X- 1AND V- 1< Y- 1THEN Q= Q+ .3 2990 IF U= 1OR U= 8OR V= 1OR V= 8THEN Q= Q- .35 3000 IF S(X,Y)< > - 1THEN RETURN 3010 FOR I= VTO 1STEP - 1 3020 IF S(U,I)> 0THEN RETURN 3030 IF U= 8AND S(U- 1,I)> 0THEN RETURN 3040 IF U+ 1> 8THEN RETURN 3050 IF U= 1AND S(U+ 1,I)> 0THEN RETURN 3060 IF S(U- 1,I)> 0OR S(U+ 1,I)> 0THEN RETURN 3070 NEXT I 3080 Q= Q+ 1 3090 RETURN 3100 REM POKE IN SCROLL PATCH 3110 RESTORE 3150 3120 FOR I= 49120TO 49151 3130 READ X:POKE I,X 3140 NEXT I 3150 DATA 33,202,112,6,11,14,52,17 3160 DATA 128,0,25,126,17,128,255,25 3170 DATA 119,35,0,13,194,231,191,17 3180 DATA 76,0,25,5,194,229,191,201 3190 RETURN 3200 REM PRINT PIECE ON BOARD 3210 XX= VAL (LEFT$ (S$(I,J),2)) 3220 YY= VAL (RIGHT$ (S$(I,J),2)) 3230 PLOT 3,XX,YY 3240 IF S(I,J)= 0THEN PRINT " " 3250 IF S(I,J)= 1THEN PRINT C1$ 3260 IF S(I,J)= - 1THEN PRINT C2$ 3270 IF S(I,J)= - 2THEN PRINT C3$ 3280 IF S(I,J)= 2THEN PRINT C4$ 3290 RETURN 3300 REM PRINT BOARD 3310 PLOT 12:PRINT 3320 FOR J= 1TO 4 3330 FOR I= 1TO 3 3340 PRINT " ````````````````````````````````" 3350 NEXT I 3360 FOR I= 1TO 3 3370 PRINT " ````````````````````````````````" 3380 NEXT I 3390 NEXT J 3400 PLOT 6,6,2,1,124,242,66,124,66,27,1,27,1,124,255 3410 PLOT 6,3 3420 PLOT 27,10,3,34,2:PRINT "8 7 6 5 4 3 2 1" 3430 PLOT 27,11,3,2,26:PRINT "1 2 3 4 5 6 7 8" 3440 IF FFTHEN PLOT 6,2:RETURN 3450 RESTORE 3520:IF C$= "Y"THEN RESTORE 3530 3460 FOR I= 1TO 6 3470 READ C,X,Y 3480 FOR J= 2TO 26STEP 8 3490 PLOT 6,C,3,X+ J,Y,100 3500 NEXT J 3510 NEXT I 3520 DATA 1,4,2,1,0,5,1,4,8,7,0,17,7,4,20,7,0,23 3530 DATA 7,4,2,7,0,5,7,4,8,1,0,17,1,4,20,1,0,23 3540 PLOT 6,2:RETURN 3550 REM SAVE GAME 3560 FILE "R",1,"JCHECK",1 3570 BT= 1:FOR I= 1TO 8:FOR J= 1TO 8 3580 PUT 1,1,BT;S(I,J):BT= BT+ 4 3590 NEXT J,I 3600 PUT 1,1,BT;M,TF,TG,L,SR,R(0),G,ST,C$[1] 3610 FILE "C",1 3620 PLOT 12,27,11,6,2:END 3630 REM LOAD OLD GAME 3640 FILE "R",1,"JCHECK",1 3650 BT= 1:FOR I= 1TO 8:FOR J= 1TO 8 3660 GET 1,1,BT;S(I,J):BT= BT+ 4 3670 NEXT J,I 3680 GET 1,1,BT;M,TF,TG,L,SR,R(0),G,ST,C$[1] 3690 FILE "C",1 3700 FF= 1:GOSUB 3310 3710 IF C$= "Y"THEN C1$= "d":C2$= "d":C3$= "k":C4$= "k":M= M+ 1:CC= 7:PC= 1:GOTO 3730 3720 C1$= "d":C2$= "d":C3$= "k":C4$= "k":CC= 1:PC= 7:REM 3730 FOR I= 1TO 8:FOR J= 1TO 8 3740 IF S(I,J)= 0THEN 3760 3750 GOSUB 3210 3760 NEXT J 3770 NEXT I 3780 GOSUB 2360:TB= TA 3790 GOTO 1240 3800 REM NOTES ON GAME 3810 PLOT 12,3,0,5 3820 PRINT "MINI-MAX DOES AN EXHAUSTIVE SEARCH TO PROVIDE THE BEST" 3830 PRINT "COMPUTER MOVES VS. BEST OPPONENT MOVE. THIS TAKES LONGEST.":PRINT 3840 PRINT "ALPHA-BETA IS SIMILAR BUT SEARCHES FEWER MOVES, ALTHOUGH" 3850 PRINT "RESULTS ARE IDENTICAL. IT RUNS A BIT FASTER.":PRINT 3860 PRINT "ITERATIVE DEEPENING IS A TIMED ALPHA-BETA SEARCH. YOU WILL" 3870 PRINT "BE ALLOWED TO SET SEARCH TIME IN SECONDS.":PRINT 3880 PRINT "PRUNED SEARCH IS THE FASTEST METHOD, BUT IT'S SUCCESS WILL" 3890 PRINT "DEPEND UPON THE EVALUATION FUNCTION WRITTEN INTO THE GAME." 3900 PRINT "HERE IT IS ONLY PRETTY GOOD.":PRINT 3910 PRINT "STRAIGHT 1ST LEVEL EVALUATION PERFORMS NO TRICKS AND SIMPLY" 3920 PRINT "EVALUATES THE MERIT OF EACH MOVE RATHER THAN THE POSITION" 3930 PRINT "ARISING FROM THAT MOVE. WHILE THIS IS BY FAR THE FASTEST," 3940 PRINT "THE PLAY OF THE GAME LEAVES MUCH TO BE DESIRED." 3950 PLOT 3,0,26:INPUT "PRESS <RETURN> TO RESUME ";X$ 3960 RETURN