SUBROUTINE MAIN COMMON /CTTT/ W(304), B(64) INTEGER W INTEGER B INTEGER PROMPT LOGICAL*1 BUF(20) CALL QUERY(12Husage: ttt.) CALL TTTINI IF (.NOT.( PROMPT( 27HDo you want the rules? (n) , BUF, 1) .EQ. -1 * ))GOTO 23000 RETURN 23000 CONTINUE IF (.NOT.( BUF(1) .EQ. 89 .OR. BUF(1) .EQ. 121 ))GOTO 23002 CALL RULES 23002 CONTINUE 23001 CONTINUE IF (.NOT.( PROMPT( 29HDo you want to go first? (n) , BUF, 1) .EQ. *-1 ))GOTO 23004 RETURN 23004 CONTINUE IF (.NOT.( BUF(1) .EQ. 89 .OR. BUF(1) .EQ. 121 ))GOTO 23006 CALL USER 23006 CONTINUE 23005 CONTINUE 23008 CONTINUE CALL BEAST CALL USER 23009 GOTO 23008 23010 CONTINUE RETURN END SUBROUTINE TTTINI INTEGER I COMMON /CTTT/ W(304), B(64) INTEGER W INTEGER B DATA W /01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15 *, 16, 01, 05, 09, 13, 02, 06, 10, 14, 03, 07, 11, 15, 04, 08, 12, *16, 01, 06, 11, 16, 04, 07, 10, 13, 17, 18, 19, 20, 21, 22, 23, 24 *, 25, 26, 27, 28, 29, 30, 31, 32, 17, 21, 25, 29, 18, 22, 26, 30, *19, 23, 27, 31, 20, 24, 28, 32, 17, 22, 27, 32, 20, 23, 26, 29, 33 *, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 33, *37, 41, 45, 34, 38, 42, 46, 35, 39, 43, 47, 36, 40, 44, 48, 33, 38 *, 43, 48, 36, 39, 42, 45, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, *59, 60, 61, 62, 63, 64, 49, 53, 57, 61, 50, 54, 58, 62, 51, 55, 59 *, 63, 52, 56, 60, 64, 49, 54, 59, 64, 52, 55, 58, 61, 01, 17, 33, *49, 02, 18, 34, 50, 03, 19, 35, 51, 04, 20, 36, 52, 05, 21, 37, 53 *, 06, 22, 38, 54, 07, 23, 39, 55, 08, 24, 40, 56, 09, 25, 41, 57, *10, 26, 42, 58, 11, 27, 43, 59, 12, 28, 44, 60, 14, 30, 46, 62, 13 *, 29, 45, 61, 15, 31, 47, 63, 16, 32, 48, 64, 01, 22, 43, 64, 05, *22, 39, 56, 09, 26, 43, 60, 13, 26, 39, 52, 02, 22, 42, 62, 14, 26 *, 38, 50, 03, 23, 43, 63, 15, 27, 39, 51, 04, 23, 42, 61, 08, 23, *38, 53, 12, 27, 42, 57, 16, 27, 38, 49, 01, 21, 41, 61, 01, 18, 35 *, 52, 04, 19, 34, 49, 04, 24, 44, 64, 13, 25, 37, 49, 13, 30, 47, *64, 16, 31, 46, 61, 16, 28, 40, 52/ I = 1 23011 IF (.NOT.(I .LE. 64 ))GOTO 23013 B(I) = 0 23012 I = I + 1 GOTO 23011 23013 CONTINUE RETURN END SUBROUTINE BEAST INTEGER I, J, T INTEGER BS, BT, S, V(76) INTEGER WEIGHT COMMON /CTTT/ W(304), B(64) INTEGER W INTEGER B I = 1 23014 IF (.NOT.(I .LE. 4 * 76 ))GOTO 23016 T = 0 J = 0 23017 IF (.NOT.(J .LT. 4 ))GOTO 23019 T = T + B( W(I+J) ) 23018 J = J + 1 GOTO 23017 23019 CONTINUE V( (I-1)/4 + 1 ) = T IF (.NOT.( T .EQ. 3 * 5 ))GOTO 23020 GOTO 23016 23020 CONTINUE 23015 I = I + 4 GOTO 23014 23016 CONTINUE IF (.NOT.( I .LE. 4 * 76 ))GOTO 23022 J = 0 23024 IF (.NOT.(J .LT. 4 ))GOTO 23026 IF (.NOT.( B( W(I+J) ) .EQ. 0 ))GOTO 23027 B( W(I+J) ) = 5 GOTO 23026 23027 CONTINUE 23025 J = J + 1 GOTO 23024 23026 CONTINUE CALL BOARD CALL REMARK( 6Hi win.) CALL ENDST(0) 23022 CONTINUE BT = 0 S = 1 23029 IF (.NOT.(S .LE. 64 ))GOTO 23031 IF (.NOT.( B(S) .NE. 0 ))GOTO 23032 GOTO 23030 23032 CONTINUE T = 0 I = 1 23034 IF (.NOT.(I .LE. 4 * 76 ))GOTO 23036 J = 0 23037 IF (.NOT.(J .LT. 4 ))GOTO 23039 IF (.NOT.( W(I+J) .EQ. S ))GOTO 23040 GOTO 23039 23040 CONTINUE 23038 J = J + 1 GOTO 23037 23039 CONTINUE IF (.NOT.( J .NE. 4 ))GOTO 23042 IF (.NOT.( V( (I-1)/4 + 1 ) .EQ. 3 * 1 ))GOTO 23044 B(S) = 5 RETURN 23044 CONTINUE T = T + WEIGHT( V( (I-1)/4 + 1 ) ) 23042 CONTINUE 23035 I = I + 4 GOTO 23034 23036 CONTINUE IF (.NOT.( T .GT. BT ))GOTO 23046 BT = T BS = S 23046 CONTINUE 23030 S = S + 1 GOTO 23029 23031 CONTINUE IF (.NOT.( BT .NE. 0 ))GOTO 23048 B(BS) = 5 GOTO 23049 23048 CONTINUE S = 1 23050 IF (.NOT.(S .LE. 64 ))GOTO 23052 IF (.NOT.( B(S) .EQ. 0 ))GOTO 23053 GOTO 23052 23053 CONTINUE 23051 S = S + 1 GOTO 23050 23052 CONTINUE IF (.NOT.( S .GT. 64 ))GOTO 23055 CALL REMARK( 5Hdraw.) CALL ENDST(0) 23055 CONTINUE B(S) = 5 23049 CONTINUE RETURN END SUBROUTINE BOARD INTEGER I, J LOGICAL*1 SEP(51) DATA SEP(1)/45/,SEP(2)/45/,SEP(3)/45/,SEP(4)/45/,SEP(5)/45/,SEP(6) */45/,SEP(7)/45/,SEP(8)/45/,SEP(9)/45/,SEP(10)/45/,SEP(11)/45/,SEP( *12)/32/,SEP(13)/32/,SEP(14)/45/,SEP(15)/45/,SEP(16)/45/,SEP(17)/45 */,SEP(18)/45/,SEP(19)/45/,SEP(20)/45/,SEP(21)/45/,SEP(22)/45/,SEP( *23)/45/,SEP(24)/45/,SEP(25)/32/,SEP(26)/32/,SEP(27)/45/,SEP(28)/45 */,SEP(29)/45/,SEP(30)/45/,SEP(31)/45/,SEP(32)/45/,SEP(33)/45/,SEP( *34)/45/,SEP(35)/45/,SEP(36)/45/,SEP(37)/45/,SEP(38)/32/,SEP(39)/32 */,SEP(40)/45/,SEP(41)/45/,SEP(42)/45/,SEP(43)/45/,SEP(44)/45/,SEP( *45)/45/,SEP(46)/45/,SEP(47)/45/,SEP(48)/45/,SEP(49)/45/,SEP(50)/45 */,SEP(51)/0/ CALL PUTCH(10,2) I = 1 23057 IF (.NOT.(I .LE. 4 ))GOTO 23059 IF (.NOT.( I .NE. 1 ))GOTO 23060 CALL PUTLIN(SEP,2) 23060 CONTINUE CALL PUTCH(10,2) J = 0 23062 IF (.NOT.(J .LT. 64 ))GOTO 23064 CALL PSQ(I+J) IF (.NOT.( J .EQ. 12 .OR. J .EQ. 28 .OR. J .EQ. 44 ))GOTO 23065 CALL PUTLIN( 2H , 2) GOTO 23066 23065 CONTINUE IF (.NOT.( J .GE. 60 ))GOTO 23067 CALL PUTCH(10,2) GOTO 23068 23067 CONTINUE CALL PUTCH(33,2) 23068 CONTINUE 23066 CONTINUE 23063 J = J + 4 GOTO 23062 23064 CONTINUE 23058 I = I + 1 GOTO 23057 23059 CONTINUE CALL PUTCH(10,2) RETURN END SUBROUTINE PSQ(S) INTEGER S, V COMMON /CTTT/ W(304), B(64) INTEGER W INTEGER B LOGICAL*1 UU(3) LOGICAL*1 CC(3) LOGICAL*1 BB(3) DATA UU(1)/85/,UU(2)/85/,UU(3)/0/ DATA CC(1)/67/,CC(2)/67/,CC(3)/0/ DATA BB(1)/32/,BB(2)/32/,BB(3)/0/ V = B(S) IF (.NOT.( V .EQ. 1 ))GOTO 23069 CALL PUTLIN( UU, 2) GOTO 23070 23069 CONTINUE IF (.NOT.( V .EQ. 5 ))GOTO 23071 CALL PUTLIN( CC, 2) GOTO 23072 23071 CONTINUE CALL PUTLIN( BB, 2) 23072 CONTINUE 23070 CONTINUE RETURN END SUBROUTINE RULES CALL PUTLIN(1H ,2) CALL PUTCH(10,2) CALL PUTLIN(50HThree dimensional tic-tac-toe is played on a 4x4x4, *2) CALL PUTCH(10,2) CALL PUTLIN(50Hboard. To win you must get 4 in a row. Your moves, *2) CALL PUTCH(10,2) CALL PUTLIN(50Hare specified as a 3 digit number; the first digit, *2) CALL PUTCH(10,2) CALL PUTLIN(50His the level, the second the row and the third the, *2) CALL PUTCH(10,2) CALL PUTLIN(50Hcolumn. Levels and columns go from left to right, *2) CALL PUTCH(10,2) CALL PUTLIN(50Hfrom 0 to 3. Rows go from top to bottom with 0 on, *2) CALL PUTCH(10,2) CALL PUTLIN(8Hthe top.,2) CALL PUTCH(10,2) CALL PUTLIN(1H ,2) CALL PUTCH(10,2) RETURN END SUBROUTINE USER COMMON /CTTT/ W(304), B(64) INTEGER W INTEGER B INTEGER I, J, T INTEGER D1, D2, D3 INTEGER PROMPT LOGICAL*1 BUF(20) CALL BOARD 23073 CONTINUE IF (.NOT.( PROMPT( 11HYour move? , BUF, 1) .LE. 0 ))GOTO 23076 CALL ENDST(0) 23076 CONTINUE D1 = BUF(1) - 48 D2 = BUF(2) - 48 D3 = BUF(3) - 48 I = 16 * D1 + D2 + 4 * D3 + 1 IF (.NOT.( 1 .LE. I .AND. I .LE. 64 .AND. B(I) .EQ. 0 ))GOTO 23078 GOTO 23075 23078 CONTINUE CALL REMARK(4H?eh?) 23074 GOTO 23073 23075 CONTINUE B(I) = 1 I = 1 23080 IF (.NOT.(I .LE. 4 * 76 ))GOTO 23082 T = 0 J = 0 23083 IF (.NOT.(J .LT. 4 ))GOTO 23085 T = T + B( W(I+J) ) 23084 J = J + 1 GOTO 23083 23085 CONTINUE IF (.NOT.( T .EQ. 4 * 1 ))GOTO 23086 CALL REMARK( 8Hyou win.) CALL ENDST(0) 23086 CONTINUE 23081 I = I + 4 GOTO 23080 23082 CONTINUE RETURN END INTEGER FUNCTION WEIGHT(AT) INTEGER AT IF (.NOT.( AT .EQ. 1 ))GOTO 23088 WEIGHT = 1 GOTO 23089 23088 CONTINUE IF (.NOT.( AT .EQ. 2 * 1 ))GOTO 23090 WEIGHT = 4 GOTO 23091 23090 CONTINUE IF (.NOT.( AT .EQ. 5 ))GOTO 23092 WEIGHT = 1 GOTO 23093 23092 CONTINUE IF (.NOT.( AT .EQ. 2 * 5 ))GOTO 23094 WEIGHT = 2 GOTO 23095 23094 CONTINUE WEIGHT = 0 23095 CONTINUE 23093 CONTINUE 23091 CONTINUE 23089 CONTINUE RETURN END