05-23-2003, 07:02 PM
See mine:
It supports mouse, crappy mode 13h gfx and an AI.
P.S. you can only win with Cross on 1 way, try to find how to win
Code:
'
' Tic Tac Toe
'
' Not special version
' By Neo Deus Ex Machina
' (C)HAR-SoftWare
'
' I just made this crappy game because I
' was bored
'Initialization Routine (1 routine)
DECLARE FUNCTION KT.MOUSE.Initialize% ()
'Info Routine (1 routine)
DECLARE FUNCTION KT.MOUSE.GetNoButtons% ()
'Mouse Routines (12 routines)
DECLARE SUB KT.MOUSE.ShowMouse ()
DECLARE SUB KT.MOUSE.HideMouse ()
DECLARE FUNCTION KT.MOUSE.MouseX% ()
DECLARE FUNCTION KT.MOUSE.MouseY% ()
DECLARE FUNCTION KT.MOUSE.MouseLB% ()
DECLARE FUNCTION KT.MOUSE.MouseMB% ()
DECLARE FUNCTION KT.MOUSE.MouseRB% ()
DECLARE SUB KT.MOUSE.SetPos (NewX AS INTEGER, NewY AS INTEGER)
DECLARE SUB KT.MOUSE.SetRange (MinX AS INTEGER, MinY AS INTEGER, MaxX AS INTEGER, MaxY AS INTEGER)
DECLARE SUB KT.MOUSE.SetCursorImage (NewImage AS STRING, HotX AS INTEGER, HotY AS INTEGER)
DECLARE SUB KT.MOUSE.SetTextCursorImage (ScreenChar AS INTEGER, MaskChar AS INTEGER)
DECLARE SUB KT.MOUSE.SetSensitivity (MickeysPerPixelHorizontal AS INTEGER, MickeysPerPixelVertical AS INTEGER)
'TTT routines
DECLARE SUB TTT.Init ()
DECLARE SUB TTT.ChooseMode ()
DECLARE SUB TTT.ChooseType ()
DECLARE SUB TTT.Game ()
DECLARE SUB TTT.DrawCross (x AS INTEGER, y AS INTEGER, PT AS INTEGER)
DECLARE FUNCTION TTT.GetField$ ()
DECLARE FUNCTION TTT.GetTwoOfPlayer% ()
DECLARE FUNCTION TTT.GetTwoOFPPlayer% ()
DECLARE FUNCTION TTT.GetCanMakeThree% ()
DECLARE FUNCTION TTT.GetCanMakePThree% ()
DECLARE FUNCTION TTT.GetCanMakeTwo% ()
DECLARE FUNCTION TTT.GetCanMakePTwo% ()
DECLARE FUNCTION TTT.CheckWin% (ind AS INTEGER)
DEFINT A-Z
'$DYNAMIC
'$INCLUDE:'..\..\..\QB.BI'
'$LIB:'..\..\..\QB.LIB'
'$DEBUG
DIM SHARED PlayerType AS INTEGER
DIM SHARED PlayField(3, 3) AS INTEGER
DIM SHARED P1Ac AS INTEGER, P2Ac AS INTEGER
'DO
TTT.Init
TTT.ChooseMode
TTT.ChooseType
DO
TTT.Init
TTT.Game
FOR x=0 TO 2
FOR y=0 TO 2
PlayField(x,y) = 0
NEXT y,x
LOOP
SLEEP
SUB TTT.Init
RANDOMIZE TIMER
SCREEN 13
WIDTH 40, 25
CLS
COLOR 15
LOCATE 1,1
PRINT "Loading... Mouse"
IF NOT KT.MOUSE.Initialize THEN
PRINT "No active mouse driver found"
PRINT "You need AT LEAST a mouse to run Tic Tac Toe :) lol"
PRINT
PRINT "Press any key to exit"
SLEEP
SCREEN 0
WIDTH 80, 25
SYSTEM
END IF
KT.MOUSE.SetRange 0,0,319,199
KT.MOUSE.HideMouse
LOCATE 1,1
PRINT "-= Tic Tac Toe =-"
COLOR 7
PRINT "By Neo Deus Ex Machina"
PRINT "(C)2003 HAR-SoftWare"
LOCATE 25,1
PRINT "This game was made in 1 hour";
LOCATE 23,22
PRINT "Rightclick to exit"
LOCATE 24,22
PRINT "(in your own turn)";
FOR u = 0 TO 3
LINE (u*50+10,30)-(u*50+10,30+3*50), 15
LINE (10,u*50+30)-(10+3*50,u*50+30), 15
NEXT u
END SUB
SUB TTT.ChooseType
DEFINT A-Z
'$DYNAMIC
LOCATE 10, 22
COLOR 15
PRINT "Choose Figure:"
LOCATE 11, 22
COLOR 4
PRINT "Cross"
LOCATE 11, 31
COLOR 1
PRINT "Circle"
KT.MOUSE.ShowMouse
KT.MOUSE.ShowMouse
KT.MOUSE.SetPos 319, 199
'KT.MOUSE.ShowMouse
'KT.MOUSE.ShowMouse
ok = 0
OUT &H3C7, 1
r1 = INP(&H3C9)
g1 = INP(&H3C9)
b1 = INP(&H3C9)
OUT &H3C7, 4
r4 = INP(&H3C9)
g4 = INP(&H3C9)
b4 = INP(&H3C9)
OUT &H3C7, 9
r9 = INP(&H3C9)
g9 = INP(&H3C9)
b9 = INP(&H3C9)
OUT &H3C7, 12
r12 = INP(&H3C9)
g12 = INP(&H3C9)
b12 = INP(&H3C9)
DO
mx = KT.MOUSE.MouseX
my = KT.MOUSE.MouseY
'LOCATE 1,1: PRINT KT.MOUSE.MouseLB
IF KT.MOUSE.MouseRB THEN SYSTEM
IF mx >=168 AND mx<=208 AND my>=80 AND my<=87 THEN
'KT.MOUSE.HideMouse
OUT &H3C8, 4
OUT &H3C9, r12
OUT &H3C9, g12
OUT &H3C9, b12
changed1 = -1
'KT.MOUSE.ShowMouse
IF KT.MOUSE.MouseLB THEN PlayerType = 0: ok = -1
ELSE
IF changed1 THEN
OUT &H3C8, 4
OUT &H3C9, r4
OUT &H3C9, g4
OUT &H3C9, b4
changed1 = 0
END IF
END IF
IF mx>=240 AND mx<=288 AND my>=80 AND my<=87 THEN
'KT.MOUSE.HideMouse
OUT &H3C8, 1
OUT &H3C9, r9
OUT &H3C9, g9
OUT &H3C9, b9
changed2 = -1
'KT.MOUSE.ShowMouse
IF KT.MOUSE.MouseLB THEN PlayerType = 1: ok = -1
ELSE
IF changed2 THEN
OUT &H3C8, 1
OUT &H3C9, r1
OUT &H3C9, g1
OUT &H3C9, b1
changed2 = NOT changed2
END IF
END IF
LOOP UNTIL ok = -1
OUT &H3C8, 1
OUT &H3C9, r1
OUT &H3C9, g1
OUT &H3C9, b1
OUT &H3C8, 4
OUT &H3C9, r4
OUT &H3C9, g4
OUT &H3C9, b4
TTT.Init
END SUB
SUB TTT.ChooseMode
DEFINT A-Z
'$DYNAMIC
LOCATE 10, 22
COLOR 15
PRINT "Choose Gamemode:"
LOCATE 11, 22
COLOR 4
PRINT "Human-Human"
LOCATE 12, 22
COLOR 1
PRINT "Human-Comp"
LOCATE 13, 22
COLOR 2
PRINT "Comp-Comp"
KT.MOUSE.ShowMouse
KT.MOUSE.ShowMouse
KT.MOUSE.SetPos 319, 199
'KT.MOUSE.ShowMouse
'KT.MOUSE.ShowMouse
ok = 0
OUT &H3C7, 1
r1 = INP(&H3C9)
g1 = INP(&H3C9)
b1 = INP(&H3C9)
OUT &H3C7, 4
r4 = INP(&H3C9)
g4 = INP(&H3C9)
b4 = INP(&H3C9)
OUT &H3C7, 9
r9 = INP(&H3C9)
g9 = INP(&H3C9)
b9 = INP(&H3C9)
OUT &H3C7, 12
r12 = INP(&H3C9)
g12 = INP(&H3C9)
b12 = INP(&H3C9)
OUT &H3C7, 2
r2 = INP(&H3C9)
g2 = INP(&H3C9)
b2 = INP(&H3C9)
OUT &H3C7, 10
r10 = INP(&H3C9)
g10 = INP(&H3C9)
b10 = INP(&H3C9)
DO
mx = KT.MOUSE.MouseX
my = KT.MOUSE.MouseY
'LOCATE 1,1: PRINT KT.MOUSE.MouseLB
IF KT.MOUSE.MouseRB THEN SYSTEM
IF mx >=168 AND mx<=256 AND my>=80 AND my<=87 THEN
'KT.MOUSE.HideMouse
OUT &H3C8, 4
OUT &H3C9, r12
OUT &H3C9, g12
OUT &H3C9, b12
changed1 = -1
'KT.MOUSE.ShowMouse
IF KT.MOUSE.MouseLB THEN P1Ac = -1: P2Ac = -1: ok = -1
ELSE
IF changed1 THEN
OUT &H3C8, 4
OUT &H3C9, r4
OUT &H3C9, g4
OUT &H3C9, b4
changed1 = 0
END IF
END IF
IF mx>=168 AND mx<=248 AND my>=88 AND my<=95 THEN
'KT.MOUSE.HideMouse
OUT &H3C8, 1
OUT &H3C9, r9
OUT &H3C9, g9
OUT &H3C9, b9
changed2 = -1
'KT.MOUSE.ShowMouse
IF KT.MOUSE.MouseLB THEN P1Ac = -1: P2Ac = 0: ok = -1
ELSE
IF changed2 THEN
OUT &H3C8, 1
OUT &H3C9, r1
OUT &H3C9, g1
OUT &H3C9, b1
changed2 = NOT changed2
END IF
END IF
IF mx>=168 AND mx<=240 AND my>=96 AND my<=103 THEN
'KT.MOUSE.HideMouse
OUT &H3C8, 2
OUT &H3C9, r10
OUT &H3C9, g10
OUT &H3C9, b10
changed3 = -1
'KT.MOUSE.ShowMouse
IF KT.MOUSE.MouseLB THEN P1Ac = 0: P2Ac = 0: ok = -1
ELSE
IF changed3 THEN
OUT &H3C8, 2
OUT &H3C9, r2
OUT &H3C9, g2
OUT &H3C9, b2
changed2 = NOT changed2
END IF
END IF
LOOP UNTIL ok = -1
OUT &H3C8, 1
OUT &H3C9, r1
OUT &H3C9, g1
OUT &H3C9, b1
OUT &H3C8, 4
OUT &H3C9, r4
OUT &H3C9, g4
OUT &H3C9, b4
OUT &H3C8, 2
OUT &H3C9, r2
OUT &H3C9, g2
OUT &H3C9, b2
TTT.Init
END SUB
SUB TTT.Game
statx = 22
staty = 11
KT.MOUSE.SetPos 319, 199
KT.MOUSE.ShowMouse
KT.MOUSE.ShowMouse
T! = TIMER
DO: LOOP UNTIL TIMER - T! >= 1
KT.MOUSE.SetPos 319, 199
IF PlayerType = 0 THEN
pnow = 0
ELSE
pnow = -1
END IF
winner = 0
won = 0
layed = 0
DO
IF NOT pnow THEN
IF P1Ac THEN
LOCATE staty, statx
COLOR ABS(NOT(-PlayerType)) * 3 + 1
PRINT "Player's Turn"
goodspot = 0
DO
IF KT.MOUSE.MouseLB THEN
mx = KT.MOUSE.MouseX
my = KT.MOUSE.MouseY
IF mx >= 10 AND mx<=160 AND my>=30 AND my<=180 THEN
coorx = (mx - 10) \ 50
coory = (my - 30) \ 50
IF PlayField(coorx, coory) = 0 THEN goodspot = -1
END IF
END IF
IF KT.MOUSE.MouseRB THEN SYSTEM
LOOP UNTIL goodspot
putx = coorx
puty = coory
PlayField(putx, puty) = 1
KT.MOUSE.HideMouse
TTT.DrawCross putx * 50 + 10, puty * 50 + 30, PlayerType
KT.MOUSE.ShowMouse
ELSE
LOCATE staty, statx
IF PlayerType = 0 THEN COLOR 4 ELSE COLOR 1
PRINT "Hybrid's Turn"
T! = TIMER
DO: LOOP UNTIL TIMER - T! >= 1
fs$ = TTT.GetField$
CompType = PlayerType
IF (fs$ = "........." OR fs$ = "2........" OR fs$ = "..2......" OR fs$ = "......2.." OR fs$ = "........2") AND layed <= 1 THEN
PlayField(1,1) = 1
KT.MOUSE.HideMouse
TTT.DrawCross 60, 80, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "....2...." AND layed <= 1 THEN
cornx = INT(RND * 2) * 2
corny = INT(RND * 2) * 2
PlayField(cornx, corny) = 1
KT.MOUSE.HideMouse
TTT.DrawCross cornx * 50 + 10, corny * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "..1.2.2.." OR fs$ = "1...2...2" THEN
IF PlayField(0,0) = 1 THEN
PlayField(2,0)=1
KT.MOUSE.HideMouse
TTT.DrawCross 110, 30, CompType
KT.MOUSE.ShowMouse
ELSE
PlayField(0,0)=1
KT.MOUSE.HideMouse
TTT.DrawCross 10, 30, CompType
KT.MOUSE.ShowMouse
END IF
ELSEIF fs$ = "2...2...1" OR fs$ = "..2.2.1.." THEN
IF PlayField(0,2) = 1 THEN
PlayField(2,2)=1
KT.MOUSE.HideMouse
TTT.DrawCross 110, 130, CompType
KT.MOUSE.ShowMouse
ELSE
PlayField(0,2)=1
KT.MOUSE.HideMouse
TTT.DrawCross 10, 130, CompType
KT.MOUSE.ShowMouse
END IF
ELSEIF fs$ = "....1..2." THEN
crdy = 0
crdx = INT(RND * 2) * 2
PlayField(crdx, crdy) = 1
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = ".2..1...." THEN
crdy = 2
crdx = INT(RND * 2) * 2
PlayField(crdx, crdy) = 1
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "...21...." THEN
crdx = 2
crdy = INT(RND * 2) * 2
PlayField(crdx, crdy) = 1
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "....12..." THEN
crdx = 0
crdy = INT(RND * 2) * 2
PlayField(crdx, crdy) = 1
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = ".2......." THEN
crdx = INT(RND * 2) * 2
crdy = 2
PlayField(crdx, crdy) = 1
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = ".......2." THEN
crdx = INT(RND * 2) * 2
crdy = 0
PlayField(crdx, crdy) = 1
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "...2....." THEN
crdx = 2
crdy = INT(RND * 2) * 2
PlayField(crdx, crdy) = 1
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = ".....2..." THEN
crdx = 0
crdy = INT(RND * 2) * 2
PlayField(crdx, crdy) = 1
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSE
coord = TTT.GetCanMakePThree
IF coord <> -1 THEN
oky = coord \ 4
okx = coord - oky * 4
KT.MOUSE.HideMouse
PlayField(okx, oky) = 1
TTT.DrawCross okx * 50 + 10, oky * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSE
coord = TTT.GetTwoOfPPlayer
IF coord <> -1 THEN
oky = coord \ 4
okx = coord - oky * 4
KT.MOUSE.HideMouse
PlayField(okx, oky) = 1
TTT.DrawCross okx * 50 + 10, oky * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSE
coord = TTT.GetCanMakePTwo
IF coord <> -1 THEN
oky = coord \ 4
okx = coord - oky * 4
KT.MOUSE.HideMouse
PlayField(okx, oky) = 1
TTT.DrawCross okx * 50 + 10, oky * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSE
DO
okx = INT(RND * 3)
oky = INT(RND * 3)
LOOP UNTIL PlayField(okx, oky) = 0
KT.MOUSE.HideMouse
PlayField(okx, oky) = 1
TTT.DrawCross okx * 50 + 10, oky * 50 + 30, CompType
KT.MOUSE.ShowMouse
END IF
END IF
END IF
END IF
END IF
END IF
IF pnow THEN
IF P2Ac THEN
LOCATE staty, statx
IF PlayerType = 0 THEN COLOR 1 ELSE COLOR 4
PRINT "Mutant's Turn"
goodspot = 0
DO
IF KT.MOUSE.MouseLB THEN
mx = KT.MOUSE.MouseX
my = KT.MOUSE.MouseY
IF mx >= 10 AND mx<=160 AND my>=30 AND my<=180 THEN
coorx = (mx - 10) \ 50
coory = (my - 30) \ 50
IF PlayField(coorx, coory) = 0 THEN goodspot = -1
END IF
END IF
IF KT.MOUSE.MouseRB THEN SYSTEM
LOOP UNTIL goodspot
putx = coorx
puty = coory
PlayField(putx, puty) = 2
KT.MOUSE.HideMouse
TTT.DrawCross putx * 50 + 10, puty * 50 + 30, ABS(PlayerType -1)
KT.MOUSE.ShowMouse
ELSE
LOCATE staty, statx
IF PlayerType = 0 THEN COLOR 1 ELSE COLOR 4
PRINT "Master's Turn"
T! = TIMER
DO: LOOP UNTIL TIMER - T! >= 1
fs$ = TTT.GetField$
CompType = ABS(PlayerType - 1)
IF (fs$ = "........." OR fs$ = "1........" OR fs$ = "..1......" OR fs$ = "......1.." OR fs$ = "........1") AND layed <= 1 THEN
PlayField(1,1) = 2
KT.MOUSE.HideMouse
TTT.DrawCross 60, 80, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "....1...." AND layed <= 1 THEN
cornx = INT(RND * 2) * 2
corny = INT(RND * 2) * 2
PlayField(cornx, corny) = 2
KT.MOUSE.HideMouse
TTT.DrawCross cornx * 50 + 10, corny * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "..2.1.1.." OR fs$ = "2...1...1" THEN
IF PlayField(0,0) = 2 THEN
PlayField(2,0)=2
KT.MOUSE.HideMouse
TTT.DrawCross 110, 30, CompType
KT.MOUSE.ShowMouse
ELSE
PlayField(0,0)=2
KT.MOUSE.HideMouse
TTT.DrawCross 10, 30, CompType
KT.MOUSE.ShowMouse
END IF
ELSEIF fs$ = "1...1...2" OR fs$ = "..1.1.2.." THEN
IF PlayField(0,2) = 2 THEN
PlayField(2,2)=2
KT.MOUSE.HideMouse
TTT.DrawCross 110, 130, CompType
KT.MOUSE.ShowMouse
ELSE
PlayField(0,2)=2
KT.MOUSE.HideMouse
TTT.DrawCross 10, 130, CompType
KT.MOUSE.ShowMouse
END IF
ELSEIF fs$ = "....2..1." THEN
crdy = 0
crdx = INT(RND * 2) * 2
PlayField(crdx, crdy) = 2
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = ".1..2..0." THEN
crdy = 2
crdx = INT(RND * 2) * 2
PlayField(crdx, crdy) = 2
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "...12...." THEN
crdx = 2
crdy = INT(RND * 2) * 2
PlayField(crdx, crdy) = 2
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "....21..." THEN
crdx = 0
crdy = INT(RND * 2) * 2
PlayField(crdx, crdy) = 2
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = ".1......." THEN
crdx = INT(RND * 2) * 2
crdy = 2
PlayField(crdx, crdy) = 2
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = ".......1." THEN
crdx = INT(RND * 2) * 2
crdy = 0
PlayField(crdx, crdy) = 2
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = "...1....." THEN
crdx = 2
crdy = INT(RND * 2) * 2
PlayField(crdx, crdy) = 2
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSEIF fs$ = ".....1..." THEN
crdx = 0
crdy = INT(RND * 2) * 2
PlayField(crdx, crdy) = 2
KT.MOUSE.HideMouse
TTT.DrawCross crdx * 50 + 10, crdy * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSE
coord = TTT.GetCanMakeThree
IF coord <> -1 THEN
oky = coord \ 4
okx = coord - oky * 4
KT.MOUSE.HideMouse
PlayField(okx, oky) = 2
TTT.DrawCross okx * 50 + 10, oky * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSE
coord = TTT.GetTwoOfPlayer
IF coord <> -1 THEN
oky = coord \ 4
okx = coord - oky * 4
KT.MOUSE.HideMouse
PlayField(okx, oky) = 2
TTT.DrawCross okx * 50 + 10, oky * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSE
coord = TTT.GetCanMakeTwo
IF coord <> -1 THEN
oky = coord \ 4
okx = coord - oky * 4
KT.MOUSE.HideMouse
PlayField(okx, oky) = 2
TTT.DrawCross okx * 50 + 10, oky * 50 + 30, CompType
KT.MOUSE.ShowMouse
ELSE
DO
okx = INT(RND * 3)
oky = INT(RND * 3)
LOOP UNTIL PlayField(okx, oky) = 0
KT.MOUSE.HideMouse
PlayField(okx, oky) = 2
TTT.DrawCross okx * 50 + 10, oky * 50 + 30, CompType
KT.MOUSE.ShowMouse
END IF
END IF
END IF
END IF
END IF
END IF
pnow = NOT(pnow)
layed = layed + 1
IF TTT.CheckWin(1) THEN
T!=TIMER
DO:LOOP UNTIL TIMER-T!>=2
KT.MOUSE.HideMouse
CLS
IF PlayerType = 0 THEN col = 4 ELSE col = 1
PAINT (0,0), 0
COLOR col
LOCATE 12, 15
IF P1Ac AND NOT P2Ac THEN
PRINT "You won!"
ELSEIF NOT P1Ac AND NOT P2Ac THEN
PRINT "Hybrid won!"
ELSE
PRINT "Player won!"
END IF
DO
LOOP UNTIL INKEY$ <> ""
won = -1
KT.MOUSE.ShowMouse
END IF
IF TTT.CheckWin(2) THEN
T!=TIMER
DO:LOOP UNTIL TIMER-T!>=2
KT.MOUSE.HideMouse
CLS
IF PlayerType = 0 THEN col = 1 ELSE col = 4
PAINT (0,0), 0
COLOR col
LOCATE 12, 15
IF P1Ac AND NOT P2Ac THEN
PRINT "You lost!"
ELSEIF NOT P1Ac AND NOT P2Ac THEN
PRINT "Master won!"
ELSE
PRINT "Mutant won!"
END IF
DO
LOOP UNTIL INKEY$ <> ""
won = -1
KT.MOUSE.ShowMouse
END IF
IF layed = 9 THEN EXIT DO
IF INKEY$ = CHR$(27) THEN SYSTEM
LOOP UNTIL won
KT.MOUSE.HideMouse
END SUB
SUB TTT.DrawCross (x AS INTEGER, y AS INTEGER, PT AS INTEGER)
IF PT = 0 THEN
rx = x + 1
ry = y + 1
LINE (rx, ry) - (rx + 16, ry), 12
LINE (rx + 31, ry) - (rx + 47, ry), 12
LINE (rx, ry + 47) - (rx + 16, ry + 47), 12
LINE (rx + 31, ry + 47) - (rx + 47, ry + 47), 12
LINE (rx + 17, ry) - (rx + 25, ry + 15), 12
LINE (rx + 25, ry + 15) - (rx + 31, ry), 12
LINE (rx + 17, ry + 47) - (rx + 25, ry + 31), 12
LINE (rx + 25, ry + 31) - (rx + 31, ry + 47), 12
LINE (rx, ry) - (rx + 7, ry + 23), 12
LINE (rx, ry + 47) - (rx + 7, ry + 23), 12
LINE (rx + 47, ry) - (rx + 40, ry + 23), 12
LINE (rx + 47, ry + 47) - (rx + 40, ry + 23), 12
PAINT (rx + 3, ry + 3), 4, 12
ELSE
FOR radius = 23 TO 17 STEP -1
IF radius = 23 OR radius = 17 THEN col = 9 ELSE col = 1
CIRCLE (x + 24, y + 24), radius, col
NEXT radius
END IF
END SUB
FUNCTION TTT.GetField$
ans$ = ""
FOR y = 0 TO 2
FOR x = 0 TO 2
IF PlayField(x,y)=0 THEN
ans$ = ans$ + "."
ELSE
ans$ = ans$ + LTRIM$(STR$(PlayField(x,y)))
END IF
NEXT x,y
TTT.GetField$ = ans$
END FUNCTION
FUNCTION TTT.GetTwoOfPlayer%
FOR y = 0 TO 2
'LOCATE 1,1: PRINT "In hor"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR x = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT x
IF playerhis = 2 AND comphis = 0 THEN
TTT.GetTwoOfPlayer = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT y
FOR x = 0 TO 2
'LOCATE 1,1: PRINT "In ver"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR y = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT y
IF playerhis = 2 AND comphis = 0 THEN
TTT.GetTwoOfPlayer = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT x
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
'LOCATE 1,1: PRINT "In diag1"
IF PlayField(c,c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,c) = 2 THEN comphis = comphis + 1
IF PlayField(c,c) = 0 THEN spx = c: spy = c
NEXT c
IF playerhis = 2 AND comphis = 0 THEN
TTT.GetTwoOfPlayer = spy * 4 + spx
EXIT FUNCTION
END IF
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
'LOCATE 1,1: PRINT "In diag2"
IF PlayField(c,2-c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,2-c) = 2 THEN comphis = comphis + 1
IF PlayField(c,2-c) = 0 THEN spx = c: spy = 2-c
NEXT c
IF playerhis = 2 AND comphis = 0 THEN
TTT.GetTwoOfPlayer = spy * 4 + spx
EXIT FUNCTION
END IF
TTT.GetTwoOfPlayer = -1
END FUNCTION
FUNCTION TTT.GetTwoOfPPlayer%
FOR y = 0 TO 2
'LOCATE 1,1: PRINT "In hor"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR x = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT x
IF comphis = 2 AND playerhis = 0 THEN
TTT.GetTwoOfPPlayer = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT y
FOR x = 0 TO 2
'LOCATE 1,1: PRINT "In ver"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR y = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT y
IF comphis = 2 AND playerhis = 0 THEN
TTT.GetTwoOfPPlayer = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT x
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
'LOCATE 1,1: PRINT "In diag1"
IF PlayField(c,c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,c) = 2 THEN comphis = comphis + 1
IF PlayField(c,c) = 0 THEN spx = c: spy = c
NEXT c
IF playerhis = 0 AND comphis = 2 THEN
TTT.GetTwoOfPPlayer = spy * 4 + spx
EXIT FUNCTION
END IF
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
'LOCATE 1,1: PRINT "In diag2"
IF PlayField(c,2-c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,2-c) = 2 THEN comphis = comphis + 1
IF PlayField(c,2-c) = 0 THEN spx = c: spy = 2-c
NEXT c
IF playerhis = 0 AND comphis = 2 THEN
TTT.GetTwoOfPPlayer = spy * 4 + spx
EXIT FUNCTION
END IF
TTT.GetTwoOfPPlayer = -1
END FUNCTION
FUNCTION TTT.GetCanMakeThree
FOR y = 0 TO 2
'LOCATE 1,1: PRINT "In hor"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR x = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT x
IF comphis = 2 AND playerhis = 0 THEN
TTT.GetCanMakeThree = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT y
FOR x = 0 TO 2
'LOCATE 1,1: PRINT "In ver"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR y = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT y
IF comphis = 2 AND playerhis = 0 THEN
TTT.GetCanMakeThree = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT x
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag1"
IF PlayField(c,c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,c) = 2 THEN comphis = comphis + 1
IF PlayField(c,c) = 0 THEN spx = c: spy = c
NEXT c
IF comphis = 2 AND playerhis = 0 THEN
TTT.GetCanMakeThree = spy * 4 + spx
EXIT FUNCTION
END IF
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag2"
IF PlayField(c,2-c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,2-c) = 2 THEN comphis = comphis + 1
IF PlayField(c,2-c) = 0 THEN spx = c: spy = 2-c
NEXT c
IF comphis = 2 AND playerhis = 0 THEN
TTT.GetCanMakeThree = spy * 4 + spx
EXIT FUNCTION
END IF
TTT.GetCanMakeThree = -1
END FUNCTION
FUNCTION TTT.GetCanMakePThree
FOR y = 0 TO 2
'LOCATE 1,1: PRINT "In hor"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR x = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT x
IF playerhis = 2 AND comphis = 0 THEN
TTT.GetCanMakePThree = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT y
FOR x = 0 TO 2
'LOCATE 1,1: PRINT "In ver"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR y = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT y
IF playerhis = 2 AND comphis = 0 THEN
TTT.GetCanMakePThree = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT x
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag1"
IF PlayField(c,c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,c) = 2 THEN comphis = comphis + 1
IF PlayField(c,c) = 0 THEN spx = c: spy = c
NEXT c
IF playerhis = 2 AND comphis = 0 THEN
TTT.GetCanMakePThree = spy * 4 + spx
EXIT FUNCTION
END IF
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag2"
IF PlayField(c,2-c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,2-c) = 2 THEN comphis = comphis + 1
IF PlayField(c,2-c) = 0 THEN spx = c: spy = 2-c
NEXT c
IF playerhis = 2 AND comphis = 0 THEN
TTT.GetCanMakePThree = spy * 4 + spx
EXIT FUNCTION
END IF
TTT.GetCanMakePThree = -1
END FUNCTION
FUNCTION TTT.GetCanMakeTwo
FOR y = 0 TO 2
'LOCATE 1,1: PRINT "In hor"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR x = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT x
IF comphis = 1 AND playerhis = 0 THEN
TTT.GetCanMakeTwo = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT y
FOR x = 0 TO 2
'LOCATE 1,1: PRINT "In ver"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR y = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT y
IF comphis = 1 AND playerhis = 0 THEN
TTT.GetCanMakeTwo = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT x
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag1"
IF PlayField(c,c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,c) = 2 THEN comphis = comphis + 1
IF PlayField(c,c) = 0 THEN spx = c: spy = c
NEXT c
IF comphis = 1 AND playerhis = 0 THEN
TTT.GetCanMakeTwo = spy * 4 + spx
EXIT FUNCTION
END IF
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag2"
IF PlayField(c,2-c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,2-c) = 2 THEN comphis = comphis + 1
IF PlayField(c,2-c) = 0 THEN spx = c: spy = 2-c
NEXT c
IF comphis = 1 AND playerhis = 0 THEN
TTT.GetCanMakeTwo = spy * 4 + spx
EXIT FUNCTION
END IF
TTT.GetCanMakeTwo = -1
END FUNCTION
FUNCTION TTT.GetCanMakePTwo
FOR y = 0 TO 2
'LOCATE 1,1: PRINT "In hor"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR x = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT x
IF comphis = 0 AND playerhis = 1 THEN
TTT.GetCanMakePTwo = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT y
FOR x = 0 TO 2
'LOCATE 1,1: PRINT "In ver"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR y = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT y
IF comphis = 0 AND playerhis = 1 THEN
TTT.GetCanMakePTwo = spy * 4 + spx
EXIT FUNCTION
END IF
NEXT x
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag1"
IF PlayField(c,c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,c) = 2 THEN comphis = comphis + 1
IF PlayField(c,c) = 0 THEN spx = c: spy = c
NEXT c
IF comphis = 0 AND playerhis = 1 THEN
TTT.GetCanMakePTwo = spy * 4 + spx
EXIT FUNCTION
END IF
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag2"
IF PlayField(c,2-c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,2-c) = 2 THEN comphis = comphis + 1
IF PlayField(c,2-c) = 0 THEN spx = c: spy = 2-c
NEXT c
IF comphis = 0 AND playerhis = 1 THEN
TTT.GetCanMakePTwo = spy * 4 + spx
EXIT FUNCTION
END IF
TTT.GetCanMakePTwo = -1
END FUNCTION
FUNCTION TTT.CheckWin% (ind AS INTEGER)
FOR y = 0 TO 2
' LOCATE 1,1: PRINT "In hor"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR x = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT x
IF ind = 1 THEN phis = playerhis ELSE phis = comphis
IF phis = 3 THEN
TTT.CheckWin = -1
LINE (10, y * 50 + 29 + 23) - (160, y * 50 + 31 + 23), 2, BF
EXIT FUNCTION
END IF
NEXT y
FOR x = 0 TO 2
' LOCATE 1,1: PRINT "In ver"
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR y = 0 TO 2
IF PlayField(x,y) = 1 THEN playerhis = playerhis + 1
IF PlayField(x,y) = 2 THEN comphis = comphis + 1
IF PlayField(x,y) = 0 THEN spx = x: spy = y
NEXT y
IF ind = 1 THEN phis = playerhis ELSE phis = comphis
IF phis = 3 THEN
TTT.CheckWin = -1
LINE (23 + 9 + x * 50, 30) - (23 + 11 + x * 50, 180), 2, BF
EXIT FUNCTION
END IF
NEXT x
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag1"
IF PlayField(c,c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,c) = 2 THEN comphis = comphis + 1
IF PlayField(c,c) = 0 THEN spx = c: spy = c
NEXT c
IF ind = 1 THEN phis = playerhis ELSE phis = comphis
IF phis = 3 THEN
TTT.CheckWin = -1
LINE (10, 30) - (160, 180), 2
LINE (11, 30) - (160, 179), 2
LINE (10, 31) - (159, 180), 2
EXIT FUNCTION
END IF
playerhis = 0
comphis = 0
spx = 0: spy = 0
FOR c = 0 TO 2
' LOCATE 1,1: PRINT "In diag2"
IF PlayField(c,2-c) = 1 THEN playerhis = playerhis + 1
IF PlayField(c,2-c) = 2 THEN comphis = comphis + 1
IF PlayField(c,2-c) = 0 THEN spx = c: spy = 2-c
NEXT c
IF ind = 1 THEN phis = playerhis ELSE phis = comphis
IF phis = 3 THEN
TTT.CheckWin = -1
LINE (10, 180) - (160, 30), 2
LINE (10, 179) - (159, 30), 2
LINE (11, 180) - (160, 31), 2
EXIT FUNCTION
END IF
TTT.CheckWin = 0
END FUNCTION
'#######################
'#######################
' #####################
' KETON MOUSE LIBRARY
' #####################
'#######################
'#######################
'########################
' Initialization Routine
'########################
FUNCTION KT.MOUSE.Initialize
'returns true if mouse exists
DIM Regs AS RegType
Regs.ax = 0
INTERRUPT &H33, Regs, Regs
KT.MOUSE.Initialize = Regs.ax
END FUNCTION
'##############
' Info Routine
'##############
FUNCTION KT.MOUSE.GetNoButtons
DIM Regs AS RegType
Regs.ax = 0
INTERRUPT &H33, Regs, Regs
btns = 0
SELECT CASE Regs.bx
CASE 2, -1: btns = 2
CASE 3: btns = 3
CASE 0: btns = 5
CASE ELSE: btns = 2
END SELECT
KT.MOUSE.GetNoButtons = btns
END FUNCTION
'################
' Mouse Routines
'################
SUB KT.MOUSE.ShowMouse
DIM Regs AS RegType
Regs.ax = 1
INTERRUPT &H33, Regs, Regs
END SUB
SUB KT.MOUSE.HideMouse
DIM Regs AS RegType
Regs.ax = 2
INTERRUPT &H33, Regs, Regs
END SUB
FUNCTION KT.MOUSE.MouseX
DIM Regs AS RegType
Regs.ax = 3
INTERRUPT &H33, Regs, Regs
KT.MOUSE.MouseX = Regs.cx \ 2
END FUNCTION
FUNCTION KT.MOUSE.MouseY
DIM Regs AS RegType
Regs.ax = 3
INTERRUPT &H33, Regs, Regs
KT.MOUSE.MouseY = Regs.dx
END FUNCTION
FUNCTION KT.MOUSE.MouseLB
DIM Regs AS RegType
Regs.ax = 5
Regs.bx = 0
INTERRUPT &H33, Regs, Regs
IF Regs.ax AND 1 THEN KT.MOUSE.MouseLB = NOT(0) ELSE KT.MOUSE.MouseLB = 0
END FUNCTION
FUNCTION KT.MOUSE.MouseMB
DIM Regs AS RegType
Regs.ax = 5
Regs.bx = 2
INTERRUPT &H33, Regs, Regs
IF Regs.ax AND 4 THEN KT.MOUSE.MouseMB = NOT(0) ELSE KT.MOUSE.MouseMB = 0
END FUNCTION
FUNCTION KT.MOUSE.MouseRB
DIM Regs AS RegType
Regs.ax = 5
Regs.bx = 1
INTERRUPT &H33, Regs, Regs
IF Regs.ax AND 2 THEN KT.MOUSE.MouseRB = NOT(0) ELSE KT.MOUSE.MouseRB = 0
END FUNCTION
SUB KT.MOUSE.SetPos (NewX AS INTEGER, NewY AS INTEGER)
DIM Regs AS RegType
Regs.ax = 4
Regs.cx = NewX * 2
Regs.dx = NewY
INTERRUPT &H33, Regs, Regs
END SUB
SUB KT.MOUSE.SetRange (MinX AS INTEGER, MinY AS INTEGER, MaxX AS INTEGER, MaxY AS INTEGER)
DIM Regs AS RegType
Regs.ax = 7
Regs.cx = MinX * 2
Regs.dx = MaxX * 2
INTERRUPT &H33, Regs, Regs 'horizontal
Regs.ax = 8
Regs.cx = MinY
Regs.dx = MaxY
INTERRUPT &H33, Regs, Regs 'vertical
END SUB
SUB KT.MOUSE.SetCursorImage (NewImage AS STRING, HotX AS INTEGER, HotY AS INTEGER)
IF LEN(NewImage) <> 64 THEN EXIT SUB
DIM Regs AS RegTypeX, NewImageZ AS STRING * 64
NewImageZ = NewImage
Regs.ax = 9
Regs.bx = HotX
Regs.cx = HotY
Regs.es = -1
Regs.dx = VARPTR(NewImageZ)
INTERRUPTX &H33, Regs, Regs
END SUB
SUB KT.MOUSE.SetTextCursorImage (ScreenChar AS INTEGER, MaskChar AS INTEGER)
DIM Regs AS RegType
Regs.ax = &HA
Regs.bx = 0
Regs.cx = ScreenChar
Regs.dx = MaskChar
INTERRUPT &H33, Regs, Regs
END SUB
SUB KT.MOUSE.SetSensitivity (MickeysPerPixelHorizontal AS INTEGER, MickeysPerPixelVertical AS INTEGER)
'default = 8 and 16 (hor and ver)
DIM Regs AS RegType
Regs.ax = 15
Regs.cx = MickeysPerPixelHorizontal
Regs.dx = MickeysPerPixelVertical
INTERRUPT &H33, Regs, Regs
END SUB
It supports mouse, crappy mode 13h gfx and an AI.
P.S. you can only win with Cross on 1 way, try to find how to win