'===========================================================================
' Subject: X'S AND O'S                        Date: Year of 1995 (00:00:00)
'  Author: The ABC Programmer                 Code: QB, QBasic             
'  Origin: X'S,O'S,TIC,TAC,TOE              Packet: GAMES.ABC
'===========================================================================
'===================================================================
'    X's and O's by William Yu 1994
'
'  Yes the basic of all basic games, this is an EGA version of
'  the popular X's and O's game (or TAC-TAC-TOE if you prefer).
'
'  WARNING:  Do not adopt this style of programming.
'            I programmed this at school.  It's really messy and
'            again I don't document much of my stuff that is
'            years old, because I don't know what half of it means.
'===================================================================

DIM TITLE(650), TITLE2(650)
DIM X(510), O(450)
P1 = 0
P2 = 0
CLS
SCREEN 9
PALETTE 15, 0
PALETTE 8, 0
COLOR 15
PRINT "Programmed by William Yu (C) 1994  Allrights Reserved"
GET (0, 1)-(425, 12), TITLE
COLOR 8
LOCATE 1, 1: PRINT "Programmed by William Yu (C) 1994  Allrights Reserved"
GET (0, 1)-(425, 12), TITLE2
LOCATE 1, 1: PRINT SPACE$(80)
LINE (1, 1)-(640, 16), 12, BF
LINE (1, 1)-(639, 17), 4, B
PALETTE 15, 31
PUT (98, 5), TITLE2
PUT (95, 3), TITLE, OR
LINE (1, 50)-(319, 249), 10, B
LINE (105, 50)-(105, 249), 10
LINE (210, 50)-(210, 249), 10
LINE (1, 117)-(319, 117), 10
LINE (1, 185)-(319, 185), 10
LINE (17, 60)-(91, 107), 12
LINE (18, 60)-(92, 107), 12
LINE (91, 60)-(17, 107), 12
LINE (90, 60)-(16, 107), 12
CIRCLE (158, 83), 30, 14
CIRCLE (158, 83), 29, 14
GET (17, 60)-(91, 110), X
GET (124, 60)-(190, 106), O
PUT (230, 60), X: PUT (21, 128), O: PUT (122, 128), X: PUT (233, 128), O: PUT (18, 193), X
PUT (125, 193), O: PUT (228, 193), X
COLOR 12: LOCATE 8, 50: PRINT "Play Computer"
COLOR 11: LOCATE 9, 50: PRINT "Two Players"
LOCATE 10, 50: PRINT "Instructions"
LOCATE 11, 50: PRINT "Quit Tic-Tac-Toe"
R = 8
MAINMENU:
V$ = INKEY$
IF V$ = CHR$(13) THEN GOTO MAINENTER
IF V$ = CHR$(0) + "P" THEN GOSUB MAINDOWN
IF V$ = CHR$(0) + "H" THEN GOSUB MAINUP
GOTO MAINMENU
MAINUP:
COLOR 11
GOSUB MAINAREA
R = R - 1
COLOR 12
GOSUB MAINAREA
RETURN

MAINDOWN:
COLOR 11
GOSUB MAINAREA
R = R + 1
COLOR 12
GOSUB MAINAREA
RETURN

MAINAREA:
IF R = 12 THEN R = 8
IF R = 7 THEN R = 11
IF R = 8 THEN LOCATE 8, 50: PRINT "Play Computer"
IF R = 9 THEN LOCATE 9, 50: PRINT "Two Players"
IF R = 10 THEN LOCATE 10, 50: PRINT "Instructions"
IF R = 11 THEN LOCATE 11, 50: PRINT "Quit Tic-Tac-Toe"
RETURN

MAINENTER:
IF R = 8 THEN GOTO PLAYCOMP
IF R = 9 THEN GOTO TWOPLAYERS
IF R = 10 THEN GOTO INSTRUCTIONS
IF R = 11 THEN GOTO TICTACQUIT

TWOPLAYERS:
LINE (1, 50)-(319, 249), 0, BF
LINE (1, 50)-(319, 249), 9, B
LINE (105, 50)-(105, 249), 9
LINE (210, 50)-(210, 249), 9
LINE (1, 117)-(319, 117), 9
LINE (1, 185)-(319, 185), 9
FOR X = 8 TO 11
  LOCATE X, 50: PRINT SPACE$(20)
NEXT X
COLOR 10
LOCATE 5, 50: PRINT "PLAYER ONE  PLAYER TWO"
LINE (380, 70)-(570, 70), 14
LINE (478, 55)-(479, 100), 14, BF
COLOR 12
LOCATE 7, 53: PRINT 0
LOCATE 7, 64: PRINT 0
PLAYER1$ = "X"
PLAYER2$ = "O"
GP = 0

PLAYXO:
GP = GP + 1
LOCATE 12, 47: COLOR 10: PRINT "PLAYER ONE: "; : COLOR 13: PRINT PLAYER1$
LOCATE 13, 47: COLOR 2: PRINT "PLAYER TWO: "; : COLOR 13: PRINT PLAYER2$
LOCATE 6, 6: PRINT 1: LOCATE 6, 19: PRINT 2: LOCATE 6, 32: PRINT 3
LOCATE 11, 6: PRINT 4: LOCATE 11, 19: PRINT 5: LOCATE 11, 32: PRINT 6
LOCATE 16, 6: PRINT 7: LOCATE 16, 19: PRINT 8: LOCATE 16, 32: PRINT 9
IF PLAYER1$ = "X" THEN
  PLAYER = 1
ELSE
  PLAYER = 2
END IF

CHOOSE:
IF PLAYER = 1 THEN LOCATE 15, 45: COLOR 15: PRINT "PLAYER ONE"
IF PLAYER = 2 THEN LOCATE 15, 45: COLOR 15: PRINT "PLAYER TWO"
LOCATE 17, 45: COLOR 14: PRINT "Choose a square:      ";
A$ = INPUT$(1)
IF UCASE$(A$) = "Q" THEN GOTO STATS
IF PLAYER1$ = "X" AND PLAYER = 1 THEN GOTO SELSQUARE
IF PLAYER1$ = "O" AND PLAYER = 1 THEN GOTO SELOSQUARE
IF PLAYER2$ = "O" AND PLAYER = 2 THEN GOTO SELOSQUARE
IF PLAYER2$ = "X" AND PLAYER = 2 THEN GOTO SELSQUARE

SELSQUARE:
SELECT CASE VAL(A$)
  CASE 1
    IF SQUARE(1) = 1 THEN GOTO AGAIN
    PUT (18, 60), X, PSET
    SQUARE(1) = 1
    X(1) = 1
  CASE 2
    IF SQUARE(2) = 2 THEN GOTO AGAIN
    PUT (124, 60), X, PSET
    SQUARE(2) = 2
    X(2) = 2
  CASE 3
    IF SQUARE(3) = 3 THEN GOTO AGAIN
    PUT (230, 60), X, PSET
    SQUARE(3) = 3
    X(3) = 3
  CASE 4
    IF SQUARE(4) = 4 THEN GOTO AGAIN
    PUT (18, 125), X, PSET
    SQUARE(4) = 4
    X(4) = 4
  CASE 5
    IF SQUARE(5) = 5 THEN GOTO AGAIN
    PUT (124, 125), X, PSET
    SQUARE(5) = 5
    X(5) = 5
  CASE 6
    IF SQUARE(6) = 6 THEN GOTO AGAIN
    PUT (230, 125), X, PSET
    SQUARE(6) = 6
    X(6) = 6
  CASE 7
    IF SQUARE(7) = 7 THEN GOTO AGAIN
    PUT (18, 193), X, PSET
    SQUARE(7) = 7
    X(7) = 7
  CASE 8
    IF SQUARE(8) = 8 THEN GOTO AGAIN
    PUT (124, 193), X, PSET
    SQUARE(8) = 8
    X(8) = 8
  CASE 9
    IF SQUARE(9) = 9 THEN GOTO AGAIN
    PUT (230, 193), X, PSET
    SQUARE(9) = 9
    X(9) = 9
  CASE ELSE
AGAIN:
    LOCATE 17, 45: COLOR 14: PRINT "Choose a square (1-9): ";
    A$ = INPUT$(1)
    IF UCASE$(A$) = "Q" THEN GOTO STATS
    GOTO SELSQUARE
END SELECT
IF X(1) = 1 AND X(2) = 2 AND X(3) = 3 THEN GOTO WINX
IF X(4) = 4 AND X(5) = 5 AND X(6) = 6 THEN GOTO WINX
IF X(7) = 7 AND X(8) = 8 AND X(9) = 9 THEN GOTO WINX
IF X(1) = 1 AND X(4) = 4 AND X(7) = 7 THEN GOTO WINX
IF X(2) = 2 AND X(5) = 5 AND X(8) = 8 THEN GOTO WINX
IF X(3) = 3 AND X(6) = 6 AND X(9) = 9 THEN GOTO WINX
IF X(1) = 1 AND X(5) = 5 AND X(9) = 9 THEN GOTO WINX
IF X(3) = 3 AND X(5) = 5 AND X(7) = 7 THEN GOTO WINX
IF SQUARE(1) = 1 AND SQUARE(2) = 2 AND SQUARE(3) = 3 AND SQUARE(4) = 4 AND SQUARE(5) = 5 AND SQUARE(6) = 6 AND SQUARE(7) = 7 AND SQUARE(8) = 8 AND SQUARE(9) = 9 THEN GOTO TIE
IF PLAYER = 1 THEN PLAYER = 2: GOTO CHOOSE
IF PLAYER = 2 THEN PLAYER = 1: GOTO CHOOSE

SELOSQUARE:
SELECT CASE VAL(A$)
  CASE 1
    IF SQUARE(1) = 1 THEN GOTO AGAINO
    PUT (18, 60), O, PSET
    SQUARE(1) = 1
    O(1) = 1
  CASE 2
    IF SQUARE(2) = 2 THEN GOTO AGAINO
    PUT (124, 60), O, PSET
    SQUARE(2) = 2
    O(2) = 2
  CASE 3
    IF SQUARE(3) = 3 THEN GOTO AGAINO
    PUT (230, 60), O, PSET
    SQUARE(3) = 3
    O(3) = 3
  CASE 4
    IF SQUARE(4) = 4 THEN GOTO AGAINO
    PUT (18, 125), O, PSET
    SQUARE(4) = 4
    O(4) = 4
  CASE 5
    IF SQUARE(5) = 5 THEN GOTO AGAINO
    PUT (124, 125), O, PSET
    SQUARE(5) = 5
    O(5) = 5
  CASE 6
    IF SQUARE(6) = 6 THEN GOTO AGAINO
    PUT (230, 125), O, PSET
    SQUARE(6) = 6
    O(6) = 6
  CASE 7
    IF SQUARE(7) = 7 THEN GOTO AGAINO
    PUT (18, 193), O, PSET
    SQUARE(7) = 7
    O(7) = 7
  CASE 8
    IF SQUARE(8) = 8 THEN GOTO AGAINO
    PUT (124, 193), O, PSET
    SQUARE(8) = 8
    O(8) = 8
  CASE 9
    IF SQUARE(9) = 9 THEN GOTO AGAINO
    PUT (230, 193), O, PSET
    SQUARE(9) = 9
    O(9) = 9
  CASE ELSE
AGAINO:
    LOCATE 17, 45: COLOR 14: PRINT "Choose a square (1-9): ";
    A$ = INPUT$(1)
    IF UCASE$(A$) = "Q" THEN GOTO STATS
    GOTO SELOSQUARE
END SELECT
IF O(1) = 1 AND O(2) = 2 AND O(3) = 3 THEN GOTO WINO
IF O(4) = 4 AND O(5) = 5 AND O(6) = 6 THEN GOTO WINO
IF O(7) = 7 AND O(8) = 8 AND O(9) = 9 THEN GOTO WINO
IF O(1) = 1 AND O(4) = 4 AND O(7) = 7 THEN GOTO WINO
IF O(2) = 2 AND O(5) = 5 AND O(8) = 8 THEN GOTO WINO
IF O(3) = 3 AND O(6) = 6 AND O(9) = 9 THEN GOTO WINO
IF O(1) = 1 AND O(5) = 5 AND O(9) = 9 THEN GOTO WINO
IF O(3) = 3 AND O(5) = 5 AND O(7) = 7 THEN GOTO WINO
IF SQUARE(1) = 1 AND SQUARE(2) = 2 AND SQUARE(3) = 3 AND SQUARE(4) = 4 AND SQUARE(5) = 5 AND SQUARE(6) = 6 AND SQUARE(7) = 7 AND SQUARE(8) = 8 AND SQUARE(9) = 9 THEN GOTO TIE
IF PLAYER = 1 THEN PLAYER = 2: GOTO CHOOSE
IF PLAYER = 2 THEN PLAYER = 1: GOTO CHOOSE

INSTRUCTIONS:
LOCATE 20: COLOR 13: PRINT "INSTRUCTIONS:"
COLOR 15
LOCATE 21: PRINT "Use your arrow keys to select a square and place your X or O"
LOCATE 22: PRINT "Place three X's or O's diagonally, vertically or horizontally to win"
LOCATE 23: PRINT "To quit the game just press 'Q'"
GOTO MAINMENU

WINX:
IF PLAYER1$ = "X" THEN
P1 = P1 + 1
LOCATE 7, 53: COLOR 12: PRINT P1
LOCATE 10, 51: COLOR 12: PRINT "PLAYER ONE WINS!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 51: COLOR 12: PRINT SPACE$(25)
ELSE
P2 = P2 + 1
LOCATE 7, 64: COLOR 12: PRINT P2
LOCATE 10, 51: COLOR 12: PRINT "PLAYER TWO WINS!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 51: COLOR 12: PRINT SPACE$(25)
END IF
SWAP PLAYER1$, PLAYER2$
LINE (1, 50)-(319, 249), 0, BF
LINE (1, 50)-(319, 249), 9, B
LINE (105, 50)-(105, 249), 9
LINE (210, 50)-(210, 249), 9
LINE (1, 117)-(319, 117), 9
LINE (1, 185)-(319, 185), 9
FOR I = 1 TO 9
  X(I) = 0
  O(I) = 0
  SQUARE(I) = 0
NEXT I
GOTO PLAYXO

WINO:
IF PLAYER1$ = "O" THEN
P1 = P1 + 1
LOCATE 7, 53: COLOR 12: PRINT P1
LOCATE 10, 51: COLOR 12: PRINT "PLAYER ONE WINS!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 51: COLOR 12: PRINT SPACE$(25)
ELSE
P2 = P2 + 1
LOCATE 7, 64: COLOR 12: PRINT P2
LOCATE 10, 51: COLOR 12: PRINT "PLAYER TWO WINS!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 51: COLOR 12: PRINT SPACE$(25)
END IF
SWAP PLAYER1$, PLAYER2$
LINE (1, 50)-(319, 249), 0, BF
LINE (1, 50)-(319, 249), 9, B
LINE (105, 50)-(105, 249), 9
LINE (210, 50)-(210, 249), 9
LINE (1, 117)-(319, 117), 9
LINE (1, 185)-(319, 185), 9
FOR I = 1 TO 9
  X(I) = 0
  O(I) = 0
  SQUARE(I) = 0
NEXT I
GOTO PLAYXO

TIE:
LOCATE 10, 55: COLOR 15: PRINT "IT'S A TIE!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 55: PRINT SPACE$(20)
SWAP PLAYER1$, PLAYER2$
LINE (1, 50)-(319, 249), 0, BF
LINE (1, 50)-(319, 249), 9, B
LINE (105, 50)-(105, 249), 9
LINE (210, 50)-(210, 249), 9
LINE (1, 117)-(319, 117), 9
LINE (1, 185)-(319, 185), 9
FOR I = 1 TO 9
  X(I) = 0
  O(I) = 0
  SQUARE(I) = 0
NEXT I
GOTO PLAYXO

STATS:
LINE (0, 50)-(640, 350), 0, BF
LOCATE 6, 5: COLOR 13: PRINT "STATISTICS"
GP = GP - 1
LOCATE 8, 10: COLOR 15: PRINT "GAMES PLAYED:"; GP
IF GP = 0 THEN GP = 1
AVG1 = (P1 / GP) * 100
AVG2 = (P2 / GP) * 100
LOCATE 10, 10: COLOR 10: PRINT "NUMBER OF WINS FOR PLAYER ONE:"; P1; : COLOR 2: PRINT "  PERCENTAGE:"; INT(AVG1); "%"
LOCATE 11, 10: COLOR 11: PRINT "NUMBER OF WINS FOR PLAYER TWO:"; P2; : COLOR 3: PRINT "  PERCENTAGE:"; INT(AVG2); "%"
IF P1 > P2 THEN LOCATE 13, 10: COLOR 14: PRINT "PLAYER ONE HAS MORE WINS!!!  CONGRADULATIONS!!!"
IF P1 < P2 THEN LOCATE 13, 10: COLOR 14: PRINT "PLAYER TWO HAS MORE WINS!!!  CONGRADULATIONS!!!"
IF P1 = P2 THEN LOCATE 13, 10: COLOR 14: PRINT "HEY, WHAT'DA YA KNOW, IT'S A TIE!"
WHILE INKEY$ = "": WEND
GOTO TICTACQUIT

PLAYCOMP:
LINE (1, 50)-(319, 249), 0, BF
LINE (1, 50)-(319, 249), 10, B
LINE (105, 50)-(105, 249), 10
LINE (210, 50)-(210, 249), 10
LINE (1, 117)-(319, 117), 10
LINE (1, 185)-(319, 185), 10
FOR X = 8 TO 11
  LOCATE X, 50: PRINT SPACE$(20)
NEXT X
COLOR 10
LOCATE 5, 50: PRINT "PLAYER ONE  COMPUTER"
LINE (380, 70)-(570, 70), 14
LINE (478, 55)-(479, 100), 14, BF
COLOR 12
LOCATE 7, 53: PRINT 0
LOCATE 7, 64: PRINT 0
PLAYER1$ = "X"
PLAYER2$ = "O"
GP = 0

COMPXO:
GP = GP + 1
LOCATE 12, 47: COLOR 10: PRINT "PLAYER ONE: "; : COLOR 13: PRINT PLAYER1$
LOCATE 13, 47: COLOR 2: PRINT "COMPUTER:   "; : COLOR 13: PRINT PLAYER2$
LOCATE 6, 6: PRINT 1: LOCATE 6, 19: PRINT 2: LOCATE 6, 32: PRINT 3
LOCATE 11, 6: PRINT 4: LOCATE 11, 19: PRINT 5: LOCATE 11, 32: PRINT 6
LOCATE 16, 6: PRINT 7: LOCATE 16, 19: PRINT 8: LOCATE 16, 32: PRINT 9
IF PLAYER1$ = "X" THEN
  PLAYER = 1
ELSE
  PLAYER = 2
END IF

COMPCHOOSE:
IF PLAYER = 1 THEN LOCATE 15, 45: COLOR 15: PRINT "PLAYER ONE    "
IF PLAYER = 2 THEN
LOCATE 15, 45: COLOR 15: PRINT "COMPUTERS TURN"
SLEEP 1
RANDOMIZE TIMER
A = INT(RND * 9) + 1
IF X(1) = 1 OR X(3) = 3 OR X(7) = 7 OR X(9) = 9 THEN A = 5
IF X(2) = 2 AND X(3) = 3 AND SQUARE(1) <> 1 THEN A = 1
IF X(1) = 1 AND X(3) = 3 AND SQUARE(2) <> 2 THEN A = 2
IF X(1) = 1 AND X(2) = 2 AND SQUARE(3) <> 3 THEN A = 3
IF X(1) = 1 AND X(5) = 5 AND SQUARE(9) <> 9 THEN A = 9
IF X(9) = 9 AND X(5) = 5 AND SQUARE(1) <> 1 THEN A = 1
IF X(1) = 1 AND X(9) = 9 AND SQUARE(5) <> 5 THEN A = 5
IF X(2) = 2 AND X(5) = 5 AND SQUARE(8) <> 8 THEN A = 8
IF X(8) = 8 AND X(5) = 5 AND SQUARE(2) <> 2 THEN A = 2
IF X(2) = 2 AND X(8) = 8 AND SQUARE(5) <> 5 THEN A = 5
IF X(3) = 3 AND X(6) = 6 AND SQUARE(9) <> 9 THEN A = 9
IF X(9) = 9 AND X(6) = 6 AND SQUARE(3) <> 3 THEN A = 3
IF X(9) = 9 AND X(3) = 3 AND SQUARE(6) <> 6 THEN A = 6
IF X(1) = 1 AND X(4) = 4 AND SQUARE(7) <> 7 THEN A = 7
IF X(1) = 1 AND X(7) = 7 AND SQUARE(4) <> 4 THEN A = 4
IF X(4) = 4 AND X(7) = 7 AND SQUARE(1) <> 1 THEN A = 1
IF X(3) = 3 AND X(5) = 5 AND SQUARE(7) <> 7 THEN A = 7
IF X(5) = 5 AND X(7) = 7 AND SQUARE(3) <> 3 THEN A = 3
IF X(3) = 3 AND X(7) = 7 AND SQUARE(5) <> 5 THEN A = 5
IF X(4) = 4 AND X(5) = 5 AND SQUARE(6) <> 6 THEN A = 6
IF X(5) = 5 AND X(6) = 6 AND SQUARE(4) <> 4 THEN A = 4
IF X(6) = 6 AND X(4) = 4 AND SQUARE(5) <> 5 THEN A = 5
IF X(9) = 9 AND X(8) = 8 AND SQUARE(7) <> 7 THEN A = 7
IF X(8) = 8 AND X(7) = 7 AND SQUARE(9) <> 9 THEN A = 9
IF X(9) = 9 AND X(7) = 7 AND SQUARE(8) <> 8 THEN A = 8

IF O(2) = 2 AND O(3) = 3 AND SQUARE(1) <> 1 THEN A = 1
IF O(1) = 1 AND O(3) = 3 AND SQUARE(2) <> 2 THEN A = 2
IF O(1) = 1 AND O(2) = 2 AND SQUARE(3) <> 3 THEN A = 3
IF O(1) = 1 AND O(5) = 5 AND SQUARE(9) <> 9 THEN A = 9
IF O(9) = 9 AND O(5) = 5 AND SQUARE(1) <> 1 THEN A = 1
IF O(1) = 1 AND O(9) = 9 AND SQUARE(5) <> 5 THEN A = 5
IF O(2) = 2 AND O(5) = 5 AND SQUARE(8) <> 8 THEN A = 8
IF O(8) = 8 AND O(5) = 5 AND SQUARE(2) <> 2 THEN A = 2
IF O(2) = 2 AND O(8) = 8 AND SQUARE(5) <> 5 THEN A = 5
IF O(3) = 3 AND O(6) = 6 AND SQUARE(9) <> 9 THEN A = 9
IF O(9) = 9 AND O(6) = 6 AND SQUARE(3) <> 3 THEN A = 3
IF O(9) = 9 AND O(3) = 3 AND SQUARE(6) <> 6 THEN A = 6
IF O(1) = 1 AND O(4) = 4 AND SQUARE(7) <> 7 THEN A = 7
IF O(1) = 1 AND O(7) = 7 AND SQUARE(4) <> 4 THEN A = 4
IF O(4) = 4 AND O(7) = 7 AND SQUARE(1) <> 1 THEN A = 1
IF O(3) = 3 AND O(5) = 5 AND SQUARE(7) <> 7 THEN A = 7
IF O(5) = 5 AND O(7) = 7 AND SQUARE(3) <> 3 THEN A = 3
IF O(3) = 3 AND O(7) = 7 AND SQUARE(5) <> 5 THEN A = 5
IF O(4) = 4 AND O(5) = 5 AND SQUARE(6) <> 6 THEN A = 6
IF O(5) = 5 AND O(6) = 6 AND SQUARE(4) <> 4 THEN A = 4
IF O(6) = 6 AND O(4) = 4 AND SQUARE(5) <> 5 THEN A = 5
IF O(9) = 9 AND O(8) = 8 AND SQUARE(7) <> 7 THEN A = 7
IF O(8) = 8 AND O(7) = 7 AND SQUARE(9) <> 9 THEN A = 9
IF O(9) = 9 AND O(7) = 7 AND SQUARE(8) <> 8 THEN A = 8
A$ = STR$(A)
IF PLAYER2$ = "X" THEN GOTO COMPSELSQUARE
IF PLAYER2$ = "O" THEN GOTO COMPSELOSQUARE
END IF

LOCATE 17, 45: COLOR 14: PRINT "Choose a square:      ";
A$ = INPUT$(1)
IF UCASE$(A$) = "Q" THEN GOTO COMPSTATS
IF PLAYER1$ = "X" AND PLAYER = 1 THEN GOTO COMPSELSQUARE
IF PLAYER1$ = "O" AND PLAYER = 1 THEN GOTO COMPSELOSQUARE

COMPSELSQUARE:
SELECT CASE VAL(A$)
  CASE 1
    IF SQUARE(1) = 1 THEN GOTO COMPAGAIN
    PUT (18, 60), X, PSET
    SQUARE(1) = 1
    X(1) = 1
  CASE 2
    IF SQUARE(2) = 2 THEN GOTO COMPAGAIN
    PUT (124, 60), X, PSET
    SQUARE(2) = 2
    X(2) = 2
  CASE 3
    IF SQUARE(3) = 3 THEN GOTO COMPAGAIN
    PUT (230, 60), X, PSET
    SQUARE(3) = 3
    X(3) = 3
  CASE 4
    IF SQUARE(4) = 4 THEN GOTO COMPAGAIN
    PUT (18, 125), X, PSET
    SQUARE(4) = 4
    X(4) = 4
  CASE 5
    IF SQUARE(5) = 5 THEN GOTO COMPAGAIN
    PUT (124, 125), X, PSET
    SQUARE(5) = 5
    X(5) = 5
  CASE 6
    IF SQUARE(6) = 6 THEN GOTO COMPAGAIN
    PUT (230, 125), X, PSET
    SQUARE(6) = 6
    X(6) = 6
  CASE 7
    IF SQUARE(7) = 7 THEN GOTO COMPAGAIN
    PUT (18, 193), X, PSET
    SQUARE(7) = 7
    X(7) = 7
  CASE 8
    IF SQUARE(8) = 8 THEN GOTO COMPAGAIN
    PUT (124, 193), X, PSET
    SQUARE(8) = 8
    X(8) = 8
  CASE 9
    IF SQUARE(9) = 9 THEN GOTO COMPAGAIN
    PUT (230, 193), X, PSET
    SQUARE(9) = 9
    X(9) = 9
  CASE ELSE
COMPAGAIN:
  IF PLAYER = 2 THEN
  LOCATE 15, 45: COLOR 15: PRINT "COMPUTERS TURN"
  RANDOMIZE TIMER
  A = INT(RND * 9) + 1
  A$ = STR$(A)
  IF PLAYER2$ = "X" THEN GOTO COMPSELSQUARE
  IF PLAYER2$ = "O" THEN GOTO COMPSELOSQUARE
  END IF
    LOCATE 17, 45: COLOR 14: PRINT "Choose a square (1-9): ";
    A$ = INPUT$(1)
    IF UCASE$(A$) = "Q" THEN GOTO COMPSTATS
    GOTO COMPSELSQUARE
END SELECT
IF X(1) = 1 AND X(2) = 2 AND X(3) = 3 THEN GOTO COMPWINX
IF X(4) = 4 AND X(5) = 5 AND X(6) = 6 THEN GOTO COMPWINX
IF X(7) = 7 AND X(8) = 8 AND X(9) = 9 THEN GOTO COMPWINX
IF X(1) = 1 AND X(4) = 4 AND X(7) = 7 THEN GOTO COMPWINX
IF X(2) = 2 AND X(5) = 5 AND X(8) = 8 THEN GOTO COMPWINX
IF X(3) = 3 AND X(6) = 6 AND X(9) = 9 THEN GOTO COMPWINX
IF X(1) = 1 AND X(5) = 5 AND X(9) = 9 THEN GOTO COMPWINX
IF X(3) = 3 AND X(5) = 5 AND X(7) = 7 THEN GOTO COMPWINX
IF SQUARE(1) = 1 AND SQUARE(2) = 2 AND SQUARE(3) = 3 AND SQUARE(4) = 4 AND SQUARE(5) = 5 AND SQUARE(6) = 6 AND SQUARE(7) = 7 AND SQUARE(8) = 8 AND SQUARE(9) = 9 THEN GOTO COMPTIE
IF PLAYER = 1 THEN PLAYER = 2: GOTO COMPCHOOSE
IF PLAYER = 2 THEN PLAYER = 1: GOTO COMPCHOOSE

COMPSELOSQUARE:
SELECT CASE VAL(A$)
  CASE 1
    IF SQUARE(1) = 1 THEN GOTO COMPAGAINO
    PUT (18, 60), O, PSET
    SQUARE(1) = 1
    O(1) = 1
  CASE 2
    IF SQUARE(2) = 2 THEN GOTO COMPAGAINO
    PUT (124, 60), O, PSET
    SQUARE(2) = 2
    O(2) = 2
  CASE 3
    IF SQUARE(3) = 3 THEN GOTO COMPAGAINO
    PUT (230, 60), O, PSET
    SQUARE(3) = 3
    O(3) = 3
  CASE 4
    IF SQUARE(4) = 4 THEN GOTO COMPAGAINO
    PUT (18, 125), O, PSET
    SQUARE(4) = 4
    O(4) = 4
  CASE 5
    IF SQUARE(5) = 5 THEN GOTO COMPAGAINO
    PUT (124, 125), O, PSET
    SQUARE(5) = 5
    O(5) = 5
  CASE 6
    IF SQUARE(6) = 6 THEN GOTO COMPAGAINO
    PUT (230, 125), O, PSET
    SQUARE(6) = 6
    O(6) = 6
  CASE 7
    IF SQUARE(7) = 7 THEN GOTO COMPAGAINO
    PUT (18, 193), O, PSET
    SQUARE(7) = 7
    O(7) = 7
  CASE 8
    IF SQUARE(8) = 8 THEN GOTO COMPAGAINO
    PUT (124, 193), O, PSET
    SQUARE(8) = 8
    O(8) = 8
  CASE 9
    IF SQUARE(9) = 9 THEN GOTO COMPAGAINO
    PUT (230, 193), O, PSET
    SQUARE(9) = 9
    O(9) = 9
  CASE ELSE
COMPAGAINO:
  IF PLAYER = 2 THEN
  LOCATE 15, 45: COLOR 15: PRINT "COMPUTERS TURN"
  RANDOMIZE TIMER
  A = INT(RND * 9) + 1
  A$ = STR$(A)
  IF PLAYER2$ = "X" THEN GOTO COMPSELSQUARE
  IF PLAYER2$ = "O" THEN GOTO COMPSELOSQUARE
  END IF
    LOCATE 17, 45: COLOR 14: PRINT "Choose a square (1-9): ";
    A$ = INPUT$(1)
    IF UCASE$(A$) = "Q" THEN GOTO COMPSTATS
    GOTO COMPSELOSQUARE
END SELECT
IF O(1) = 1 AND O(2) = 2 AND O(3) = 3 THEN GOTO COMPWINO
IF O(4) = 4 AND O(5) = 5 AND O(6) = 6 THEN GOTO COMPWINO
IF O(7) = 7 AND O(8) = 8 AND O(9) = 9 THEN GOTO COMPWINO
IF O(1) = 1 AND O(4) = 4 AND O(7) = 7 THEN GOTO COMPWINO
IF O(2) = 2 AND O(5) = 5 AND O(8) = 8 THEN GOTO COMPWINO
IF O(3) = 3 AND O(6) = 6 AND O(9) = 9 THEN GOTO COMPWINO
IF O(1) = 1 AND O(5) = 5 AND O(9) = 9 THEN GOTO COMPWINO
IF O(3) = 3 AND O(5) = 5 AND O(7) = 7 THEN GOTO COMPWINO
IF SQUARE(1) = 1 AND SQUARE(2) = 2 AND SQUARE(3) = 3 AND SQUARE(4) = 4 AND SQUARE(5) = 5 AND SQUARE(6) = 6 AND SQUARE(7) = 7 AND SQUARE(8) = 8 AND SQUARE(9) = 9 THEN GOTO COMPTIE
IF PLAYER = 1 THEN PLAYER = 2: GOTO COMPCHOOSE
IF PLAYER = 2 THEN PLAYER = 1: GOTO COMPCHOOSE

COMPWINX:
IF PLAYER1$ = "X" THEN
P1 = P1 + 1
LOCATE 7, 53: COLOR 12: PRINT P1
LOCATE 10, 51: COLOR 12: PRINT "PLAYER ONE WINS!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 51: COLOR 12: PRINT SPACE$(25)
ELSE
P2 = P2 + 1
LOCATE 7, 64: COLOR 12: PRINT P2
LOCATE 10, 52: COLOR 12: PRINT "COMPUTER WINS!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 51: COLOR 12: PRINT SPACE$(25)
END IF
SWAP PLAYER1$, PLAYER2$
LINE (1, 50)-(319, 249), 0, BF
LINE (1, 50)-(319, 249), 10, B
LINE (105, 50)-(105, 249), 10
LINE (210, 50)-(210, 249), 10
LINE (1, 117)-(319, 117), 10
LINE (1, 185)-(319, 185), 10
FOR I = 1 TO 9
  X(I) = 0
  O(I) = 0
  SQUARE(I) = 0
NEXT I
GOTO COMPXO

COMPWINO:
IF PLAYER1$ = "O" THEN
P1 = P1 + 1
LOCATE 7, 53: COLOR 12: PRINT P1
LOCATE 10, 51: COLOR 12: PRINT "PLAYER ONE WINS!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 51: COLOR 12: PRINT SPACE$(25)
ELSE
P2 = P2 + 1
LOCATE 7, 64: COLOR 12: PRINT P2
LOCATE 10, 51: COLOR 12: PRINT "COMPUTER WINS!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 51: COLOR 12: PRINT SPACE$(25)
END IF
SWAP PLAYER1$, PLAYER2$
LINE (1, 50)-(319, 249), 0, BF
LINE (1, 50)-(319, 249), 10, B
LINE (105, 50)-(105, 249), 10
LINE (210, 50)-(210, 249), 10
LINE (1, 117)-(319, 117), 10
LINE (1, 185)-(319, 185), 10
FOR I = 1 TO 9
  X(I) = 0
  O(I) = 0
  SQUARE(I) = 0
NEXT I
GOTO COMPXO

COMPTIE:
LOCATE 10, 55: COLOR 15: PRINT "IT'S A TIE!!!"
WHILE INKEY$ = "": WEND
LOCATE 10, 55: PRINT SPACE$(20)
SWAP PLAYER1$, PLAYER2$
LINE (1, 50)-(319, 249), 0, BF
LINE (1, 50)-(319, 249), 10, B
LINE (105, 50)-(105, 249), 10
LINE (210, 50)-(210, 249), 10
LINE (1, 117)-(319, 117), 10
LINE (1, 185)-(319, 185), 10
FOR I = 1 TO 9
  X(I) = 0
  O(I) = 0
  SQUARE(I) = 0
NEXT I
GOTO COMPXO

COMPSTATS:
LINE (0, 50)-(640, 350), 0, BF
LOCATE 6, 5: COLOR 13: PRINT "STATISTICS"
GP = GP - 1
LOCATE 8, 10: COLOR 15: PRINT "GAMES PLAYED:"; GP
IF GP = 0 THEN GP = 1
AVG1 = (P1 / GP) * 100
AVG2 = (P2 / GP) * 100
LOCATE 10, 10: COLOR 10: PRINT "NUMBER OF WINS FOR PLAYER ONE:"; P1; : COLOR 2: PRINT "  PERCENTAGE:"; INT(AVG1); "%"
LOCATE 11, 10: COLOR 11: PRINT "NUMBER OF WINS FOR COMPUTER:  "; P2; : COLOR 3: PRINT "  PERCENTAGE:"; INT(AVG2); "%"
IF P1 > P2 THEN LOCATE 13, 10: COLOR 14: PRINT "PLAYER ONE HAS MORE WINS!!!  CONGRADULATIONS!!!"
IF P1 < P2 THEN LOCATE 13, 10: COLOR 14: PRINT "COMPUTER HAS MORE WINS!!!  YOU LOSE, HA HA HA!!!"
IF P1 = P2 THEN LOCATE 13, 10: COLOR 14: PRINT "HEY, WHAT'DA YA KNOW, IT'S A TIE!"
WHILE INKEY$ = "": WEND

TICTACQUIT:

