DECLARE FUNCTION chwin! (a!, p!) DECLARE FUNCTION move! (a!, p!) sta: DO won = 0 CLS PRINT "1|2|3" PRINT "-----" PRINT "4|5|6" PRINT "-----" PRINT "7|8|9" RANDOMIZE TIMER DIM SHARED sp(9) AS INTEGER FOR a = 1 TO 9 sp(a) = 0 NEXT reg = INT(RND * 2) fturn = INT(RND * 2) IF fturn = 1 THEN IF reg = 1 THEN n = move(5, 1) FOR a = 1 TO 9 IF sp(a) = 2 THEN t = a NEXT IF t = 2 THEN n = move(3, 1) n = move(7, 1) n = move(6, 1) n = move(9, 1) n = move(4, 1) END IF IF t = 4 THEN n = move(1, 1) IF move(9, 1) THEN n = move(2, 1) IF move(8, 1) THEN n = move(3, 1) END IF IF t = 6 THEN n = move(9, 1) IF move(1, 1) THEN n = move(8, 1) IF move(7, 1) THEN n = move(2, 1) END IF IF t = 8 THEN n = move(7, 1) IF move(3, 1) THEN n = move(4, 1) IF move(1, 1) THEN n = move(6, 1) END IF IF t = 1 THEN n = move(7, 1) n = move(3, 1) n = move(2, 1) n = move(8, 1) n = move(6, 1) n = move(4, 1) IF won = 0 THEN LOCATE 10: PRINT "Tie!" END IF IF t = 3 THEN n = move(9, 1) n = move(1, 1) n = move(2, 1) n = move(8, 1) n = move(4, 1) n = move(6, 1) IF won = 0 THEN LOCATE 10: PRINT "Tie!" END IF IF t = 7 THEN n = move(1, 1) n = move(9, 1) n = move(8, 1) n = move(2, 1) n = move(6, 1) n = move(4, 1) IF won = 0 THEN LOCATE 10: PRINT "Tie!" END IF IF t = 9 THEN n = move(3, 1) n = move(7, 1) n = move(8, 1) n = move(2, 1) n = move(4, 1) n = move(6, 1) IF won = 0 THEN LOCATE 10: PRINT "Tie!" END IF ELSE n = move(3, 1) IF sp(2) = 2 THEN n = move(5, 1) n = move(7, 1) n = move(6, 1) n = move(9, 1) n = move(4, 1) ELSEIF sp(4) = 2 THEN n = move(5, 1) n = move(9, 1) n = move(1, 1) n = move(2, 1) n = move(9, 1) ELSEIF sp(6) = 2 THEN n = move(5, 1) n = move(7, 1) n = move(2, 1) n = move(1, 1) n = move(8, 1) ELSEIF sp(8) = 2 THEN n = move(5, 1) n = move(7, 1) n = move(9, 1) n = move(1, 1) n = move(6, 1) ELSEIF sp(7) = 2 THEN n = move(1, 1) n = move(2, 1) n = move(9, 1) n = move(5, 1) n = move(6, 1) ELSE n = move(7, 1) n = move(5, 1) IF sp(1) = 2 THEN n = move(9, 1) n = move(6, 1) n = move(8, 1) ELSEIF sp(9) = 2 THEN n = move(1, 1) n = move(4, 1) n = move(2, 1) ELSEIF sp(2) = 2 THEN n = move(8, 1) n = move(9, 1) n = move(1, 1) n = move(4, 1) 'n = move(6, 1) IF won = 0 THEN LOCATE 10: PRINT "Tie!" ELSEIF sp(4) = 2 THEN n = move(6, 1) n = move(9, 1) n = move(1, 1) n = move(2, 1) IF won = 0 THEN LOCATE 10: PRINT "Tie!" ELSEIF sp(6) = 2 THEN n = move(6, 1) n = move(9, 1) n = move(1, 1) n = move(2, 1) IF won = 0 THEN LOCATE 10: PRINT "Tie!" ELSE n = move(2, 1) n = move(1, 1) n = move(9, 1) x = move(6, 1) IF won = 0 THEN LOCATE 10: PRINT "Tie!" END IF END IF END IF ELSE a = -1 WHILE a LOCATE 9: INPUT "Move to where:", m a = move(m, 2) WEND IF move(5, 1) THEN a = INT(RND * 5) n = move(a * 2 + 1, 1) q = 0 f = m m = 0 DO m = 0 FOR a = 1 TO 9 IF (chwin(a, 2) = 1) AND (sp(a) = 0) THEN m = a NEXT FOR a = 1 TO 9 IF (chwin(a, 1) = 1) AND (sp(a) = 0) THEN m = a NEXT IF m > 0 THEN n = move(m, 1) ELSE 'IF sp(10 - f) = 2 THEN 'PRINT m 'PRINT "a" ' n = move(4, 1) ' n = move(6, 1) ' ELSE 'PRINT "b" IF move(1, 1) THEN IF move(3, 1) THEN IF move(7, 1) THEN IF move(9, 1) THEN IF move(2, 1) THEN IF move(4, 1) THEN IF move(6, 1) THEN n = move(8, 1) END IF END IF END IF END IF END IF END IF END IF END IF 'END IF q = 1 FOR a = 1 TO 9 IF sp(a) = 0 THEN q = 0 NEXT LOOP WHILE won = 0 AND q = 0 IF won = 0 THEN LOCATE 10: PRINT "Tie!" ELSE IF (m MOD 2) = 1 THEN q = 0 f = m m = 0 DO m = 0 FOR a = 1 TO 9 IF (chwin(a, 2) = 1) AND (sp(a) = 0) THEN m = a NEXT FOR a = 1 TO 9 IF (chwin(a, 1) = 1) AND (sp(a) = 0) THEN m = a NEXT IF m > 0 THEN n = move(m, 1) ELSE IF sp(10 - f) = 2 THEN 'PRINT m 'PRINT "a" n = move(4, 1) n = move(6, 1) ELSE 'PRINT "b" IF move(1, 1) THEN IF move(3, 1) THEN IF move(7, 1) THEN IF move(9, 1) THEN IF move(2, 1) THEN IF move(4, 1) THEN IF move(6, 1) THEN n = move(8, 1) END IF END IF END IF END IF END IF END IF END IF END IF END IF q = 1 FOR a = 1 TO 9 IF sp(a) = 0 THEN q = 0 NEXT LOOP WHILE won = 0 AND q = 0 IF won = 0 THEN LOCATE 10: PRINT "Tie!" ELSE q = 0 f = m m = 0 z = 1 DO m = 0 FOR a = 1 TO 9 IF (chwin(a, 2) = 1) AND (sp(a) = 0) THEN m = a NEXT FOR a = 1 TO 9 IF (chwin(a, 1) = 1) AND (sp(a) = 0) THEN m = a NEXT IF m > 0 THEN n = move(m, 1) ELSE IF (sp(2) = 2) AND (sp(4) = 2) AND (sp(1) = 0) THEN n = move(1, 1) ELSEIF (sp(2) = 2) AND (sp(6) = 2) AND (sp(3) = 0) THEN n = move(3, 1) ELSEIF (sp(8) = 2) AND (sp(4) = 2) AND (sp(7) = 0) THEN n = move(7, 1) ELSEIF (sp(8) = 2) AND (sp(6) = 2) AND (sp(9) = 0) THEN n = move(9, 1) ELSE 'PRINT "b" IF move(1, 1) THEN IF move(3, 1) THEN IF move(7, 1) THEN IF move(9, 1) THEN IF move(2, 1) THEN IF move(4, 1) THEN IF move(6, 1) THEN n = move(8, 1) END IF END IF END IF END IF END IF END IF END IF END IF END IF q = 1 FOR a = 1 TO 9 IF sp(a) = 0 THEN q = 0 NEXT LOOP WHILE won = 0 AND q = 0 IF won = 0 THEN LOCATE 10: PRINT "Tie!" END IF END IF END IF LOCATE 11: PRINT "Play Again?" k$ = INPUT$(1) LOOP WHILE UCASE$(k$) = "Y" FUNCTION chwin (a, p) n = 0 IF (a < 4) THEN IF (sp(a + 3) = p) AND (sp(a + 6) = p) THEN n = 1 ELSEIF (a < 7) THEN IF (sp(a - 3) = p) AND (sp(a + 3) = p) THEN n = 1 ELSEIF (sp(a - 6) = p) AND (sp(a - 3) = p) THEN n = 1 END IF IF ((a MOD 3) = 1) THEN IF (sp(a + 1) = p) AND (sp(a + 2) = p) THEN n = 1 ELSEIF ((a MOD 3) = 2) THEN IF (sp(a - 1) = p) AND (sp(a + 1) = p) THEN n = 1 ELSEIF (sp(a - 2) = p) AND (sp(a - 1) = p) THEN n = 1 END IF IF a = 1 THEN IF (sp(5) = p) AND (sp(9) = p) THEN n = 1 ELSEIF a = 5 THEN IF (sp(1) = p) AND (sp(9) = p) THEN n = 1 IF (sp(3) = p) AND (sp(7) = p) THEN n = 1 ELSEIF a = 9 THEN IF (sp(1) = p) AND (sp(5) = p) THEN n = 1 ELSEIF a = 3 THEN IF (sp(5) = p) AND (sp(7) = p) THEN n = 1 ELSEIF a = 7 THEN IF (sp(3) = p) AND (sp(5) = p) THEN n = 1 END IF chwin = n END FUNCTION FUNCTION move (a, p) SHARED won IF won = 0 THEN IF (a < 1) OR (a > 9) THEN move = -1 EXIT FUNCTION END IF IF sp(a) = 0 THEN sp(a) = p ELSE move = -1 EXIT FUNCTION END IF y = INT((a - 1) / 3) * 2 + 1 x = ((a - 1) MOD 3) * 2 + 1 LOCATE y, x IF p = 1 THEN PRINT "X" IF p = 2 THEN PRINT "O" IF p = 1 THEN LOCATE 8: PRINT "Computers move:"; a IF chwin(a, p) = 1 THEN won = 1 LOCATE 10 IF p = 1 THEN PRINT "Computer won!" IF p = 2 THEN PRINT "Person won!" 'PRINT "Play Again?" 'f$ = UCASE$(INPUT$(1)) 'IF f$ = "Y" THEN CHAIN "tic.bas" 'END move = 0 EXIT FUNCTION END IF IF p = 1 THEN a = -1 WHILE a LOCATE 9: PRINT SPACE$(20) LOCATE 9: INPUT "Move to where: ", m a = move(m, 2) WEND END IF END IF move = 0 END FUNCTION