'=========================================================================== ' 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