C THIS IS A FOCAL PROGRAM TO PLAY 3-DIMENSIONAL X & O C FOR TOTAL LINES IN ALL DIRECTIONS INCLUDING DIAGONALS C MODIFICATIONS ARE INCLUDED TO ALLOW IT TO START FIRST OR SECOND C AND TO BLOCK THE CENTER POSITION C C EXTENDED FUNCTIONS MUST BE DELETED TO MAKE ROOM FOR PROGRAM C C FORMATS ARE DESIGNED TO BE USED WITH THE EQUAL SIGN DELETED C FROM FOCAL 1969 BY CHANGING THE CONTENTS C OF LOCATION 0176 FROM 4371 TO 2741. C C THE GAME IS PLAYED ON THE CELLS OF A 3X3X3 CUBE. C THE PROGRAM PRINTS A PICTURE OF THE CUBE AFTER EACH MOVE. C PLAYERS TAKE TURNS UNTIL THE CUBE IS COMPLETELY FILLED. C THE PROGRAM COUNTS AND PRINTS THE LINES OF 3 X'S OR O'S C AT THE END OF THE GAME. C C TYPE "GO" TO START THE GAME. C C THE Z ARRAY STORES ALL MOVES. C EMPTY CELLS ARE MARKED WITH 0 C COMPUTERS O IS MARKED WITH 1 C PLAYERS X IS MARKED WITH 5 C ILLEGAL MOVE IN #14 IS MARKED WITH 2 C C COMPUTER ALWAYS WINS IF IT GETS #14 C OR TIES IF IT STARTS FIRST C C ROUTINE TO PRINT PLAYING POSITION CODES 01.10 T !"3-D X & O GAME FOR TOTAL LINES 01.20 T !"PLAYING POSITION NUMBERS:"!!" TOP LAYER 01.30 T " MIDDLE LAYER BOTTOM LAYER 01.40 F I=1,27;S Z(I)=I 01.50 F I=1,3,7;T !!;F J=0,9,18;T " ";F K=0,2;T %2 Z(I+J+K) 01.60 T !!"YOU PLAY X"!" I PLAY O C INITIALIZE STORAGE ARRAY Z, CALL MOVE ROUTINES 02.20 F I=1,27;S Z(I)=0 C COMPUTER STARTS FIRST 02.30 T !"I MOVE FIRST";D 4;F L=1,13;D 3;D 4 C C ALTERNATE RULES: C C PLAYER STARTS FIRST C 02.30 D 3;F L=1,13;D 4;D 3 C #14 ILLEGAL, COMPUTER STARTS FIRST C 02.30 S Z(14)=2;T !"#14 IS ILLEGAL",!;F L=1,13;D 4;D 3 C #14 ILLEGAL, PLAYER STARTS FIRST C 02.30 S Z(14)=2;T !"#14 IS ILLEGAL",!;F L=1,13;D 3;D 4 C PRINT FINAL SCORE 02.40 D 6;T !"YOU GET"P,!" I GET"C,!;Q C ROUTINE TO ASK FOR PLAYERS MOVE AND CHECK FOR ERRORS 03.40 A !!"YOUR MOVE"M 03.50 I (M)3.7,3.7;I (27-M)3.7;I (-Z(M))3.7;S Z(M)=5;R 03.70 A "ERROR, TRY AGAIN"M;G 3.5 C ROUTINE TO CHOOSE COMPUTER MOVES C PICK #14 IF AVAILABLE 04.05 I (-Z(14))4.1;S M=14;G 4.8 C PICK LAST CENTER OF FACE AVAILABLE 04.10 S M=0;S N=0;S A=-9;F K=5,6,23;D 9 04.20 F K=13,2,15;D 9 C PICK LAST AVAILABLE CORNER 04.30 F I=0,18,18;S Q=0;F J=1,6,7;F K=I+J,2,I+J+2;D 5.7 C PICK FOURTH CORNER IF 3 ARE TAKEN ON TOP OR BOTTOM 04.40 I (N)4.8 C IF (1 OR 19) OR (9 OR 27) ARE TAKEN, TAKE THE OTHER C TO PREVENT PLAYER FROM GTTIN 4 CORNERS ON ANY SIDE FACE 04.50 S N=0;F I=1,8,9;D 5.8 C IF NO CORNERS OR CENTERS ARE OPEN, USE ROUTINE 5 TO PICK MOVE 04.70 I (-M)4.8;F N=1,27;D 5 C MAKE MOVE AND PRINT CURRENT PICTURE 04.80 S Z(M)=1;T !"MY MOVE:"M,! 04.90 F I=1,3,7;T !;F J=0,9,18;T " ";F K=0,2;D 8.1 C MISCELLANEOUS ROUTINES USED BY ROUTINE 4 C FIND MOVE WITH MAXIMUM LINES + BLOCKED PLAYER POINTS 05.30 I (-Z(N))9.9;S Z(N)=1;D 6;S Z(N)=0;I (B+C-A)9.9,5.4,5.5 C FLIP COIN IF MOVES ARE OF EQUAL VALUE 05.40 I (FRAN()-.7)9.9 C ELSE MARK BEST MOVE AND RETURN 05.50 S A=B+C;S M=N;R C ROUTINE TO TERMINATE LOOP IN 04.30 05.60 S N=-1;S I=18;S J=18 C ROUTINE TO SUM CORNERS ON UPPER & LOWER FACES & CHECK FOR 3 05.70 S Q=Q+Z(K);D 9;I (K-I-J-2)9.9;I (Q-15)9.9,5.6 C ROUTINE TO CHECK FOR X IN (1 OR 19) OR (9 OR 27) 05.80 I [5-Z(I)-Z(I+18)]9.9,5.9 05.90 F K=I,18,I+18;D 9;D 5.6 C ROUTINE TO COUNT ALL LINES OF 3 06.10 S B=0;S C=0;S P=0;S J=9;F K=10,18;D 7 06.20 S J=1;F K=2,3,26;D 7 06.30 S J=3;F I=4,9,22;F K=I,I+2;D 7 06.40 F J=2,2,4;F K=5,9,23;D 7 06.50 F J=8,2,10;F K=11,3,17;D 7 06.60 F J=6,6,12;F K=13,15;D 7 06.70 S K=14;F I=5,6,11;F J=I,2,I+2;D 7 C ROUTINE TO DETECT & ACCUMULATE PLAYER LINES, COMPUTER LINES, C AND BLOCKED MOVES 7.2 S Q=Z(K-J)+Z(K)+Z(K+J);I (Q-3)9.9,7.4;I (Q-11)9.9,7.5;I (Q-13)9.9 07.30 S P=P+1;R 07.40 S C=C+1;R 07.50 S B=B+1 C ROUTINE TO PRINT PICTURE OF CURRENT BOARD 08.10 S N=Z(I+J+K);I (N-1)8.3,8.2;I (N-3)8.4;T " X 08.20 T " O 08.30 T " . 08.40 T " * C ROUTINE TO CHECK FOR OCCUPIED CELL 09.50 I (-Z(K))9.9;S M=K 09.90 R