Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Programming TicTacToe
#11
See mine:

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
Reply
#12
I won. Very good game for one hour Big Grin
am an asshole. Get used to it.
Reply
#13
I have a very good one on my website .... made by Zuzuf Zu !
http://ToufQb.free.fr
have the simplest tastes of the World : I satisfy myself with the best !

http://ToufQb.free.fr
Reply
#14
crappy one: http://medlem.spray.se/red_marvin
click on cx.zip
my first and only finished game that involved programming :oops:
/post]
Reply
#15
I've got one made by some obscure group of programmers who made it with an unbeatable AI... it'll be on QBNZ when it's up.
Reply
#16
There's no way the AI is unbeatable... I can always at least get a draw if I'm first and most of the time if I'm second. I could probably point you to some disproof somewhere, but I'm too lazy and too uninterested in naughts and crosses to do so. Smile
Reply
#17
Fine... but just download tic tac toe from QBNZ when it's up... it'll kick your ass :wink:

I'll give you a link when QBNZ is up.
Reply
#18
3x3 tic-tac-toe has no sollution. Haven't you seen "War Games"? It is a really good movie Big Grin
SCUMM (the band) on Myspace!
ComputerEmuzone Games Studio
underBASIC, homegrown musicians
[img]http://www.ojodepez-fanzine.net/almacen/yoghourtslover.png[/i
Reply
#19
Quote:3x3 tic-tac-toe has no sollution. Haven't you seen "War Games"? It is a really good movie Big Grin
<-- Has the book version made -after- the movie, interestingly enough.

It's the kind of thing that makes a progger want to go back and live in that golden era...
size=9]"To announce that there must be no criticism of the president, or that we are to stand by the president, right or wrong, is not only unpatriotic and servile, but is morally treasonable to the American public." -- Theodore Roosevelt[/size]
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)