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