'===========================================================================
' Subject: TIC-TAC-TOE VIA MODEM              Date: 03-17-96 (20:15)       
'  Author: Kevin Fowlks                       Code: QB, QBasic, PDS        
'  Origin: KFowlks@aol.com                  Packet: GAMES.ABC
'===========================================================================
REM KD Software aka Kevin Fowlks
REM Tic tac toe via modem v3.0


REM Note this program was writtem in 3 hours so i bet there are a few bugs
REM please modfiy this program any way you like, but please give me creidt
REM also if you to fix / change this program then send me a copy at
REM kfowlks@sojourn.com attached files are cool at the address


REM Fixed one of the many bugs in this version
REM fixed Some more bugs now i all most sure it works ok

REM Damit damit i overlooked one simple problem i must convert the data to
REM strings sorry about that guys :)

REM This version should work also push esc to escape

DECLARE SUB cir (x%, y%)
DECLARE SUB movex (x1%, y1%)
DEFINT A-Z

REM dymamic$
RANDOMIZE TIMER
CONST true = 1, false = 0


DIM grid(3, 3) AS INTEGER

CLS
COLOR 7

INPUT "Enter Com Port (1/2) "; port$
PRINT "Opening Com" + port$ + " Opening port for 9600 baud"
OPEN "COM" + port$ + ":" + "2400,N,8,1,ASC" FOR RANDOM AS #1


INPUT "[C]ALL OR [W]AIT: ", AN$
IF AN$ = "W" OR AN$ = "w" THEN
server% = false
PRINT #1, "ATS0=1" + num$: PRINT "WAITING FOR CALL"
ELSE IF AN$ = "C" OR AN$ = "c" THEN INPUT "ENTER NUMBER ", num$: PRINT #1, "atd" + num$
server% = true
END IF




DO
INPUT #1, test$
Baud$ = "CONNECTED 9600"
Baud2$ = "CONNECTED 2400"
IF test$ = "BUSY" THEN
PRINT "Line Busy try later"
SLEEP
END
END IF
LOOP UNTIL test$ = Baud$ OR test$ = Baud2$ OR INKEY$ = CHR$(27)
'hh:




 IF server% = true THEN
 PRINT "This computer is the server": turn% = 1
 ELSEIF server% = false THEN
 PRINT "This computer is the host": turn% = 2
 END IF


SCREEN 13


REM tic tac toe     
REM Draw Board
x% = 320 / 4 'center the dam thing

LINE (0 + x%, 50)-(150 + x%, 50), 9
LINE (0 + x%, 100)-(150 + x%, 100), 9
LINE (45 + x%, 10)-(45 + x%, 140), 9
LINE (100 + x%, 10)-(100 + x%, 140), 9




DO
IF server% = true THEN
REM Caller's program and x's
SELECT CASE INKEY$

REM 90,15:REM  140,15:REM   190,15
REM 90,60      140,60       190,60
REM 90,110     140,110      190,110

CASE "7": CALL movex(90, 15): grid(1, 1) = 2: Ikey = 7
CASE "4": CALL movex(90, 60): grid(1, 2) = 2:     Ikey = 4
CASE "1": CALL movex(90, 110): grid(1, 3) = 2:   Ikey = 1

CASE "8": CALL movex(140, 15): grid(2, 1) = 2: Ikey = 8
CASE "5": CALL movex(140, 60): grid(2, 2) = 2: Ikey = 5
CASE "2": CALL movex(140, 110): grid(2, 3) = 2: Ikey = 2

CASE "9": CALL movex(190, 15): grid(3, 1) = 2: Ikey = 9
CASE "6": CALL movex(190, 60): grid(3, 2) = 2: Ikey = 6
CASE "3": CALL movex(190, 110): grid(3, 3) = 2: Ikey = 3

CASE CHR$(27): END

CASE ELSE



IF win% = 1 THEN PRINT "You win% player"; num$

IF turn% = 1 THEN
LOCATE 20, 5: PRINT "Make your move"
IF Ikey = 7 THEN PRINT #1, "1", "1": turn% = 2
IF Ikey = 4 THEN PRINT #1, "1", "2": turn% = 2
IF Ikey = 1 THEN PRINT #1, "1", "3": turn% = 2

IF Ikey = 8 THEN PRINT #1, "2", "1": turn% = 2
IF Ikey = 5 THEN PRINT #1, "2", "2": turn% = 2
IF Ikey = 2 THEN PRINT #1, "2", "3": turn% = 2

IF Ikey = 9 THEN PRINT #1, "3", "1": turn% = 2
IF Ikey = 6 THEN PRINT #1, "3", "2": turn% = 2
IF Ikey = 3 THEN PRINT #1, "3", "3": turn% = 2

END IF






IF turn% = 2 THEN
LOCATE 20, 5: PRINT "Wait for computer2 to move"
INPUT #1, cpua$, cpub$

REM 90,15:REM  140,15:REM   190,15
REM 90,60      140,60       190,60
REM 90,110     140,110      190,110

REM read and convert incomeing data

IF cpua$ = "1" AND cpub$ = "1" THEN ma% = 90: mb% = 15
IF cpua$ = "1" AND cpub$ = "2" THEN ma% = 90: mb% = 60
IF cpua$ = "1" AND cpub$ = "3" THEN ma% = 90: mb% = 110

IF cpua$ = "2" AND cpub$ = "1" THEN ma% = 140: mb% = 15
IF cpua$ = "2" AND cpub$ = "2" THEN ma% = 140: mb% = 60
IF cpua$ = "2" AND cpub$ = "3" THEN ma% = 140: mb% = 110

IF cpua$ = "3" AND cpub$ = "1" THEN ma% = 190: mb% = 15
IF cpua$ = "3" AND cpub$ = "2" THEN ma% = 190: mb% = 60
IF cpua$ = "3" AND cpub$ = "3" THEN ma% = 190: mb% = 110


CALL cir(ma%, mb%)


grid(VAL(cpua$), VAL(cpub$)) = 2: ' turn% = 1
IF cpua$ > "" THEN turn% = 1


END IF





  
   v = grid(1, 1)
   v2 = grid(1, 2)
   v3 = grid(1, 3)
  
   b = grid(2, 1)
   b2 = grid(2, 2)
   b3 = grid(2, 3)

   n = grid(3, 1)
   n2 = grid(3, 2)
   n3 = grid(3, 3)

'LOCATE 1, 1
'PRINT v; b; n
'PRINT v2; b2; n2
'PRINT v3; b3; n3



IF grid(1, 1) = 2 AND grid(2, 2) = 2 AND grid(3, 3) = 2 THEN win% = 1
IF grid(3, 1) = 2 AND grid(2, 2) = 2 AND grid(1, 3) = 2 THEN win% = 1
IF grid(2, 1) = 2 AND grid(2, 2) = 2 AND grid(2, 3) = 2 THEN win% = 1

IF grid(1, 1) = 2 AND grid(2, 1) = 2 AND grid(3, 1) = 2 THEN win% = 1
IF grid(1, 2) = 2 AND grid(2, 2) = 2 AND grid(3, 2) = 2 THEN win% = 1
IF grid(1, 3) = 2 AND grid(2, 3) = 2 AND grid(3, 3) = 2 THEN win% = 1

IF grid(1, 1) = 2 AND grid(1, 2) = 2 AND grid(1, 3) = 2 THEN win% = 1
IF grid(2, 1) = 2 AND grid(2, 2) = 2 AND grid(2, 3) = 2 THEN win% = 1
IF grid(3, 3) = 2 AND grid(3, 2) = 2 AND grid(3, 3) = 2 THEN win% = 1

IF win% = 1 THEN PRINT "You win% player"




REM If you called the person
END SELECT
  

ELSEIF server% = false THEN

SELECT CASE INKEY$

REM 90,15:REM  140,15:REM   190,15
REM 90,60      140,60       190,60
REM 90,110     140,110      190,110

CASE "7": CALL cir(90, 15): grid(1, 1) = 1: Ikey = 7
CASE "4": CALL cir(90, 60): grid(1, 2) = 1: Ikey = 4
CASE "1": CALL cir(90, 110): grid(1, 3) = 1: Ikey = 1

CASE "8": CALL cir(140, 15): grid(2, 1) = 1:  Ikey = 8
CASE "5": CALL cir(140, 60): grid(2, 2) = 1:  Ikey = 5
CASE "2": CALL cir(140, 110): grid(2, 3) = 1:  Ikey = 2

CASE "9": CALL cir(190, 15): grid(3, 1) = 1: Ikey = 9
CASE "6": CALL cir(190, 60): grid(3, 2) = 1:  Ikey = 6
CASE "3": CALL cir(190, 110): grid(3, 3) = 1:  Ikey = 3

CASE CHR$(27): quit = 1: END

CASE ELSE


 
   v = grid(1, 1)
   v2 = grid(1, 2)
   v3 = grid(1, 3)
 
   b = grid(2, 1)
   b2 = grid(2, 2)
   b3 = grid(2, 3)

   n = grid(3, 1)
   n2 = grid(3, 2)
   n3 = grid(3, 3)

'LOCATE 1, 1
'PRINT v; b; n
'PRINT v2; b2; n2
'PRINT v3; b3; n3


IF grid(1, 1) = 1 AND grid(2, 2) = 1 AND grid(3, 3) = 1 THEN win% = 1
IF grid(3, 1) = 1 AND grid(2, 2) = 1 AND grid(1, 3) = 1 THEN win% = 1
IF grid(2, 1) = 1 AND grid(2, 2) = 1 AND grid(2, 3) = 1 THEN win% = 1
IF grid(1, 1) = 1 AND grid(2, 1) = 1 AND grid(3, 1) = 1 THEN win% = 1
IF grid(1, 2) = 1 AND grid(2, 2) = 1 AND grid(3, 2) = 1 THEN win% = 1
IF grid(1, 3) = 1 AND grid(2, 3) = 1 AND grid(3, 3) = 1 THEN win% = 1
IF grid(1, 1) = 1 AND grid(1, 2) = 1 AND grid(1, 3) = 1 THEN win% = 1
IF grid(2, 1) = 1 AND grid(2, 2) = 1 AND grid(2, 3) = 1 THEN win% = 1
IF grid(3, 3) = 1 AND grid(3, 2) = 1 AND grid(3, 3) = 1 THEN win% = 1

IF win% = 1 THEN PRINT "You win player"

IF turn% = 1 THEN
LOCATE 20, 5: PRINT "Make you move"

IF Ikey = 7 THEN PRINT #1, "1", "1": turn% = 2
IF Ikey = 4 THEN PRINT #1, "1", "2": turn% = 2
IF Ikey = 1 THEN PRINT #1, "1", "3": turn% = 2
IF Ikey = 8 THEN PRINT #1, "2", "1": turn% = 2
IF Ikey = 5 THEN PRINT #1, "2", "2": turn% = 2
IF Ikey = 2 THEN PRINT #1, "2", "3": turn% = 2
IF Ikey = 9 THEN PRINT #1, "3", "1": turn% = 2
IF Ikey = 6 THEN PRINT #1, "3", "2": turn% = 2
IF Ikey = 3 THEN PRINT #1, "3", "3": turn% = 2


END IF

REM read and convert incomeing data
IF turn% = 2 THEN
LOCATE 20, 5: PRINT "Wait for computer2 to move"
INPUT #1, cpua$, cpub$


IF cpua$ = "1" AND cpub$ = "1" THEN ma% = 90: mb% = 15
IF cpua$ = "1" AND cpub$ = "2" THEN ma% = 90: mb% = 60
IF cpua$ = "1" AND cpub$ = "3" THEN ma% = 90: mb% = 110

IF cpua$ = "2" AND cpub$ = "1" THEN ma% = 140: mb% = 15
IF cpua$ = "2" AND cpub$ = "2" THEN ma% = 140: mb% = 60
IF cpua$ = "2" AND cpub$ = "3" THEN ma% = 140: mb% = 110

IF cpua$ = "3" AND cpub$ = "1" THEN ma% = 190: mb% = 15
IF cpua$ = "3" AND cpub$ = "2" THEN ma% = 190: mb% = 60
IF cpua$ = "3" AND cpub$ = "3" THEN ma% = 190: mb% = 110


CALL movex(ma%, mb%)

grid(VAL(cpua$), VAL(cpub$)) = 1
IF cpua$ > "" THEN turn% = 1
END IF
END SELECT
END IF
LOOP

CLOSE #1
END

SUB cir (x%, y%)
CIRCLE (x% + 13, y% + 13), 13

END SUB

SUB movex (x1%, y1%)
LINE (0 + x1%, 0 + y1%)-(18 + x1%, 18 + y1%)
LINE (0 + x1%, 18 + y1%)-(18 + x1%, 0 + y1%)

END SUB

