'===========================================================================
' Subject: TEXT TIC-TAC-TOE                   Date: 04-30-97 (00:00)       
'  Author: Nick Kochakian                     Code: QB, QBasic, PDS        
'  Origin: NickK@worldnet.att.net           Packet: GAMES.ABC
'===========================================================================
DECLARE SUB putsquare (num!, char$)
DECLARE SUB doturn ()
DECLARE SUB goturn ()
'Text Tic Tac Toe
'
'4/30/97 By: - Nick Kochakian -
'
'For people who can't get enough of it...
'
'This program is still buggy if you can fix some or all of them that would
'be great!
'
'If you have any comments, questions, or bug fixes please e-mail me at:
'nickk@worldnet.att.net
'
'Note: This game is best played with the num pad. The squares are configured
'      to work best (and easiest) with it! Make shure NUM LOCK is on!


RANDOMIZE TIMER

youwin = 0
compwin = 0

CLS

PRINT "Which do you want to be?"
PRINT "(Push X or O)"
PRINT ""
DO
a$ = INKEY$
a$ = UCASE$(a$)
LOOP UNTIL a$ = "X" OR a$ = "O"

you$ = a$

IF you$ = "X" THEN other$ = "O"
IF you$ = "O" THEN other$ = "X"

DIM SHARED turn

gofirst = INT(RND * 2) + 1
turn = gofirst

'1 - You
'2 - Computer

'DIM SHARED a1$
'DIM SHARED a2$
'DIM SHARED a3$
'DIM SHARED a4$
'DIM SHARED a5$
'DIM SHARED a6$
'DIM SHARED a7$
'DIM SHARED a8$
'DIM SHARED a9$

playtttagain:
CLS
a1$ = "o"
a2$ = "o"
a3$ = "o"
a4$ = "o"
a5$ = "o"
a6$ = "o"
a7$ = "o"
a8$ = "o"
a9$ = "o"

b1$ = "o"
b2$ = "o"
b3$ = "o"
b4$ = "o"
b5$ = "o"
b6$ = "o"
b7$ = "o"
b8$ = "o"
b9$ = "o"

'o = open
'c = closed


CLS

'7³ 8 ³9
'ÄÅÄÄÄÅÄ
'4³ 5 ³6
'ÄÅÄÄÄÅÄ
'1³ 2 ³3

PRINT " ³   ³                   7³ 8 ³9"
PRINT "ÄÅÄÄÄÅÄ                  ÄÅÄÄÄÅÄ"
PRINT " ³   ³                   4³ 5 ³6"
PRINT "ÄÅÄÄÄÅÄ                  ÄÅÄÄÄÅÄ"
PRINT " ³   ³                   1³ 2 ³3"
PRINT ""
PRINT "You: " + you$
PRINT "Computer: " + other$
'9,1 --- Right here

LOCATE 15, 1
PRINT "Your wins: "; youwin
PRINT "Computer wins: "; compwin
DO
a$ = INKEY$
a$ = UCASE$(a$)
CALL goturn
GOSUB seeifwin:
'IF b1$ = "c" AND b2$ = "c" AND b3$ = "c" AND b4$ = "c" AND b5$ = "c" AND b6$ = "c" AND b7$ = "c" AND b8$ = "c" AND b9$ = "c" THEN LOCATE 10, 1: PRINT "No one wins": GOTO playagain:
IF turn = 1 THEN GOSUB doyourturn: turn = 2
IF turn = 2 THEN GOSUB doturn: turn = 1
GOSUB seeifwin:
LOOP UNTIL a$ = "Q"

END

doturn:

IF turn = 2 THEN

'IF b1$ = "c" AND b2$ = "c" AND b3$ = "c" AND b4$ = "c" AND b5$ = "c" AND b6$ = "c" AND b7$ = "c" AND b8$ = "c" AND b9$ = "c" THEN LOCATE 10, 1: PRINT "No one wins": GOTO playagain:

gotur$ = "y"

IF a1$ = "c1" AND a2$ = "c1" THEN tur = 3: gotur$ = "n"
IF a1$ = "c1" AND a3$ = "c1" THEN tur = 2: gotur$ = "n"
IF a2$ = "c1" AND a3$ = "c1" THEN tur = 1: gotur$ = "n"

IF a1$ = "c1" AND a4$ = "c1" THEN tur = 7: gotur$ = "n"
IF a1$ = "c1" AND a7$ = "c1" THEN tur = 4: gotur$ = "n"
IF a7$ = "c1" AND a4$ = "c1" THEN tur = 1: gotur$ = "n"

IF a1$ = "c1" AND a5$ = "c1" THEN tur = 9: gotur$ = "n"
IF a1$ = "c1" AND a9$ = "c1" THEN tur = 5: gotur$ = "n"
IF a5$ = "c1" AND a9$ = "c1" THEN tur = 1: gotur$ = "n"

IF a7$ = "c1" AND a5$ = "c1" THEN tur = 3: gotur$ = "n"
IF a7$ = "c1" AND a3$ = "c1" THEN tur = 5: gotur$ = "n"
IF a3$ = "c1" AND a5$ = "c1" THEN tur = 7: gotur$ = "n"

IF a4$ = "c1" AND a5$ = "c1" THEN tur = 6: gotur$ = "n"
IF a5$ = "c1" AND a6$ = "c1" THEN tur = 4: gotur$ = "n"
IF a4$ = "c1" AND a6$ = "c1" THEN tur = 5: gotur$ = "n"

IF a7$ = "c1" AND a9$ = "c1" THEN tur = 8: gotur$ = "n"
IF a7$ = "c1" AND a8$ = "c1" THEN tur = 9: gotur$ = "n"
IF a9$ = "c1" AND a8$ = "c1" THEN tur = 7: gotur$ = "n"

'1³ 2 ³3
'ÄÅÄÄÄÅÄ
'4³ 5 ³6
'ÄÅÄÄÄÅÄ
'7³ 8 ³9
IF a2$ = "c1" AND a8$ = "c1" THEN tur = 5: gotur$ = "n"
IF a5$ = "c1" AND a8$ = "c1" THEN tur = 2: gotur$ = "n"
IF a2$ = "c1" AND a5$ = "c1" THEN tur = 8: gotur$ = "n"

IF a3$ = "c1" AND a6$ = "c1" THEN tur = 9: gotur$ = "n"
IF a3$ = "c1" AND a9$ = "c1" THEN tur = 6: gotur$ = "n"
IF a6$ = "c1" AND a9$ = "c1" THEN tur = 3: gotur$ = "n"

GOSUB seeifwin:

redoturn2:

IF gotur$ = "y" THEN tur = INT(RND * 9) + 1

gotur$ = "y"

IF tur = 1 AND a1$ = "o" THEN a1$ = "c2": b1$ = "c": CALL putsquare(1, other$): GOSUB seeifwin: RETURN
IF tur = 2 AND a2$ = "o" THEN a2$ = "c2": b2$ = "c": CALL putsquare(2, other$): GOSUB seeifwin: RETURN
IF tur = 3 AND a3$ = "o" THEN a3$ = "c2": b3$ = "c": CALL putsquare(3, other$): GOSUB seeifwin: RETURN
IF tur = 4 AND a4$ = "o" THEN a4$ = "c2": b4$ = "c": CALL putsquare(4, other$): GOSUB seeifwin: RETURN
IF tur = 5 AND a5$ = "o" THEN a5$ = "c2": b5$ = "c": CALL putsquare(5, other$): GOSUB seeifwin: RETURN
IF tur = 6 AND a6$ = "o" THEN a6$ = "c2": b6$ = "c": CALL putsquare(6, other$): GOSUB seeifwin: RETURN
IF tur = 7 AND a7$ = "o" THEN a7$ = "c2": b7$ = "c": CALL putsquare(7, other$): GOSUB seeifwin: RETURN
IF tur = 8 AND a8$ = "o" THEN a8$ = "c2": b8$ = "c": CALL putsquare(8, other$): GOSUB seeifwin: RETURN
IF tur = 9 AND a9$ = "o" THEN a9$ = "c2": b9$ = "c": CALL putsquare(9, other$): GOSUB seeifwin: RETURN

GOTO redoturn2:

END IF

RETURN

doyourturn:
LOCATE 10, 1: PRINT "Press a number 1-9 to make your mark... Or press Q to quit"

redomeyou:
DO
a$ = INKEY$
a$ = UCASE$(a$)
LOOP UNTIL a$ = "1" OR a$ = "2" OR a$ = "3" OR a$ = "4" OR a$ = "5" OR a$ = "6" OR a$ = "7" OR a$ = "8" OR a$ = "9" OR a$ = "Q"
IF a$ = "Q" THEN END
IF a$ = "1" AND a1$ = "o" THEN a1$ = "c1": b1$ = "c": CALL putsquare(1, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
IF a$ = "2" AND a2$ = "o" THEN a2$ = "c1": b2$ = "c": CALL putsquare(2, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
IF a$ = "3" AND a3$ = "o" THEN a3$ = "c1": b3$ = "c": CALL putsquare(3, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
IF a$ = "4" AND a4$ = "o" THEN a4$ = "c1": b4$ = "c": CALL putsquare(4, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
IF a$ = "5" AND a5$ = "o" THEN a5$ = "c1": b5$ = "c": CALL putsquare(5, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
IF a$ = "6" AND a6$ = "o" THEN a6$ = "c1": b6$ = "c": CALL putsquare(6, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
IF a$ = "7" AND a7$ = "o" THEN a7$ = "c1": b7$ = "c": CALL putsquare(7, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
IF a$ = "8" AND a8$ = "o" THEN a8$ = "c1": b8$ = "c": CALL putsquare(8, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
IF a$ = "9" AND a9$ = "o" THEN a9$ = "c1": b9$ = "c": CALL putsquare(9, you$): LOCATE 10, 1: COLOR 0: PRINT "Press a number 1-9 to make your mark... Or press Q to quit": COLOR 7: GOSUB seeifwin: RETURN
GOSUB seeifwin:
LOCATE 11, 1: PRINT "That square is all ready used!": SLEEP 2: LOCATE 11, 1: COLOR 0: PRINT "That square is all ready used!": COLOR 7: GOTO redomeyou:
RETURN

seeifwin:
IF a1$ = "c2" AND a2$ = "c2" AND a3$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a7$ = "c1" AND a5$ = "c1" AND a3$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:   GOTO playagain:
IF a7$ = "c2" AND a5$ = "c2" AND a3$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a2$ = "c2" AND a5$ = "c2" AND a8$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a1$ = "c1" AND a2$ = "c1" AND a3$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:   GOTO playagain:
IF a1$ = "c2" AND a2$ = "c2" AND a3$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF b1$ = "c" AND b2$ = "c" AND b3$ = "c" AND b4$ = "c" AND b5$ = "c" AND b6$ = "c" AND b7$ = "c" AND b8$ = "c" AND b9$ = "c" THEN LOCATE 10, 1: PRINT "No one wins": GOTO playagain:

IF a1$ = "c1" AND a4$ = "c1" AND a7$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:   GOTO playagain:
IF a1$ = "c2" AND a4$ = "c2" AND a7$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a4$ = "c1" AND a5$ = "c1" AND a6$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:   GOTO playagain:
IF a4$ = "c2" AND a5$ = "c2" AND a6$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a7$ = "c1" AND a8$ = "c1" AND a9$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:   GOTO playagain:
IF a7$ = "c2" AND a8$ = "c2" AND a9$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a2$ = "c1" AND a5$ = "c1" AND a8$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:   GOTO playagain:
IF a2$ = "c2" AND a5$ = "c2" AND a8$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a3$ = "c1" AND a6$ = "c1" AND a9$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:   GOTO playagain:
IF a3$ = "c2" AND a6$ = "c2" AND a9$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a1$ = "c1" AND a5$ = "c1" AND a9$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:   GOTO playagain:
IF a1$ = "c2" AND a5$ = "c2" AND a9$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:
IF a7$ = "c1" AND a5$ = "c1" AND a3$ = "c1" THEN LOCATE 10, 1: PRINT "YOU WIN!!!": youwin = youwin + 1:  GOTO playagain:
IF a7$ = "c2" AND a5$ = "c2" AND a3$ = "c2" THEN LOCATE 10, 1: PRINT "Computer wins": compwin = compwin + 1: GOTO playagain:

RETURN

playagain:
PRINT "Play again? (Y/N)"
DO
a$ = INKEY$
a$ = UCASE$(a$)
LOOP UNTIL a$ = "Y" OR a$ = "N"
IF a$ = "N" THEN CLS : END
IF a$ = "Y" THEN GOTO playtttagain:

END

SUB goturn
IF turn = 1 THEN LOCATE 9, 1: PRINT "Your turn      "
IF turn = 2 THEN LOCATE 9, 1: PRINT "Computer's turn"
END SUB

SUB putsquare (num, char$)
RANDOMIZE TIMER

IF num = 7 THEN
LOCATE 1, 1: PRINT char$
END IF

IF num = 8 THEN
LOCATE 1, 4: PRINT char$
END IF

IF num = 9 THEN
LOCATE 1, 7: PRINT char$
END IF

IF num = 4 THEN
LOCATE 3, 1: PRINT char$
END IF

IF num = 5 THEN
LOCATE 3, 4: PRINT char$
END IF

IF num = 6 THEN
LOCATE 3, 7: PRINT char$
END IF

IF num = 1 THEN
LOCATE 5, 1: PRINT char$
END IF

IF num = 2 THEN
LOCATE 5, 4: PRINT char$
END IF

IF num = 3 THEN
LOCATE 5, 7: PRINT char$
END IF

END SUB
