10 REM TT-3D.ECB === LAST MOD. 8/5/77 R.E.H. 40 PRINT TAB(10);"[X](0)[X](0)[X](0)[X](0)[X](0)" 50 PRINT TAB(10);"(0)[X] 3 D - T I C (0)[X]" 60 PRINT TAB(10);"[X](0) T A C T O E [X](0)" 70 PRINT TAB(10);"(0)[X](0)[X](0)[X](0)[X](0)[X]" 80 PRINT 100 REM....GOSUB 3670 110 DIM X(64),Y(16),L(76),M(76,4) 120 LET Y(2)=49 130 LET Y(3)=52 140 LET Y(4)=4 150 LET Y(1)=1 160 LET Y(5)=13 170 LET Y(6)=61 180 LET Y(7)=64 190 LET Y(8)=16 200 LET Y(9)=22 210 LET Y(10)=39 220 LET Y(11)=23 230 LET Y(12)=38 240 LET Y(13)=26 250 LET Y(14)=42 260 LET Y(15)=27 270 LET Y(16)=43 280 LET Z9=1 290 FOR K=1 TO 16 300 FOR K1=1 TO 4 310 LET M(K,K1)=Z9 320 LET Z9=Z9+1 330 NEXT K1 340 NEXT K 350 LET M(17,1)=1 360 LET M(17,2)=17 370 LET M(17,3)=33 380 LET M(17,4)=49 390 LET M(18,1)=5 400 LET M(18,2)=21 410 LET M(18,3)=37 420 LET M(18,4)=53 430 LET M(19,1)=9 440 LET M(19,2)=25 450 LET M(19,3)=41 460 LET M(19,4)=57 470 LET M(20,1)=13 480 LET M(20,2)=29 490 LET M(20,3)=45 500 LET M(20,4)=61 510 LET M(21,1)=2 520 LET M(21,2)=18 530 LET M(21,3)=34 540 LET M(21,4)=50 550 LET M(22,1)=6 560 LET M(22,2)=22 570 LET M(22,3)=38 580 LET M(22,4)=54 590 LET M(23,1)=10 600 LET M(23,2)=26 610 LET M(23,3)=42 620 LET M(23,4)=58 630 LET M(24,1)=14 640 LET M(24,2)=30 650 LET M(24,3)=46 660 LET M(24,3)=46 670 LET M(24,4)=62 680 LET M(25,1)=3 690 LET M(25,2)=19 700 LET M(25,3)=35 710 LET M(25,4)=51 720 LET M(26,1)=7 730 LET M(26,2)=23 740 LET M(26,3)=39 750 LET M(26,4)=55 760 LET M(27,1)=11 770 LET M(27,2)=27 780 LET M(27,3)=43 790 LET M(27,4)=59 800 LET M(28,1)=15 810 LET M(28,2)=31 820 LET M(28,3)=47 830 LET M(28,4)=63 840 LET M(29,1)=4 850 LET M(29,2)=20 860 LET M(29,3)=36 870 LET M(29,4)=52 880 LET M(30,1)=8 890 LET M(30,2)=24 900 LET M(30,3)=40 910 LET M(30,4)=56 920 LET M(31,1)=12 930 LET M(31,2)=28 940 LET M(31,3)=44 950 LET M(31,4)=60 960 LET M(32,1)=16 970 LET M(32,2)=32 980 LET M(32,3)=48 990 LET M(32,4)=64 1000 REM 1020 REM* * * * * * * * * * * * * * * * * * 1030 REM 1040 REM... VAR=ZERO 1050 PRINT " DO YOU WANT INSTRUCTIONS"; 1060 INPUT (1,0)C$ 1065 PRINT 1070 IF C$="N" THEN 1240 1080 IF C$="Y" THEN 1110 1090 PRINT " INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO' "; 1100 GOTO 1060 1110 PRINT 1120 PRINT " THE GAME IS TIC-TAC-TOE IN A 4 X 4 X 4 CUBE." 1130 PRINT " EACH MOVE IS INDICATED BY A 3 DIGIT NUMBER, WITH EACH" 1140 PRINT " DIGIT BETWEEN 1 AND 4 INCLUSIVE. THE DIGITS INDICATE THE" 1150 PRINT " LEVEL, ROW, AND COLUMN, RESPECTIVELY, OF THE OCCUPIED" 1160 PRINT " PLACE. " 1170 PRINT 1180 PRINT " TO PRINT THE PLAYING BOARD, TYPE 0 (ZERO) AS YOUR MOVE." 1190 PRINT " THE PROGRAM WILL PRINT THE BOARD WITH YOUR MOVES INDI-" 1200 PRINT " CATED WITH A (Y), THE MACHINE'S MOVES WITH AN (M), AND" 1210 PRINT " UNUSED SQUARES WITH A ( )." 1220 PRINT 1230 PRINT " TO STOP THE PROGRAM RUN, TYPE 1 AS YOUR MOVE." 1240 FOR I=33 TO 76 1250 FOR J=1 TO 4 1260 READ M(I,J) 1270 NEXT J 1280 NEXT I 1290 FOR I=1 TO 64 1300 LET X(I)=0 1310 NEXT I 1320 LET Z=1 1330 PRINT " DO YOU WANT TO MOVE FIRST"; 1340 INPUT (1,0)S$ 1345 PRINT 1350 IF S$="N" THEN 1580 1360 IF S$="Y" THEN 1390 1370 PRINT " INCORRECT ANSWER. PLEASE TYPE 'Y' OR 'N'."; 1380 GOTO 1340 1390 PRINT " " 1400 PRINT " YOUR MOVE"; 1410 INPUT J1 1415 PRINT 1420 IF J1=1 THEN 3660 1430 IF J1<>0 THEN 1460 1440 GOSUB 3410 1450 GOTO 1390 1460 IF J1<111 THEN 3640 1470 IF J1>444 THEN 3640 1480 GOSUB 3360 1490 LET K1=INT(J1/100) 1500 LET J2=(J1-K1*100) 1510 LET K2=INT(J2/10) 1520 LET K3=J1-K1*100-K2*10 1530 LET M=16*K1+4*K2+K3-20 1540 IF X(M)=0 THEN 1570 1550 PRINT " THAT SQUARE IS USED, TRY AGAIN" 1560 GOTO 1390 1570 LET X(M)=1 1580 GOSUB 2560 1590 FOR J=1 TO 3 1600 FOR I=1 TO 76 1610 IF J=1 THEN IF L(I)<>4 THEN 1640 ELSE 1670 1620 IF J=2 THEN IF L(I)<>15 THEN 1640 ELSE 1730 1630 IF J=3 THEN IF L(I)=3 THEN 1860 1640 NEXT I 1650 NEXT J 1660 GOTO 2220 1670 PRINT " YOU WIN AS FOLLOWS"; 1680 FOR J=1 TO 4 1690 LET M=M(I,J) 1700 GOSUB 2490 1710 NEXT J 1720 GOTO 2410 1730 FOR J=1 TO 4 1740 LET M=M(I,J) 1750 IF X(M)<>0 THEN 1790 1760 LET X(M)=5 1770 PRINT " MACHINE MOVES TO"; 1780 GOSUB 2490 1790 NEXT J 1800 PRINT " , AND WINS AS FOLLOWS" 1810 FOR J=1 TO 4 1820 LET M=M(I,J) 1830 GOSUB 2490 1840 NEXT J 1850 GOTO 2410 1860 PRINT " NICE TRY MACHINE MOVES TO"; 1870 FOR J=1 TO 4 1880 LET M=M(I,J) 1890 IF X(M)<>0 THEN 1930 1900 LET X(M)=5 1910 GOSUB 2490 1920 GOTO 1390 1930 NEXT J 1940 GOTO 2220 1950 FOR I=1 TO 76 1960 LET L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4)) 1970 LET L=L(I) 1980 IF L<2 THEN 2050 1990 IF L>=3 THEN 2050 2000 IF L>2 THEN 3070 2010 FOR J=1 TO 4 2020 IF X(M(I,J))<>0 THEN 2040 2030 LET X(M(I,J))=1/8 2040 NEXT J 2050 NEXT I 2060 GOSUB 2560 2070 FOR I=1 TO 76 2080 IF L(I)=1/2 THEN 3210 2090 IF L(I)=1+3/8 THEN 3210 2100 NEXT I 2110 GOTO 2750 2120 LET Z=1 2130 IF X(Y(Z))=0 THEN 2170 2140 LET Z=Z+1 2150 IF Z<>17 THEN 2130 2160 GOTO 2640 2170 LET M=Y(Z) 2180 LET X(M)=5 2190 PRINT " MACHINE MOVES TO"; 2200 GOSUB 2490 2210 GOTO 1390 2220 LET X=X 2230 FOR I=1 TO 76 2240 LET L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4)) 2250 LET L=L(I) 2260 IF L<10 THEN 2330 2270 IF L>=11 THEN 2330 2280 IF L>10 THEN 3070 2290 FOR J=1 TO 4 2300 IF X(M(I,J))<>0 THEN 2320 2310 LET X(M(I,J))=1/8 2320 NEXT J 2330 NEXT I 2340 GOSUB 2560 2350 FOR I=1 TO 76 2360 IF L(I)=.5 THEN 3210 2370 IF L(I)=5+3/8 THEN 3210 2380 NEXT I 2390 GOSUB 3360 2400 GOTO 1950 2410 PRINT " " 2420 PRINT " DO YOU WANT TO TRY ANOTHER GAME"; 2430 INPUT (1,0)X$ 2440 IF X$="Y" THEN 1290 2450 IF X$="N" THEN 2480 2460 PRINT " INCORRECT ANSWER. PLEASE TYPE 'Y' OR 'N'"; 2470 GOTO 2430 2480 GOTO 3830 2490 LET K1=INT((M-1)/16)+1 2500 LET J2=M-16*(K1-1) 2510 LET K2=INT((J2-1)/4)+1 2520 LET K3=M-(K1-1)*16-(K2-1)*4 2530 LET M=K1*100+K2*10+K3 2540 PRINT M; 2550 RETURN 2560 FOR S=1 TO 76 2570 LET J1=M(S,1) 2580 LET J2=M(S,2) 2590 LET J3=M(S,3) 2600 LET J4=M(S,4) 2610 LET L(S)=X(J1)+X(J2)+X(J3)+X(J4) 2620 NEXT S 2630 RETURN 2640 FOR I=1 TO 64 2650 IF X(I)<>0 THEN 2720 2660 LET X(I)=5 2670 LET M=I 2680 PRINT " MACHINE LIKES"; 2690 GOSUB 2490 2700 PRINT " " 2710 GOTO 1390 2720 NEXT I 2730 PRINT " THE GAME IS A DRAW" 2740 GOTO 2410 2750 FOR K=1 TO 18 2760 LET P=0 2770 FOR I=(4*K)-3 TO 4*K 2780 FOR J=1 TO 4 2790 LET P=P+X(M(I,J)) 2800 NEXT J 2810 NEXT I 2820 IF P<4 THEN 2860 2830 IF P<5 THEN 2890 2840 IF P<9 THEN 2860 2850 IF P<10 THEN 2890 2860 NEXT K 2870 GOSUB 3360 2880 GOTO 2120 2890 LET S=1/8 2900 LET P=4*K-3 2910 FOR I8=P TO 4*K 2920 GOTO 3220 2930 NEXT I8 2940 LET S=0 2950 GOTO 2900 2960 DATA 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61 2970 DATA 2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62 2980 DATA 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63 2990 DATA 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64 3000 DATA 1,6,11,16,17,22,27,32,33,38,43,48,49,54,59,64 3010 DATA 13,10,7,4,29,26,23,20,45,42,39,36,61,58,55,52 3020 DATA 1,21,41,61,2,22,42,62,3,23,43,63,4,24,44,64 3030 DATA 49,37,25,13,50,38,26,14,51,39,27,15,52,40,28,16 3040 DATA 1,18,35,52,5,22,39,56,9,26,43,60,13,30,47,64 3050 DATA 49,34,19,4,53,38,23,8,57,42,27,12,61,46,31,16 3060 DATA 1,22,43,64,16,27,38,49,4,23,42,61,13,26,39,52 3070 LET J=1 3080 IF X(M(I,J))<>1/8 THEN 3170 3090 LET X(M(I,J))=5 3100 IF L(I)<5 THEN 3130 3110 PRINT " LET'S SEE YOU GET OUT OF THIS: MACHINE MOVES TO"; 3120 GOTO 3140 3130 PRINT " YOU FOX. JUST IN THE NICK OF TIME, MACHINE MOVES TO"; 3140 LET M=M(I,J) 3150 GOSUB 2490 3160 GOTO 1390 3170 LET J=J+1 3180 IF J<4 THEN 3080 3190 PRINT " MACHINE CONCEDES THIS GAME." 3200 GOTO 2410 3210 LET S=1/8 3220 IF I-INT(I/4)*4>1 THEN 3250 3230 LET A=1 3240 GOTO 3260 3250 LET A=2 3260 FOR J=A TO 5-A STEP 5-2*A 3270 IF X(M(I,J))=S THEN 3310 3280 NEXT J 3290 LET P=I 3300 GOTO 2910 3310 LET X(M(I,J))=5 3320 LET M=M(I,J) 3330 PRINT " MACHINE TAKES"; 3340 GOSUB 2490 3350 GOTO 1390 3360 FOR I=1 TO 64 3370 IF X(I)<>1/8 THEN 3390 3380 LET X(I)=0 3390 NEXT I 3400 RETURN 3410 FOR J=1 TO 4 3420 FOR I=1 TO 4 3440 PRINT " "; 3450 IF I<2 THEN PRINT J; 3460 FOR K=1 TO 4 3470 LET Q=16*I+4*J+K-20 3480 IF X(Q)<>O THEN 3500 3490 PRINT "( )"; 3500 IF X(Q)<>5 THEN 3520 3510 PRINT "(M)"; 3520 IF X(Q)<>1 THEN 3540 3530 PRINT "(Y)"; 3540 IF X(Q)<>1/8 THEN 3560 3550 PRINT "( )"; 3560 NEXT K 3590 NEXT I 3600 PRINT " " 3620 NEXT J 3625 PRINT " LEVEL 1 LEVEL 2 "; 3627 PRINT " LEVEL 3 LEVEL 4" 3630 RETURN 3640 PRINT " INCORRECT MOVE, RETYPE IT--"; 3650 GOTO 1410 3660 STOP 3670 REM....EXEC "@USE HIT1,CAI*HITS" 3680 REM....EXEC "@ASG,AX HIT1" 3690 REM....IF CSF<0 THEN 3820 3700 REM....OPEN HIT1, RANDOM IO,1 3710 REM....CALL RRD(1,1,6,V) 3720 REM....X9=V(1) 3730 REM....V(1)=X9+20 3740 REM....CALL RWR(1,1,6,V) 3750 REM....X9$=STR$(CLK) 3760 REM....A9$="TICTAC-3D "+X9$ 3770 REM....A9$=PAD$(A9$,20) 3780 REM....CALL STD(A9$,V) 3790 REM....CALL RWR(1,X9,20,V) 3800 REM....CLOSE 1 3810 REM....EXEC "@FREE HIT1" 3820 REM....RETURN 3830 END