QUBIC 0010 REM QUBIC (7/31/69) HP MOD 4/20/73 CC 0020 REM PLAYS 3-DIMENSIONAL TIC-TAC-TOE 0030 DIM A$[72] 0040 LET Z9=0 0050 PRINT "CALL COMPUTER WELCOMES YOU TO THE GAME OF QUBIC" 0060 PRINT "DO YOU WANT INSTRUCTIONS (Y/N)"; 0070 INPUT A$ 0080 IF A$[1,1]="N" THEN 250 0090 IF A$[1,1]="Y" THEN 120 0100 PRINT "YES OR NO"; 0110 GOTO 70 0120 PRINT 0130 PRINT "THE GAME IS TIC-TAC-TOE IN A 4 X 4 X 4 CUBE." 0140 PRINT "EACH MOVE IS INDICATED BY A 3 DIGIT NUMBER, WITH EACH" 0150 PRINT "DIGIT BETWEEN 1 AND 4 INCLUSIVE. THE DIGITS INDICATE THE" 0160 PRINT "LEVEL, ROW, AND COLUMN, RESPECTIVELY, OF THE OCCUPIED PLACE." 0170 PRINT "AFTER EACH PAIR OF MOVES I WILL PRINT THE GAME BOARD WITH" 0180 PRINT "X'S INDICATING MY POSITIONS AND O'S INDICATING YOUR POS-" 0190 PRINT "ITIONS." 0200 PRINT "AFTER I WIN, I WILL PRINT THE BOARD SHOWING THE FINAL" 0210 PRINT "POSITIONS." 0220 DIM X[64],L[76],M[76,4],Y[16] 0230 DEF FNL(I)=X[M[I,1]]+X[M[I,2]]+X[M[I,3]]+X[M[I,4]] 0240 DEF FNM(M)=M+110+6*INT((M-1)/4)+60*INT((M-1)/16) 0250 MAT READ Y,M 0260 MAT X=ZER 0270 PRINT "DO YOU WANT TO MOVE FIRST"; 0280 INPUT A$ 0290 IF A$[1,1]="Y" THEN 340 0300 IF A$[1,1]="N" THEN 490 0310 PRINT "YES OR NO"; 0320 GOTO 280 0330 GOSUB 2030 0340 PRINT "YOUR MOVE"; 0350 INPUT J1 0360 GOSUB 1990 0370 LET K1=INT(J1/100) 0380 LET J2=(J1-K1*100) 0390 LET K2=INT(J2/10) 0400 LET K3=J1-K1*100-K2*10 0410 IF K1 <= 4 AND K2 <= 4 AND K3 <= 4 THEN 440 0420 PRINT "ILLEGAL MOVE, TRY AGAIN" 0430 GOTO 350 0440 LET M=16*K1+4*K2+K3-20 0450 IF X[M]=0 THEN 480 0460 PRINT "THAT SQUARE IS USED, TRY AGAIN" 0470 GOTO 340 0480 LET X[M]=1 0490 GOSUB 1330 0500 LET S=T=0 0510 FOR I=1 TO 76 0520 IF L[I] <> 4 THEN 600 0530 PRINT "CONGRATULATIONS!" 0540 PRINT "YOU WIN AS FOLLOWS"; 0550 PRINT FNM(M[I,1]);FNM(M[I,2]);FNM(M[I,3]);FNM(M[I,4]); 0560 PRINT 0570 PRINT "FINAL POSITION:" 0580 GOSUB 2030 0590 GOTO 1220 0600 IF L[I] <> 15 THEN 620 0610 LET S=I 0620 IF L[I] <> 3 THEN 640 0630 LET T=I 0640 NEXT I 0650 IF S=0 THEN 740 0660 LET I=S 0670 FOR J=1 TO 4 0680 LET M=M[I,J] 0690 IF X[M]>0 THEN 730 0700 LET X[M]=5 0710 PRINT "MACHINE MOVES TO"FNM(M)", AND WINS AS FOLLOWS"; 0720 GOTO 550 0730 NEXT J 0740 IF T=0 THEN 1060 0750 LET I=T 0760 FOR J=1 TO 4 0770 LET M=M[I,J] 0780 IF X[M]>0 THEN 820 0790 LET X[M]=5 0800 PRINT "NICE TRY --MACHINE MOVES TO"FNM(M) 0810 GOTO 330 0820 NEXT J 0830 FOR I=1 TO 76 0840 LET L=FNL(I) 0850 IF INT(L) <> 2 THEN 910 0860 IF L>2 THEN 1770 0870 FOR J=1 TO 4 0880 IF X[M[I,J]]>0 THEN 900 0890 LET X[M[I,J]]=.125 0900 NEXT J 0910 NEXT I 0920 GOSUB 1330 0930 FOR I=1 TO 76 0940 IF L[I]=.5 THEN 1870 0950 IF L[I]=1.375 THEN 1870 0960 NEXT I 0970 GOTO 1450 0980 FOR Z=1 TO 16 0990 IF X[Y[Z]]=0 THEN 1020 1000 NEXT Z 1010 GOTO 1370 1020 LET M=Y[Z] 1030 LET X[M]=5 1040 PRINT "MACHINE MOVEs TO"FNM(M) 1050 GOTO 330 1060 FOR I=1 TO 76 1070 LET L=FNL(I) 1080 IF INT(L) <> 10 THEN 1140 1090 IF L>10 THEN 1770 1100 FOR J=1 TO 4 1110 IF X[M[I,J]]>0 THEN 1130 1120 LET X[M[I,J]]=.125 1130 NEXT J 1140 NEXT I 1150 GOSUB 1330 1160 FOR I=1 TO 76 1170 IF L[I]=.5 THEN 1870 1180 IF L[I]=5.375 THEN 1870 1190 NEXT I 1200 GOSUB 1990 1210 GOTO 830 1220 LET Z9=Z9+1 1230 IF Z9=2 THEN 2170 1240 PRINT "WOULD YOU LIKE ANOTHER GAME"; 1250 INPUT A$ 1260 IF A$[1,1]="Y" THEN 260 1270 IF A$[1,1]="N" THEN 1300 1280 PRINT "YES OR NO"; 1290 GOTO 1250 1300 END 1310 REM 1320 REM 1330 FOR S=1 TO 76 1340 LET L[S]=FNL(S) 1350 NEXT S 1360 RETURN 1370 FOR M=1 TO 64 1380 IF X[M]>0 THEN 1420 1390 LET X[M]=5 1400 PRINT "MACHINE LIKES"FNM(M) 1410 GOTO 330 1420 NEXT M 1430 PRINT "THE GAME IS A DRAW" 1440 GOTO 1220 1450 FOR K=1 TO 72 STEP 4 1460 LET P=INT(L[K])+INT(L[K+1])+INT(L[K+2])+INT(L[K+3]) 1470 IF P=4 OR P=9 THEN 1510 1480 NEXT K 1490 GOSUB 1990 1500 GOTO 980 1510 LET S=.125 1520 FOR I=K TO K+3 1530 GOTO 1880 1540 NEXT I 1550 LET S=0 1560 GOTO 1520 1570 DATA 1,49,52,4,13,61,64,16,22,39,23,38,26,42,27,43 1580 DATA 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 1590 DATA 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38 1600 DATA 39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 1610 DATA 57,58,59,60,61,62,63,64 1620 DATA 1,17,33,49,2,18,34,50,3,19,35,51,4,20,36,52 1630 DATA 5,21,37,53,6,22,38,54,7,23,39,55,8,24,40,56 1640 DATA 9,25,41,57,10,26,42,58,11,27,43,59,12,28,44,60 1650 DATA 13,29,45,61,14,30,46,62,15,31,47,63,16,32,48,64 1660 DATA 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61 1670 DATA 2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62 1680 DATA 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63 1690 DATA 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64 1700 DATA 1,6,11,16,17,22,27,32,33,38,43,48,49,54,59,64 1710 DATA 13,10,7,4,29,26,23,20,45,42,39,36,61,58,55,52 1720 DATA 1,21,41,61,2,22,42,62,3,23,43,63,4,24,44,64 1730 DATA 49,37,25,13,50,38,26,14,51,39,27,15,52,40,28,16 1740 DATA 1,18,35,52,5,22,39,56,9,26,43,60,13,30,47,64 1750 DATA 49,34,19,4,53,38,23,8,57,42,27,12,61,46,31,16 1760 DATA 1,22,43,64,16,27,38,49,4,23,42,61,13,26,39,52 1770 FOR J=1 TO 4 1780 IF X[M[I,J]] <> .125 THEN 1860 1790 LET X[M[I,J]]=5 1800 IF L<5 THEN 1830 1810 PRINT "LET'S SEE YOU GET OUT OF THIS: MACHINE MOVES TO"; 1820 GOTO 1840 1830 PRINT "YOU FOX! JUST IN THE NICK OF TIME, MACHINE MOVES TO"; 1840 PRINT FNM(M[I,J]) 1850 GOTO 330 1860 NEXT J 1870 LET S=.125 1880 IF I-INT(I/4)*4>1 THEN 1910 1890 LET A=1 1900 GOTO 1920 1910 LET A=2 1920 FOR J=A TO 5-A STEP 5-2*A 1930 IF X[M[I,J]]=S THEN 1960 1940 NEXT J 1950 GOTO 1540 1960 LET X[M[I,J]]=5 1970 PRINT "MACHINE TAKES"; 1980 GOTO 1840 1990 FOR I=1 TO 64 2000 LET X[I]=INT(X[I]) 2010 NEXT I 2020 RETURN 2030 LET A$="O.X" 2040 PRINT ""; 2050 FOR I1=1 TO 13 STEP 4 2060 FOR J1=I1 TO I1+48 STEP 16 2070 FOR K1=J1 TO J1+3 2080 LET L=ABS(X[K1]-2) 2090 PRINT A$[L,L]; 2100 NEXT K1 2110 PRINT " "; 2120 NEXT J1 2130 PRINT " " 2140 NEXT I1 2150 PRINT ""; 2160 RETURN 2170 END