0 REM * QUBIC- * 5 PRINT "DO YOU WANT INSTRUCTIONS"; 6 INPUT C$ 7 IF C$="NO" THEN 21 8 IF C$="YES" THEN 13 9 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'"; 10 GOTO 6 13 PRINT "THE GAME IS TIC-TAC-TOE IN A 4 X 4 X 4 CUBE." 14 PRINT "EACH MOVE IS INDICATED BY A 3 DIGIT NUMBER, WITH EACH" 15 PRINT "DIGIT BETWEEN 1 AND 4 INCLUSIVE. THE DIGITS INDICATE THE" 16 PRINT "LEVEL, COLUMN, AND ROW, RESPECTIVELY, OF THE OCCUPIED PLACE." 20 DIM X(64),L(76),M(76,4),Y(16) 21 FOR I=1 TO 16 22 READ Y(I) 23 NEXT I 24 FOR I=1 TO 76 25 FOR J=1 TO 4 26 READ M(I,J) 27 NEXT J 28 NEXT I 35 FOR I=1 TO 64 40 LET X(I)=0 50 NEXT I 54 LET Z=1 55 PRINT "DO YOU WANT TO MOVE FIRST"; 60 INPUT S$ 66 IF S$="NO" THEN 110 67 IF S$="YES" THEN 70 68 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'."; 69 GOTO 60 70 PRINT " " 72 PRINT "YOUR MOVE"; 80 INPUT J1 85 GOSUB 1800 90 LET K1=INT(J1/100) 95 LET J2=(J1-K1*100) 96 LET K2=INT(J2/10) 97 LET K3=J1-K1*100-K2*10 98 LET M=16*K1+4*K2+K3-20 99 IF X(M)=0 THEN 109 100 PRINT "THAT SQUARE IS USED, TRY AGAIN" 101 GOTO 70 109 LET X(M)=1 110 GOSUB 1050 180 FOR J=1 TO 3 190 FOR I=1 TO 76 200 IF J=1 THEN 210 201 IF J=2 THEN 220 203 IF J=3 THEN 235 205 NEXT I 206 NEXT J 207 GOTO 400 210 IF L(I)<>4 THEN 205 211 PRINT "YOU WIN AS FOLLOWS"; 212 FOR J=1 TO 4 213 LET M=M(I,J) 214 GOSUB 1000 216 NEXT J 217 GOTO 500 220 IF L(I)<>15 THEN 205 221 FOR J=1 TO 4 222 LET M=M(I,J) 223 IF X(M)<>0 THEN 227 224 LET X(M)=5 225 PRINT "MACHINE MOVES TO"; 226 GOSUB 1000 227 NEXT J 228 PRINT ", AND WINS AS FOLLOWS" 229 FOR J=1 TO 4 230 LET M=M(I,J) 231 GOSUB 1000 233 NEXT J 234 GOTO 500 235 IF L(I)<>3 THEN 205 236 PRINT "NICE TRY MACHINE MOVES TO"; 237 FOR J=1 TO 4 238 LET M=M(I,J) 239 IF X(M)<>0 THEN 245 240 LET X(M)=5 241 GOSUB 1000 243 GOTO 70 245 NEXT J 248 GOTO 400 250 FOR I=1 TO 76 251 LET L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4)) 252 LET L=L(I) 255 IF L<2 THEN 290 260 IF L>=3 THEN 290 265 IF L>2 THEN 1600 270 FOR J=1 TO 4 275 IF X(M(I,J))<>0 THEN 285 280 LET X(M(I,J))=1/8 285 NEXT J 290 NEXT I 295 GOSUB 1050 300 FOR I=1 TO 76 305 IF L(I)=1/2 THEN 1700 310 IF L(I)=1+3/8 THEN 1700 315 NEXT I 320 GOTO 1300 360 LET Z=1 362 IF X(Y(Z))=0 THEN 380 365 LET Z=Z+1 368 IF Z<>17 THEN 362 375 GOTO 1200 380 LET M=Y(Z) 381 LET X(M)=5 385 PRINT "MACHINE MOVES TO"; 389 GOSUB 1000 390 GOTO 70 400 LET X=X 410 FOR I=1 TO 76 412 LET L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4)) 415 LET L=L(I) 420 IF L<10 THEN 455 425 IF L>=11 THEN 455 430 IF L>10 THEN 1600 435 FOR J=1 TO 4 440 IF X(M(I,J))<>0 THEN 450 445 LET X(M(I,J))=1/8 450 NEXT J 455 NEXT I 470 GOSUB 1050 475 FOR I=1 TO 76 480 IF L(I)=.5 THEN 1700 485 IF L(I)=5+3/8 THEN 1700 490 NEXT I 492 GOSUB 1800 493 GOTO 250 500 PRINT " " 505 PRINT "DO YOU WANT TO TRY ANOTHER GAME"; 510 INPUT X$ 515 IF X$="YES" THEN 35 516 IF X$="NO" THEN 520 517 PRINT "INCORRECT ANSWER. PLEASE TYPE 'YES' OR 'NO'"; 518 GOTO 510 520 STOP 1000 LET K1=INT((M-1)/16)+1 1010 LET J2=M-16*(K1-1) 1030 LET K2=INT((J2-1)/4)+1 1035 LET K3=M-(K1-1)*16-(K2-1)*4 1040 LET M=K1*100+K2*10+K3 1042 PRINT M; 1045 RETURN 1050 FOR S=1 TO 64 1060 LET J1=M(S,1) 1070 LET J2=M(S,2) 1080 LET J3=M(S,3) 1090 LET J4=M(S,4) 1100 LET L(S)=X(J1)+X(J2)+X(J3)+X(J4) 1110 NEXT S 1120 RETURN 1200 FOR I=1 TO 64 1210 IF X(I)<>0 THEN 1250 1220 LET X(I)=5 1225 LET M=I 1226 PRINT "MACHINE LIKES"; 1227 GOSUB 1000 1228 PRINT " " 1230 GOTO 70 1250 NEXT I 1252 PRINT "THE GAME IS A DRAW" 1255 GOTO 500 1300 FOR K=1 TO 18 1305 LET P=0 1310 FOR I=4*K-3 TO 4*K 1315 FOR J=1 TO 4 1320 LET P=P+X(M(I,J)) 1325 NEXT J 1330 NEXT I 1345 IF P<4 THEN 1390 1350 IF P<5 THEN 1400 1355 IF P<9 THEN 1390 1360 IF P<10 THEN 1400 1390 NEXT K 1395 GOSUB 1800 1396 GOTO 360 1400 LET S=1/8 1405 FOR I=4*K-3 TO 4*K 1410 GOTO 1703 1415 NEXT I 1420 LET S=0 1425 GOTO 1405 1500 DATA 1,49,52,4,13,61,64,16,22,39,23,38,26,42,27,43 1510 DATA 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 1520 DATA 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38 1521 DATA 39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 1522 DATA 57,58,59,60,61,62,63,64 1523 DATA 1,17,33,49,5,21,37,53,9,25,41,57,13,29,45,61 1524 DATA 2,18,34,50,6,22,38,54,10,26,42,58,14,30,46,62 1525 DATA 3,19,35,51,7,23,39,55,11,27,43,59,15,31,47,63 1527 DATA 4,20,36,52,8,24,40,56,12,28,44,60,16,32,48,64 1529 DATA 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61 1532 DATA 2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62 1534 DATA 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63 1536 DATA 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64 1538 DATA 1,6,11,16,17,22,27,32,33,38,43,48,49,54,59,64 1540 DATA 13,10,7,4,29,26,23,20,45,42,39,36,61,58,55,52 1542 DATA 1,21,41,61,2,22,42,62,3,23,43,63,4,24,44,64 1544 DATA 49,37,25,13,50,38,26,14,51,39,27,15,52,40,28,16 1546 DATA 1,18,35,52,5,22,39,56,9,26,43,60,13,30,47,64 1548 DATA 49,34,19,4,53,38,23,8,57,42,27,12,61,46,31,16 1550 DATA 1,22,43,64,16,27,38,49,4,23,42,61,13,26,39,52 1600 FOR J=1 TO 4 1605 IF X(M(I,J))<>1/8 THEN 1650 1610 LET X(M(I,J))=5 1615 IF L(I)<5 THEN 1625 1620 PRINT "LET'S SEE YOU GET OUT OF THIS: MACHINE MOVES TO"; 1622 GOTO 1626 1625 PRINT "YOU FOX. JUST IN THE NICK OF TIME, MACHINE MOVES TO"; 1626 LET M=M(I,J) 1630 GOSUB 1000 1640 GOTO 70 1650 NEXT J 1660 PRINT "MACHINE CONCEDES THIS GAME." 1665 GOTO 500 1700 LET S=1/8 1703 IF I-INT(I/4)*4>1 THEN 1715 1705 LET A=1 1710 GOTO 1720 1715 LET A=2 1720 FOR J=A TO 5-A STEP 5-2*A 1725 IF X(M(I,J))=S THEN 1750 1730 NEXT J 1735 GOTO 1415 1750 LET X(M(I,J))=5 1755 LET M=M(I,J) 1760 PRINT "MACHINE TAKES"; 1770 GOSUB 1000 1780 GOTO 70 1800 FOR I=1 TO 64 1810 IF X(I)<>1/8 THEN 1850 1815 LET X(I)=0 1850 NEXT I 1860 RETURN 2000 END