100 REM ...DOTS.ECB ..by JAMES McGILL : Source ??? via EAGAN 110 REM ...Date: Jun 77 Last modified 03-05-81 R.E.H. 120 PRINT "&K&J&J *** GAME OF 'DOTS' ***" 130 PRINT 140 DIM A(25,25),C(1,20),B$(81) 150 FOR X=1 TO 20: LET C(1,20)=0: NEXT X 160 LET C(1,5)=5,C(1,10)=5,C(1,15)=5,C(1,20)=5 170 FOR X=1 TO 25 180 FOR Y=1 TO 25: LET A(X,Y)=0: NEXT Y 190 NEXT X 200 FOR X=1 TO 9: LET B$=B$+" ": NEXT X 210 PRINT ,"&JInitializing&J" 220 FOR C=0 TO 4 230 FOR B=5*C+1 TO 5*C+4 240 LET A(B,B+1)=1 250 IF C=4 THEN 270 260 LET A(B,B+5)=1 270 NEXT B 280 NEXT C 290 FOR K=1 TO 4 300 LET A(5*K,5*K+5)=1 310 NEXT K 320 LET R=0,M=0,N=0,S=0,W=0,X=0,Y=0,Z=0,U=0,V=0 430 FOR A=1 TO 73 STEP 18 440 FOR B=A TO (A+8) STEP 2 450 LET B$(B,B)="*" 460 NEXT B 470 NEXT A 480 FOR A=2 TO 74 STEP 18 490 FOR B=A TO (A+6) STEP 2 500 LET B$(B,B)=" " 510 NEXT B 520 NEXT 530 FOR A=10 TO 64 STEP 18 540 FOR B=A TO A+8 550 LET B$(B,B)=" " 560 NEXT B 570 NEXT A 580 PRINT " DO YOU KNOW HOW TO PLAY ---=>"; 590 INPUT (1,0)I$: LET I$=I$+"Y" 600 IF I$(1,1)="Y" THEN 850 610 PRINT 620 PRINT " WE WILL USE A 5 BY 5 ARRAY OF DOTS." 630 PRINT " YOU MAKE YOUR MOVE BY MAKING A" 640 PRINT "HORIZONTAL OR VERTICAL LINE BETWEEN TWO" 650 PRINT "CONSECUTIVE DOTS. Each DOT has a pair of" 660 PRINT "COORDINATES. The TOP left DOT is 1,1. The lower" 670 PRINT "LEFT DOT IS 5,1. The upper right dot is 1,5" 680 PRINT "AND THE LOWER RIGHT DOT IS 5,5." 690 PRINT 700 PRINT "==== TYPE IN -C- TO CONTINUE ===="; 710 INPUT (1,0)I$ 720 PRINT 730 PRINT " YOU MOVE BY TYPING IN THE COORDINATES" 740 PRINT "OF THE TWO DOTS TO BE CONNECTED." 750 PRINT "TYPE IN FOUR NUMBERS OF THE FORM W,X,Y,Z." 760 PRINT "THEREFORE, YOU WILL ALWAYS" 770 PRINT "ALWAYS TYPE IN THE COORDINATES OF THE UPPER" 780 PRINT "OR LEFTMOST DOT FIRST.THE GAME BOARD LOOKS" 790 PRINT "LIKE THIS." 800 PRINT 810 PRINT "==== TYPE IN -C- TO CONTINUE ===="; 820 INPUT (1,0)I$ 830 PRINT 840 GOSUB 3340 850 PRINT "What are your values of W,X,Y,Z. ---=>"; 860 INPUT W,X,Y,Z 870 GOSUB 1340 880 LET N=N+S 890 IF S=0 THEN 980 900 IF R>=40 THEN 1190 910 LET S=0 920 PRINT "YOU SCORED!!!" 930 PRINT "THE SCORE IS" 940 PRINT "YOU...";N 950 PRINT "ME....";M 960 GOSUB 3340 970 GOTO 1120 980 PRINT "YOU DID NOT SCORE.MY TURN" 990 GOSUB 2430 1000 LET M=M+S 1010 IF S=0 THEN 1140 1020 IF R>=40 THEN 1190 1030 LET S=0 1040 PRINT "My move is ";W;X;Y;Z 1050 PRINT "I SCORED!!!" 1060 GOSUB 3340 1070 PRINT "THE SCORE IS" 1080 PRINT "YOU....";N 1090 PRINT "ME.....";M 1100 PRINT "I GET ANOTHER TURN" 1110 GOTO 990 1120 PRINT " YOU GET ANOTHER TURN...---> "; 1130 GOTO 860 1140 IF R>=40 THEN 1190 1150 PRINT "My move is ";W;X;Y;Z 1160 GOSUB 3340 1170 PRINT " I DID NOT SCORE.......YOUR TURN---> "; 1180 GOTO 860 1190 PRINT "ALL MOVES HAVE BEEN MADE.THE GAME IS OVER" 1200 PRINT "THE FINAL SCORE IS" 1210 PRINT "YOU...";N 1220 PRINT "ME....";M 1230 IF M"; 1310 INPUT (1,0)A$: LET A$=A$+"Y": PRINT 1320 IF A$(1,1)="Y" THEN 850 1325 IF A$(1,1)="y" THEN 850 1330 GOTO 3470 1340 IF W>Y THEN 1470 1350 IF X>Z THEN 1470 1360 IF W=Y THEN 1400 1370 IF X<>Z THEN 1530 1380 IF Y<>W+1 THEN 1570 1390 GOTO 1410 1400 IF Z<>X+1 THEN 1570 1410 IF (ABS(W))/(INT(W))<>1 THEN 1440 1420 GOTO 1610 1430 PRINT "+++++ I L L E G A L M O V E +++++" 1440 PRINT " PLEASE USE POSITIVE INTEGERS LESS THAN 6" 1450 GOTO 1500 1460 GOTO 1610 1470 PRINT "+++++ I L L E G A L M O V E +++++" 1480 PRINT " PLEASE TYPE IN THE COORDINATES OF " 1490 PRINT "THE UPPERMOST OR LEFTMOST DOT FIRST" 1500 PRINT "TRY AGAIN. WHAT ARE YOUR VALUES FOR W,X,Y,Z"; 1510 INPUT W,X,Y,Z 1520 GOTO 1340 1530 PRINT "+++++ I L L E G A L M O V E +++++" 1540 PRINT " ONLY HORIZONTAL AND VERTICAL MOVES" 1550 PRINT "ARE ALLOWED" 1560 GOTO 1500 1570 PRINT "+++++ I L L E G A L M O V E +++++" 1580 PRINT " YOU MAY ONLY CONNECT CONSECUTIVE DOTS" 1590 PRINT "NO SKIPPING OVER DOTS" 1600 GOTO 1500 1610 LET U=(W-1)*5+X 1620 LET V=(Y-1)*5+Z 1630 IF A(U,V)=1 THEN 1670 1640 PRINT "+++++ I L L E G A L M O V E +++++" 1650 PRINT " THAT MOVE HAS ALREADY BEEN USED" 1660 GOTO 1500 1670 PRINT "LEGAL MOVE" 1680 GOSUB 1700 1690 RETURN 1700 IF X=Z THEN 1920 1710 IF V/5>1 THEN 1760 1720 LET C(1,U)=C(1,U)+1 1730 IF C(1,U)<>4 THEN 1750 1740 LET S=S+1 1750 GOTO 2140 1760 IF V/5<4.1 THEN 1820 1770 LET P=U-5 1780 LET C(1,P)=C(1,P)+1 1790 IF C(1,P)<>4 THEN 1810 1800 LET S=S+1 1810 GOTO 2140 1820 LET C(1,U)=C(1,U)+1 1830 LET P=U-5 1840 LET C(1,P)=C(1,P)+1 1850 IF C(1,U)<>4 THEN 1890 1860 IF C(1,P)<>4 THEN 1900 1870 LET S=S+2 1880 GOTO 2140 1890 IF C(1,P)<>4 THEN 1910 1900 LET S=S+1 1910 GOTO 2140 1920 LET Q=V-1 1930 IF (INT(Q/5))*5<>Q THEN 1980 1940 LET C(1,U)=C(1,U)+1 1950 IF C(1,U)<>4 THEN 1970 1960 LET S=S+1 1970 GOTO 2180 1980 IF (INT(V/5))*5<>V THEN 2040 1990 LET T=U-1 2000 LET C(1,T)=C(1,T)+1 2010 IF C(1,T)<>4 THEN 2030 2020 LET S=S+1 2030 GOTO 2180 2040 LET T=U-1 2050 LET C(1,U)=C(1,U)+1 2060 LET C(1,T)=C(1,T)+1 2070 IF C(1,U)<>4 THEN 2110 2080 IF C(1,T)<>4 THEN 2120 2090 LET S=S+2 2100 GOTO 2180 2110 IF C(1,T)<>4 THEN 2180 2120 LET S=S+1 2130 GOTO 2180 2140 LET F=2*W-1 2150 LET G=2*X 2160 GOSUB 3410 2170 GOTO 2210 2180 LET H=2*W 2190 LET J=2*X-1 2200 GOSUB 3440 2210 LET A(U,V)=0 2220 LET R=R+1 2230 LET U=0 2240 LET V=0 2250 LET P=0 2260 LET Q=0 2270 LET T=0 2280 LET F=0 2290 LET G=0 2300 LET H=0 2310 LET J=0 2320 RETURN 2330 IF A(24,25)=1 THEN 2350 2340 GOTO 2400 2350 LET W=5 2360 LET X=4 2370 LET Y=5 2380 LET Z=5 2390 GOTO 3260 2400 FOR I=19 TO 1 STEP -1 2410 IF C(1,I)<4 THEN 2860 2420 NEXT I 2430 FOR I=1 TO 20 2440 IF C(1,I)=3 THEN 2860 2450 NEXT I 2460 GOTO 2510 2470 IF A(I+1,I+6)=1 THEN 2880 2480 GOTO 2690 2490 IF A(I+5,I+6)=1 THEN 2870 2500 GOTO 2690 2510 FOR I=1 TO 20 2520 IF C(1,I)=0 THEN 2590 2530 GOTO 2680 2540 IF I<2 THEN 2590 2550 IF C(1,I-1)=0 THEN 2580 2560 IF C(1,I-1)=1 THEN 2580 2570 GOTO 2590 2580 IF A(I,I+5)=1 THEN 2900 2590 IF I<6 THEN 2620 2600 IF C(1,I-5)=0 THEN 2620 2610 IF C(1,I-5)<>1 THEN 2630 2620 IF A(I,I+1)=1 THEN 2890 2630 IF C(1,I+1)=0 THEN 2470 2640 IF C(1,I+1)=1 THEN 2470 2650 IF I>15 THEN 2680 2660 IF C(1,I+5)=0 THEN 2490 2670 IF C(1,I+5)=1 THEN 2490 2680 NEXT I 2690 FOR I=1 TO 20 2700 IF C(1,I)=1 THEN 2720 2710 GOTO 2820 2720 IF I<2 THEN 2780 2730 IF C(1,I-1)=1 THEN 2750 2740 GOTO 2760 2750 IF A(I,I+5)=1 THEN 2900 2760 IF I<6 THEN 2780 2770 IF C(1,I-5)<>1 THEN 2790 2780 IF A(I,I+1)=1 THEN 2890 2790 IF C(1,I+1)=1 THEN 2470 2800 IF I>15 THEN 2820 2810 IF C(1,I+5)=1 THEN 2490 2820 NEXT I 2830 IF A(1,2)=1 THEN 2920 2840 IF A(1,6)=1 THEN 2950 2850 IF A(2,7)=1 THEN 2980 2860 IF I=20 THEN 2890 2870 IF A(I+5,I+6)=1 THEN 3070 2880 IF A(I+1,I+6)=1 THEN 3110 2890 IF A(I,I+1)=1 THEN 3010 2900 IF A(I,I+5)=1 THEN 3150 2910 GOTO 2330 2920 LET W=1 2930 LET X=1 2940 GOTO 3210 2950 LET W=1 2960 LET X=1 2970 GOTO 3240 2980 LET W=1 2990 LET X=2 3000 GOTO 3240 3010 LET W=INT((I+4)/5) 3020 LET X=I-(5*(W-1)) 3030 GOTO 3210 3040 LET W=INT((I+3)/5) 3050 LET X=I-(5*(W-1)) 3060 GOTO 3210 3070 LET I=I+5 3080 LET W=INT((I+4)/5) 3090 LET X=I-(5*(W-1)) 3100 GOTO 3210 3110 LET I=I+1 3120 LET W=INT((I+4)/5) 3130 LET X=I-(5*(W-1)) 3140 GOTO 3240 3150 LET W=INT((I+4)/5) 3160 LET X=I-(5*(W-1)) 3170 GOTO 3240 3180 LET W=INT((I-1)/5) 3190 LET X=I-(5*(W-1)) 3200 GOTO 3240 3210 LET Y=W 3220 LET Z=X+1 3230 GOTO 3260 3240 LET Y=W+1 3250 LET Z=X 3260 LET U=(W-1)*5+X 3270 LET V=(Y-1)*5+Z 3280 LET A=W 3290 LET B=X 3300 LET C=Y 3310 LET D=Z 3320 GOSUB 1700 3330 RETURN 3340 FOR I=1 TO 81 STEP 9 3350 FOR J=I TO (I+8) 3360 PRINT B$(J,J); 3370 NEXT J 3380 PRINT 3390 NEXT I 3400 RETURN 3410 LET U1=(F-1)*9+G 3420 LET B$(U1,U1)="-" 3430 GOTO 3460 3440 LET U2=(H-1)*9+J 3450 LET B$(U2,U2)="I" 3460 RETURN 3470 END