7 PRINT TAB(-1,0);"*** QUBIC - 3D TIC-TAC-TOE - VER 1.0 ***" 8 PRINT : INPUT "DO YOU WANT INSTRUCTIONS (Y/N)? ";C$ 9 IF C$="N" THEN 20 10 IF C$<>"Y" THEN PRINT "ENTER ONLY 'Y' FOR YES AND 'N' FOR NO" : GOTO 8 11 PRINT : PRINT "THE GAME IS TIC-TAC-TOE ON A 4 X 4 X 4 CUBE." 12 PRINT "EACH MOVE IS INDICATED BY A NUMBER IN THE RANGE 0 TO 64." 13 PRINT "ENTER 0 TO GET THE BOARD DISPLAYED," 14 PRINT "ENTER 99 TO END THE GAME EARLY, YOU QUITTER, OTHERWISE," 16 PRINT " 1-16 INDICATES THE LOWEST PLANE OF THE BOARD." 17 PRINT "17-32 INDICATES THE SECOND LOWEST PLANE OF THE BOARD," 18 PRINT "33-48 INDICATES THE SECOND HIGHEST AND," 19 PRINT "49-64 INDICATES THE HIGHEST LEVEL. GOOD LUCK, YOU'LL NEED IT." 20 DIM X(64),L(76),M(76,4),Y(16) 21 RESTORE 22 FOR I=1 TO 16 23 READ Y(I) 24 NEXT I 25 FOR I=1 TO 76 26 FOR J=1 TO 4 27 READ M(I,J) 28 NEXT J 29 NEXT I 35 FOR I=1 TO 64 40 X(I)=0 50 NEXT I 51 Z=1 54 STRSIZ 80 55 PRINT CHR$(7) : INPUT "DO YOU WANT TO MOVE FIRST (Y/N)? ";S$ 66 IF S$="N" THEN 110 67 IF S$<>"Y" THEN PRINT "ENTER ONLY 'Y' FOR YES AND 'N' FOR NO" : GOTO 55 70 PRINT : PRINT CHR(7);"YOUR MOVE"; : INPUT MM 71 IF MM=99 THEN 505 72 IF (MM<0) OR (MM>64) THEN PRINT"INVALID#, TRY AGAIN";CHR(7); : GOTO 70 73 IF MM<>0 THEN 98 74 FOR I=1 TO 64 STEP 16 75 FOR J=I TO I+15 STEP 4 76 XLINE$=" " 77 FOR K=J TO J+3 78 C$=". " 79 IF X(K)=1 THEN C$="X " 80 IF X(K)=5 THEN C$="O " 81 XLINE$=XLINE$+C$ 82 NEXT K 83 XLINE$=XLINE$+" " 84 IF J<9 THEN PRINT TAB(I-2);" ";J;XLINE$;" ";J+3 85 IF J=9 THEN PRINT TAB(I-2);" ";J;XLINE$;J+3 86 IF J>9 THEN PRINT TAB(I-2);J;XLINE$;J+3 87 NEXT J 88 NEXT I 89 GOTO 70 98 GOSUB 1800 99 IF X(MM)<>0 THEN PRINT "THAT SQUARE IS OCCUPIED, TRY AGAIN";CHR(7); : GOTO 70 109 X(MM)=1 110 GOSUB 1050 180 FOR J=1 TO 3 190 FOR I=1 TO 76 191 IF J=1 GOTO 210 192 IF J=2 GOTO 220 193 IF J=3 GOTO 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 MM=M(I,J) 214 PRINT MM; 216 NEXT J 217 GOTO 505 220 IF L(I)<>15 THEN 205 221 FOR J=1 TO 4 222 MM=M(I,J) 223 IF X(MM)<>0 THEN 227 224 X(MM)=5 225 PRINT "MACHINE MOVES TO "; 226 PRINT MM; 227 NEXT J 228 PRINT ", AND WINS AS FOLLOWS" 229 FOR J=1 TO 4 230 PRINT M(I,J) 233 NEXT J 234 GOTO 505 235 IF L(I)<>3 THEN 205 236 PRINT "NICE TRY, MACHINE MOVES TO "; 237 FOR J=1 TO 4 238 MM=M(I,J) 239 IF X(MM)<>0 THEN 245 240 X(MM)=5 241 PRINT MM; 243 GOTO 70 245 NEXT J 248 GOTO 400 250 FOR I=1 TO 76 251 L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4)) 252 LL=L(I) 255 IF LL<2 THEN 290 260 IF LL>=3 THEN 290 265 IF LL>2 THEN 1600 270 FOR J=1 TO 4 275 IF X(M(I,J))<>0 THEN 285 280 X(M(I,J))=.125 285 NEXT J 290 NEXT I 295 GOSUB 1050 300 FOR I=1 TO 76 305 IF L(I)=.5 THEN 1700 310 IF L(I)=1.375 THEN 1700 315 NEXT I 320 GOTO 1300 360 Z=1 362 IF X(Y(Z))=0 THEN 380 365 Z=Z+1 368 IF Z<>17 THEN 362 375 GOTO 1200 380 MM=Y(Z) 381 X(MM)=5 385 PRINT "MACHINE MOVES TO "; 389 PRINT MM; 390 GOTO 70 400 XX=XX 410 FOR I=1 TO 76 412 L(I)=X(M(I,1))+X(M(I,2))+X(M(I,3))+X(M(I,4)) 415 LL=L(I) 420 IF LL<10 THEN 455 425 IF LL>=11 THEN 455 430 IF LL>10 THEN 1600 435 FOR J=1 TO 4 440 IF X(M(I,J))<>0 THEN 450 445 X(M(I,J))=.125 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.375 THEN 1700 490 NEXT I 492 GOSUB 1800 493 GOTO 250 505 PRINT CHR$(7) : INPUT "DO YOU WANT TO TRY ANOTHER GAME (Y/N)? ";X$ 515 IF X$="Y" THEN 35 516 IF X$<>"N" THEN PRINT "ENTER 'Y' FOR YES AND 'N' FOR NO" : GOTO 505 520 CHAIN "DSK1:DEMO[20,20]" 1050 FOR S=1 TO 76 1060 J1=M(S,1) 1070 J2=M(S,2) 1080 J3=M(S,3) 1090 J4=M(S,4) 1100 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 X(I)=5 1225 MM=I 1226 PRINT "MACHINE LIKES "; 1227 PRINT MM; 1228 PRINT " " 1230 GOTO 70 1250 NEXT I 1252 PRINT "THE GAME IS A DRAW!";CHR$(7) 1255 GOTO 505 1300 FOR K=1 TO 18 1305 P=0 1310 FOR I=4*K-3 TO 4*K 1315 FOR J=1 TO 4 1320 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 S=.125 1405 FOR I=4*K-3 TO 4*K 1410 GOTO 1703 1415 NEXT I 1420 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))<>.125 THEN 1650 1610 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 MM=M(I,J) 1630 PRINT MM; 1640 GOTO 70 1650 NEXT J 1660 PRINT "MACHINE CONCEDES THIS GAME.";CHR$(7) 1665 GOTO 505 1700 S=.125 1703 IF I-INT(I/4)*4>1 THEN 1715 1705 A=1 1710 GOTO 1720 1715 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 X(M(I,J))=5 1755 MM=M(I,J) 1760 PRINT "MACHINE TAKES "; 1770 PRINT MM; 1780 GOTO 70 1800 FOR I=1 TO 64 1810 IF X(I)<>.125 THEN 1850 1815 X(I)=0 1850 NEXT I 1860 RETURN 9999 END