
-----------------------------------
Dennis Du
Fri Dec 26, 2014 4:39 pm

Who can hellp me to fix my code for Tic Tac Toe?????
-----------------------------------
Who can help me to fix this code for the turing, I don't know how to make a clear thick lines and clear exit. THX~~ :wink: 

And this is my code:


setscreen ("graphics: 600; 600")
var player1, player2 : string %two players' name
var playerturn : boolean := true %determining turns
var iCount : int := 0 %counting squares used for ties
var botleftX, botmidX, botrightX, midleftX, midmidX, midrightX, topleftX, topmidX, toprightX : boolean := false 
%top row, middle row and bottom row O's
var botleftO, botmidO, botrightO, midleftO, midmidO, midrightO, topleftO, topmidO, toprightO : boolean := false 
var iExit : int := 0 %exiting when there is a winner
var x, y, button : int %Mouse.Where.locate (20, 30)
var font, fontWins : int %font

font := Font.New ("Times New Roman:14:bold")
fontWins := Font.New ("Times New Roman:12")  
put "X Starts First" 
locate (1, 25) 
put "Enter name of player 1" 
locate (2, 25) 
get player1 
locate (3, 25) 
put "Enter name of player 2" 
locate (4, 25) 
get player2 
cls
procedure Gameboard %Draws the gameboard 
    drawline (200, 600, 200, 0, black) %Left Vertical Line 
    drawline (400, 600, 400, 0, black) %Right Vertical line
    drawline (0, 200, 600, 200, black) %Bottom horizontal line 
    drawline (0, 400, 600, 400, black) %Top horizontal line 
end Gameboard 
Gameboard %Displays the gameboard% 
%Background colours for gameboard% 
drawfillbox (0, 0, 200, 200, 11) %1
drawfillbox (200, 0, 400, 200, 53) %2
drawfillbox (400, 0, 600, 200, 11) %3
drawfillbox (0, 200, 200, 400, 53) %4
drawfillbox (200, 200, 400, 400, 11) %5
drawfillbox (400, 200, 600, 400, 53) %6
drawfillbox (0, 400, 200, 600, 11) %7
drawfillbox (200, 400, 400, 600, 53) %8
drawfillbox (400, 400, 600, 600, 11) %9
%All 'X' on the gameboard% 
procedure BottomLeftX     %Drawing X in the bottom left box 
    drawline (0, 200, 200, 0, 9) 
    drawline (200, 200, 0, 0, 9) 
end BottomLeftX
procedure BottomMiddleX %Drawing X in the bottom middle box 
    drawline (200, 200, 400, 0, 9) 
    drawline (400, 200, 200, 0, 9) 
end BottomMiddleX 
procedure BottomRightX %Drawing X in the bottom right box 
    drawline (400, 200, 600, 0, 9) 
    drawline (600, 200, 400, 0, 9) 
end BottomRightX 
procedure MiddleLeftX %Drawing X in the center left box 
    drawline (0, 400, 200, 200, 9) 
    drawline (200, 400, 0, 200, 9) 
end MiddleLeftX 
procedure MiddleMiddleX %Drawing X in the center middle box 
    drawline (200, 400, 400, 200, 9) 
    drawline (400, 400, 200, 200, 9) 
end MiddleMiddleX 
procedure MiddleRightX %Drawing X in the center right box 
    drawline (400, 400, 600, 200, 9) 
    drawline (400, 200, 600, 400, 9) 
end MiddleRightX 
procedure TopLeftX %Drawing X in the top left box 
    drawline (0, 600, 200, 400, 9) 
    drawline (0, 400, 200, 600, 9) 
end TopLeftX 
procedure TopMiddleX %Drawinf X in the top middle box 
    drawline (200, 600, 400, 400, 9) 
    drawline (200, 400, 400, 600, 9) 
end TopMiddleX 
procedure TopRightX %Drawing X in the top right box 
    drawline (400, 600, 600, 400, 9) 
    drawline (400, 400, 600, 600, 9) 
end TopRightX 
%All O on the gameboard 
procedure BottomLeftO %Drawing O in the bottom left box 
    drawoval (100, 100, 75, 75, black) 
end BottomLeftO 
procedure BottomMiddleO %Drawing O in the bottom middle box 
    drawoval (300, 100, 75, 75, black) 
end BottomMiddleO 
procedure BottomRightO %Drawing O in the bottom right box 
    drawoval (500, 100, 75, 75, black) 
end BottomRightO 
procedure MiddleLeftO %Drawing O in the center left box 
    drawoval (100, 300, 75, 75, black) 
end MiddleLeftO 
procedure MiddleMiddleO %Drawing O in the center middle box 
    drawoval (300, 300, 75, 75, black) 
end MiddleMiddleO 
procedure MiddleRightO %Drawing O in the center right box 
    drawoval (500, 300, 75, 75, black) 
end MiddleRightO 
procedure TopLeftO %Drawing O in the top left box 
    drawoval (100, 500, 75, 75, black) 
end TopLeftO 
procedure TopMiddleO %Drawing O in the top middle box
    drawoval (300, 500, 75, 75, black) 
end TopMiddleO 
procedure TopRightO %Drawing O in the top right box
    drawoval (500, 500, 75, 75, black) 
end TopRightO 
%Procedures for each box on the board being clicked on
procedure BotLeftBox 
    loop 
        %Draws an X when it's player1 turn and the box has nothing in it 
        if playerturn = true and button = 1 and botleftX = false and botleftO = false then 
            BottomLeftX %Calls on the drawing of X in the bottom left box 
            botleftX := true %Makes the box true, filling it with an X" 
            playerturn := not playerturn %Switches to the other player's turn
            iCount := iCount + 1 %Adds 1 to the counter to check for ties% 
            %Draws an O when it is player2 turn and the box has nothing in it
        elsif playerturn = false and button = 1 and botleftX = false and botleftO = false then 
            BottomLeftO %Calls on the procedure of drawing O in the bottom  left box
            botleftO := true %Makes the box true, filling it with an O
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when botleftX = true or botleftO = true %Exits the loop when one of these boxes true meaning it is filled
    end loop 
end BotLeftBox 
procedure BotMidBox 
 loop 
        if playerturn = true and button = 1 and botmidX = false and botmidO = false then 
            BottomMiddleX 
            botmidX := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        elsif playerturn = true and button = 1 and botmidX = false and botmidO = false then 
            BottomMiddleO 
            botmidO := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when botmidX = true or botmidO = true  
    end loop 
end BotMidBox 
procedure BotRightBox 
    loop 
        if playerturn = true and button = 1 and botrightX = false and botrightO = false then 
            BottomRightX 
            botrightX := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        elsif playerturn = false and button = 1 and botrightX = false and botrightO = false then 
            BottomRightO 
            botrightO := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when botrightX = true or botrightO = true 
    end loop 
end BotRightBox 
procedure MidLeftBox 
    loop 
        if playerturn = true and button = 1 and midleftX = false and midleftO = false then 
            MiddleLeftX 
            midleftX := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        elsif playerturn = false and button = 1 and midleftX = false and midleftO = false then 
            MiddleLeftO 
            midleftO := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when midleftX = true or midleftO = true 
    end loop 
end MidLeftBox 
procedure MidMidBox 
    loop 
        if playerturn = true and button = 1 and midmidX = false and midmidO = false then 
            MiddleMiddleX 
            midmidX := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        elsif playerturn = false and button = 1 and midmidX = false and midmidO = false then 
            MiddleMiddleO 
            midmidO := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when midmidX = true or midmidO = true 
    end loop 
end MidMidBox 
procedure MidRightBox 
    loop 
        if playerturn = true and button = 1 and midrightX = false and midrightO = false then 
            MiddleRightX 
            midrightX := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        elsif playerturn = false and button = 1 and midrightX = false and midrightO = false then 
            MiddleRightO 
            midrightO := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when midrightX = true or midrightO = true 
    end loop 
end MidRightBox 
procedure TopLeftBox 
    loop 
        if playerturn = true and button = 1 and topleftX = false and topleftO = false then 
            TopLeftX 
            topleftX := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        elsif playerturn = false and button = 1 and topleftX = false and topleftO = false then 
            TopLeftO 
            topleftO := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when topleftX = true or topleftO = true 
    end loop 
end TopLeftBox 
procedure TopMidBox 
    loop 
        if playerturn = true and button = 1 and topmidX = false and topmidO = false then 
            TopMiddleX 
            topmidX := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        elsif playerturn = false and button = 1 and topmidX = false and topmidO = false then 
            TopMiddleO 
            topmidO := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when topmidX = true or topmidO = true 
    end loop 
end TopMidBox 
procedure TopRightBox 
    loop 
        if playerturn = true and button = 1 and toprightX = false and toprightO = false then 
            TopRightX 
            toprightX := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        elsif playerturn = false and button = 1 and toprightX = false and toprightO = false then 
            TopRightO 
            toprightO := true 
            playerturn := not playerturn 
            iCount := iCount + 1 
        end if 
        exit when toprightX = true or toprightO = true 
    end loop 
end TopRightBox  
%Identifies whose turn it is
procedure TakeTurns 
    if playerturn = true then 
        locate (1, 25) 
        put "It is ", player1, "'s turn" 
    elsif playerturn = false then 
        locate (1, 25) 
        put "It is ", player2, "'s turn" 
    end if 
end TakeTurns 
%All possibilities that X can win
procedure XWinsLine 
    loop 
        %Horizontal win with 3 X
        if botleftX = true and botmidX = true and botrightX = true then 
            Draw.ThickLine (0, 100, 600, 100, 10, black) %Draws line to show 3 straight X
            iExit := 1 
        elsif topleftX = true and topmidX = true and toprightX = true then  
            Draw.ThickLine (0, 500, 600, 500, 10, black) 
            iExit := 1 
        elsif midleftX = true and midmidX = true and midrightX = true then 
            Draw.ThickLine (0, 300, 600, 300, 10, black) 
            iExit := 1
            %Diagonal win with 3 X
        elsif botleftX = true and midmidX = true and toprightX = true then 
            Draw.ThickLine (0, 0, 600, 600, 10, black) 
            iExit := 1
        elsif botrightX = true and midmidX = true and topleftX = true then  
            Draw.ThickLine (0, 600, 600, 0, 10, black)
            iExit := 1 
            %Vertical win with 3 X 
        elsif botleftX = true and midleftX = true and topleftX = true then 
            Draw.ThickLine (100, 0, 100, 600, 10, black) 
            iExit := 1
        elsif botmidX = true and midmidX = true and topmidX = true then 
            Draw.ThickLine (300, 0, 300, 600, 10, black) 
            iExit := 1
        elsif botrightX = true and midrightX = true and toprightX = true then 
            Draw.ThickLine (500, 0, 500, 600, 10, black) 
            iExit := 1
        end if 
    end loop 
end XWinsLine 
procedure OWinsLine 
    %Horizontal win with 3 O 
    if botleftO = true and botmidO = true and botrightO = true then 
        Draw.ThickLine (0, 100, 600, 100, 10, black) %Draws line to show 3 straight O 
        iExit := 2
    elsif topleftO = true and topmidO = true and toprightO = true then 
        Draw.ThickLine (0, 500, 600, 500, 10, black) 
        iExit := 2
    elsif midleftO = true and midmidO = true and midrightO = true then 
        Draw.ThickLine (0, 300, 600, 300, 10, black) 
        iExit := 2
        %Diagonal win with 3 O 
    elsif botleftO = true and midmidO = true and toprightO = true then 
        Draw.ThickLine (0, 600, 600, 0, 10, black) 
        iExit := 2
    elsif botrightO = true and midmidO = true and topleftO = true then 
        Draw.ThickLine (0, 0, 600, 600, 10, black) 
        iExit := 2
        %Vertical win with 3 O 
    elsif botleftO = true and midleftO = true and topleftO = true then 
        Draw.ThickLine (100, 0, 100, 600, 10, black) 
        iExit := 2
    elsif botmidO = true and midmidO = true and topmidO = true then 
        Draw.ThickLine (300, 0, 300, 600, 10, black) 
        iExit := 2
    elsif botrightO = true and midrightO = true and toprightO = true then 
        Draw.ThickLine (500, 0, 500, 600, 10, black) 
        iExit := 2
    end if 
end OWinsLine 
procedure player1winner 
    %Player1 wins with 3 X horizontal
    if botleftX = true and botmidX = true and botrightX = true or 
            midleftX = true and midmidX = true and midrightX = true or 
            topleftX = true and topmidX = true and toprightX = true or 
        %Player1 wins with 3 X vertical 
            botleftX = true and midleftX = true and topleftX = true or 
            botmidX = true and midmidX = true and topmidX = true or 
            botrightX = true and midrightX = true and toprightX = true or 
        %Player1 wins with 3 X diagona
            botleftX = true and midmidX = true and toprightX = true or 
            botrightX = true and midmidX = true and topleftX = true then 
        iExit := 1 
    end if 
end player1winner 
procedure player2winner 
    %Player2 wins with 3 O horizontal
    if botleftO = true and botmidO = true and botrightO = true or 
            midleftO = true and midmidO = true and midrightO = true or 
            topleftO = true and topmidO = true and toprightO = true or 
        %Player2 wins with 3 O vertical 
            botleftO = true and midleftO = true and topleftO = true or 
            botmidO = true and midmidO = true and topmidO = true or 
            botrightO = true and midrightO = true and toprightO = true or 
        %Player2 wins with 3 O diagonal 
            botleftO = true and midmidO = true and toprightO = true or 
            botrightO = true and midmidO = true and topleftO = true then 
        iExit := 2 
    end if 
end player2winner 
%Mousewhere
loop 
    mousewhere (x, y, button) 
    if button = 1 and x > 0 and x < 200 and y > 0 and y < 200 then 
        BotLeftBox %the procedure that draws everything in the box 
        TakeTurns %Displays which player's turn
    elsif button = 1 and x > 200 and x < 400 and y > 0 and y < 200 then 
        BotMidBox 
        TakeTurns 
    elsif button = 1 and x > 400 and x < 600 and y > 0 and y < 200 then 
        BotRightBox 
        TakeTurns 
    elsif button = 1 and x > 0 and x < 200 and y > 200 and y < 400 then 
        MidLeftBox 
        TakeTurns 
    elsif button = 1 and x > 200 and x < 400 and y > 200 and y < 400 then 
        MidMidBox 
        TakeTurns 
    elsif button = 1 and x > 400 and x < 600 and y > 200 and y < 400 then 
        MidRightBox 
        TakeTurns 
    elsif button = 1 and x > 0 and x < 200 and y > 400 and y < 600 then 
        TopLeftBox 
        TakeTurns 
    elsif button = 1 and x > 200 and x < 400 and y > 400 and y < 600 then 
        TopMidBox 
        TakeTurns 
    elsif button = 1 and x > 400 and x < 600 and y > 400 and y < 600 then 
        TopRightBox 
        TakeTurns 
        XWinsLine 
        OWinsLine 
        player1winner 
        player2winner 
    end if 
    exit when iExit = 1 or iExit = 2 or iCount = 9 and iExit = not 1 and iExit = not 2 
end loop
cls
if iExit = 1 then 
    locate (1, 25) 
    put player1, " WINS!!!" 
elsif iExit = 2 then 
    locate (1, 25) 
    put player2, " WINS!!!" 
elsif iCount = 9 then 
    locate (1, 25) 
    put "No one is winner!!!" 
end if
