
-----------------------------------
Ennsy_908
Wed May 30, 2007 8:29 am

Function Check with Tic Tac Toe
-----------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                         Tic Tac Toe                                         %
%                                    Created by: Chris Enns                                   %
%                                          ICS 3M1                                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
setscreen ("graphics 200; 200")
proc GameBoard %Draws Game Board
    Draw.ThickLine (325, 150, 580, 150, 5, 16)  % Bottom Horizontal Line
    Draw.ThickLine (410, 65, 410, 320, 5, 16)  % Left Vertical Line
    Draw.ThickLine (495, 65, 495, 320, 5, 16)  % Right Vertical Line
    Draw.ThickLine (325, 235, 580, 235, 5, 16)  % Top Horizontal Line
end GameBoard
proc XBL % Draws X in bottom left spot
    Draw.ThickLine (335, 140, 400, 70, 3, 12)
    Draw.ThickLine (335, 70, 400, 140, 3, 12)
end XBL

proc XBM % Draws X in bottom middle spot
    Draw.ThickLine (420, 140, 485, 70, 3, 12)
    Draw.ThickLine (420, 70, 485, 140, 3, 12)
end XBM

proc XBR % Draws X in bottom right spot
    Draw.ThickLine (505, 140, 570, 70, 3, 12)
    Draw.ThickLine (505, 70, 570, 140, 3, 12)
end XBR

proc XML % Draws X in middle left spot
    Draw.ThickLine (335, 225, 400, 160, 3, 12)
    Draw.ThickLine (335, 160, 400, 225, 3, 12)
end XML

proc XM % Draws X in middle spot
    Draw.ThickLine (420, 225, 485, 160, 3, 12)
    Draw.ThickLine (420, 160, 485, 225, 3, 12)
end XM

proc XMR % Draws X in middle right spot
    Draw.ThickLine (505, 225, 580, 160, 3, 12)
    Draw.ThickLine (505, 160, 580, 225, 3, 12)
end XMR

proc XTL % Draws X in top left spot
    Draw.ThickLine (335, 315, 400, 245, 3, 12)
    Draw.ThickLine (335, 246, 400, 315, 3, 12)
end XTL

proc XTM % Draws X in top middle spot
    Draw.ThickLine (420, 315, 485, 245, 3, 12)
    Draw.ThickLine (420, 245, 485, 315, 3, 12)
end XTM

proc XTR % Draws X in top right spot
    Draw.ThickLine (505, 315, 580, 245, 3, 12)
    Draw.ThickLine (505, 245, 580, 315, 3, 12)
end XTR

proc OBL % Draw O in bottom left spot
    Draw.Oval (367, 107, 30, 30, blue)
    Draw.Oval (367, 107, 37, 37, blue)
    Draw.Fill (367, 140, blue, blue)
end OBL

proc OBM % Draws O in bottom middle spot
    Draw.Oval (452, 107, 30, 30, blue)
    Draw.Oval (452, 107, 37, 37, blue)
    Draw.Fill (452, 140, blue, blue)
end OBM

proc OBR % Draws O in bottom right spot
    Draw.Oval (537, 107, 30, 30, blue)
    Draw.Oval (537, 107, 37, 37, blue)
    Draw.Fill (537, 140, blue, blue)
end OBR

proc OML % Draws O in middle left spot
    Draw.Oval (367, 192, 30, 30, blue)
    Draw.Oval (367, 192, 37, 37, blue)
    Draw.Fill (367, 223, blue, blue)
end OML

proc OM % Draws O in middle spot
    Draw.Oval (452, 192, 30, 30, blue)
    Draw.Oval (452, 192, 37, 37, blue)
    Draw.Fill (452, 223, blue, blue)
end OM

proc OMR % Draws O in middle right spot
    Draw.Oval (537, 192, 30, 30, blue)
    Draw.Oval (537, 192, 37, 37, blue)
    Draw.Fill (537, 223, blue, blue)
end OMR

proc OTL % Draws O in top left spot
    Draw.Oval (367, 277, 30, 30, blue)
    Draw.Oval (367, 277, 37, 37, blue)
    Draw.Fill (367, 310, blue, blue)
end OTL

proc OTM % Draws O in top middle spot
    Draw.Oval (452, 277, 30, 30, blue)
    Draw.Oval (452, 277, 37, 37, blue)
    Draw.Fill (452, 310, blue, blue)
end OTM

proc OTR % Draws O in top right spot
    Draw.Oval (537, 277, 30, 30, blue)
    Draw.Oval (537, 277, 37, 37, blue)
    Draw.Fill (537, 310, blue, blue)
end OTR

proc DrawX % Draws x in place selected
    var x, y, b, r : int
    loop
        Mouse.Where (x, y, b)

        if b = 1 and x > 325 and x < 410
                and y > 65 and y < 150 then
            XBL

            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 65 and y < 150 then
            XBM
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 65 and y < 150 then
            XBR
            exit when b = 1
        elsif b = 1 and x > 325 and x < 410
                and y > 150 and y < 235 then
            XML
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 150 and y < 235 then
            XM
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 150 and y < 235 then
            XMR
            exit when b = 1
        elsif b = 1 and x > 325 and x < 410
                and y > 235 and y < 320 then
            XTL
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 235 and y < 320 then
            XTM
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 235 and y < 320 then
            XTR
            exit when b = 1
        end if
    end loop
end DrawX

proc DrawO % Draws O in place selected
    var x, y, b : int
    loop
        Mouse.Where (x, y, b)

        if b = 1 and x > 325 and x < 410
                and y > 65 and y < 150 then
            OBL
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 65 and y < 150 then
            OBM
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 65 and y < 150 then
            OBR
            exit when b = 1
        elsif b = 1 and x > 325 and x < 410
                and y > 150 and y < 235 then
            OML
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 150 and y < 235 then
            OM
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 150 and y < 235 then
            OMR
            exit when b = 1
        elsif b = 1 and x > 325 and x < 410
                and y > 235 and y < 320 then
            OTL
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 235 and y < 320 then
            OTM
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 235 and y < 320 then
            OTR
            exit when b = 1
        end if
    end loop
end DrawO

var Check : array 1 .. 3, 1 .. 3 of int := init (0, 0, 0, 0, 0, 0, 0, 0, 0)

function Win : boolean
    for i : 1 .. 3
        if Check (i, 1) not= 0 and Check (i, 1) = Check (i, 2)
                and Check (i, 1) = Check (i, 3) then
            cls
            result true
        end if

        if Check (1, i) not= 0 and Check (1, i) = Check (2, i)
                and Check (1, i) = Check (3, i) then
            put " win 2"
            result true
            end if
            if Check (2, 2) not= 0 and Check (1, 1) = Check (2, 2)
                    and Check (2, 2) = Check (3, 3) then
                put "Win 3"
                result true

            elsif Check (2, 2) not= 0 and Check (1, 3) = Check (2, 2)
                    and Check (2, 2) = Check (3, 1) then
                put " Win 4"
                result true
            end if
            result false
end for
        end Win
        put "X starts"
        put ""
        put "Click were you want to put an X or O"
        delay (500)


        GameBoard
        DrawX
        delay (500)
        DrawO
        delay (500)
        DrawX
        delay (500)
        DrawO
        delay (500)
        DrawX
        delay (500)
        put Win 
        DrawO
        delay (500)
        put Win
        DrawX
        delay (500)
        put Win
        DrawO
        delay (500)
        put Win
        DrawX
        delay (500)
        put Win


I Can't Figure out why the Check Doesn't Work

When I run it it comes up as false

-----------------------------------
Albrecd
Wed May 30, 2007 1:38 pm

Re: Function Check with Tic Tac Toe
-----------------------------------
The reason your check won't work is that you never change the array Check after it is declared.  Every time an X or an O is drawn you need to change the value of the proper element of Check; otherwise, your checking function will always return false.

-----------------------------------
agnivohneb
Wed May 30, 2007 5:01 pm

RE:Function Check with Tic Tac Toe
-----------------------------------
Your program is to complex. I made a Tic Tac Toe game last semester for my ICS 3O1 summative and it is 138 lines, nearly half of what yours is and i added the feature to save and load games, and set usernames. I got 95% on it. Keep working at it. Plan how your going to set up your functions and procedures.

I'm not trying to put you down, just trying to help you make a better program.

At the end of the semester I will post mine (I'm not posting now you will cheat) and we can see who is better.

:)

-----------------------------------
Ennsy_908
Fri Jun 01, 2007 8:45 am

Re: Function Check with Tic Tac Toe
-----------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                         Tic Tac Toe                                         %
%                                    Created by: Chris Enns                                   %
%                                          ICS 3M1                                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
var Check : array 1 .. 3, 1 .. 3 of int := init (0, 0, 0, 0, 0, 0, 0, 0, 0)
var x, y, b : int
% Instructions
put "                                        TicTacToe"
put "The object of the game is to get a row of X's or a row of O's before your"
put "opponent. These rows can be vertical, horizontal, or diagonal. Click Where"
put "                          you want to place an X or an O"
put ""
put "********************************************************************************"
put ""
put " IMPORTANT: DO NOT CLICK WHHERE AN X OR O HAS ALREADY BEEN DRAWN. THIS WILL"
put "           CAUSE AN OVERLAP AND YOU WILL NOT BE ABLE TO FINISH THE GAME"
put ""
put "********************************************************************************"
put ""
put " Click anywhere to play"
loop
    Mouse.Where (x, y, b)
    if b = 1 then
        cls
        exit when b = 1
    end if
end loop
proc GameBoard     %Draws Game Board
    Draw.ThickLine (325, 150, 580, 150, 5, 16)     % Bottom Horizontal Line
    Draw.ThickLine (410, 65, 410, 320, 5, 16)     % Left Vertical Line
    Draw.ThickLine (495, 65, 495, 320, 5, 16)     % Right Vertical Line
    Draw.ThickLine (325, 235, 580, 235, 5, 16)     % Top Horizontal Line
end GameBoard

proc XBL     % Draws X in bottom left spot
    Draw.ThickLine (335, 140, 400, 70, 3, 12)
    Draw.ThickLine (335, 70, 400, 140, 3, 12)
end XBL

proc XBM     % Draws X in bottom middle spot
    Draw.ThickLine (420, 140, 485, 70, 3, 12)
    Draw.ThickLine (420, 70, 485, 140, 3, 12)
end XBM

proc XBR     % Draws X in bottom right spot
    Draw.ThickLine (505, 140, 570, 70, 3, 12)
    Draw.ThickLine (505, 70, 570, 140, 3, 12)
end XBR

proc XML     % Draws X in middle left spot
    Draw.ThickLine (335, 225, 400, 160, 3, 12)
    Draw.ThickLine (335, 160, 400, 225, 3, 12)
end XML

proc XM     % Draws X in middle spot
    Draw.ThickLine (420, 225, 485, 160, 3, 12)
    Draw.ThickLine (420, 160, 485, 225, 3, 12)
end XM

proc XMR     % Draws X in middle right spot
    Draw.ThickLine (505, 225, 580, 160, 3, 12)
    Draw.ThickLine (505, 160, 580, 225, 3, 12)
end XMR

proc XTL     % Draws X in top left spot
    Draw.ThickLine (335, 315, 400, 245, 3, 12)
    Draw.ThickLine (335, 246, 400, 315, 3, 12)
end XTL

proc XTM     % Draws X in top middle spot
    Draw.ThickLine (420, 315, 485, 245, 3, 12)
    Draw.ThickLine (420, 245, 485, 315, 3, 12)
end XTM

proc XTR     % Draws X in top right spot
    Draw.ThickLine (505, 315, 580, 245, 3, 12)
    Draw.ThickLine (505, 245, 580, 315, 3, 12)
end XTR

proc OBL     % Draw O in bottom left spot
    Draw.Oval (367, 107, 30, 30, blue)
    Draw.Oval (367, 107, 37, 37, blue)
    Draw.Fill (367, 140, blue, blue)
end OBL

proc OBM     % Draws O in bottom middle spot
    Draw.Oval (452, 107, 30, 30, blue)
    Draw.Oval (452, 107, 37, 37, blue)
    Draw.Fill (452, 140, blue, blue)
end OBM

proc OBR     % Draws O in bottom right spot
    Draw.Oval (537, 107, 30, 30, blue)
    Draw.Oval (537, 107, 37, 37, blue)
    Draw.Fill (537, 140, blue, blue)
end OBR

proc OML     % Draws O in middle left spot
    Draw.Oval (367, 192, 30, 30, blue)
    Draw.Oval (367, 192, 37, 37, blue)
    Draw.Fill (367, 223, blue, blue)
end OML

proc OM     % Draws O in middle spot
    Draw.Oval (452, 192, 30, 30, blue)
    Draw.Oval (452, 192, 37, 37, blue)
    Draw.Fill (452, 223, blue, blue)
end OM

proc OMR     % Draws O in middle right spot
    Draw.Oval (537, 192, 30, 30, blue)
    Draw.Oval (537, 192, 37, 37, blue)
    Draw.Fill (537, 223, blue, blue)
end OMR

proc OTL     % Draws O in top left spot
    Draw.Oval (367, 277, 30, 30, blue)
    Draw.Oval (367, 277, 37, 37, blue)
    Draw.Fill (367, 310, blue, blue)
end OTL

proc OTM     % Draws O in top middle spot
    Draw.Oval (452, 277, 30, 30, blue)
    Draw.Oval (452, 277, 37, 37, blue)
    Draw.Fill (452, 310, blue, blue)
end OTM

proc OTR     % Draws O in top right spot
    Draw.Oval (537, 277, 30, 30, blue)
    Draw.Oval (537, 277, 37, 37, blue)
    Draw.Fill (537, 310, blue, blue)
end OTR

proc DrawX     % Draws x in place selected

    loop
        Mouse.Where (x, y, b)

        if b = 1 and x > 325 and x < 410
                and y > 65 and y < 150 then
            XBL
            Check (1, 1) := 1
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 65 and y < 150 then
            XBM
            Check (1, 2) := 1
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 65 and y < 150 then
            XBR
            Check (1, 3) := 1
            exit when b = 1
        elsif b = 1 and x > 325 and x < 410
                and y > 150 and y < 235 then
            XML
            Check (2, 1) := 1
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 150 and y < 235 then
            XM
            Check (2, 2) := 1
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 150 and y < 235 then
            XMR
            Check (2, 3) := 1
            exit when b = 1
        elsif b = 1 and x > 325 and x < 410
                and y > 235 and y < 320 then
            XTL
            Check (3, 1) := 1
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 235 and y < 320 then
            XTM
            Check (3, 2) := 1
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 235 and y < 320 then
            XTR
            Check (3, 3) := 1
            exit when b = 1
        end if
    end loop
end DrawX

proc DrawO     % Draws O in place selected
    var x, y, b : int
    loop
        Mouse.Where (x, y, b)

        if b = 1 and x > 325 and x < 410
                and y > 65 and y < 150 then
            OBL
            Check (1, 1) := 2
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 65 and y < 150 then
            OBM
            Check (1, 2) := 2
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 65 and y < 150 then
            OBR
            Check (1, 3) := 2
            exit when b = 1
        elsif b = 1 and x > 325 and x < 410
                and y > 150 and y < 235 then
            OML
            Check (2, 1) := 2
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 150 and y < 235 then
            OM
            Check (2, 2) := 2
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 150 and y < 235 then
            OMR
            Check (2, 3) := 2
            exit when b = 1
        elsif b = 1 and x > 325 and x < 410
                and y > 235 and y < 320 then
            OTL
            Check (3, 1) := 2
            exit when b = 1
        elsif b = 1 and x > 410 and x < 495
                and y > 235 and y < 320 then
            OTM
            Check (3, 2) := 2
            exit when b = 1
        elsif b = 1 and x > 495 and x < 580
                and y > 235 and y < 320 then
            OTR
            Check (3, 3) := 2
            exit when b = 1
        end if
    end loop
end DrawO




function Win : boolean
    for i : 1 .. 3

        if Check (i, 1) not= 0 and Check (i, 1) = Check (i, 2)
                and Check (i, 1) = Check (i, 3) then
            result true
        end if

        if Check (1, i) not= 0 and Check (1, i) = Check (2, i)
                and Check (1, i) = Check (3, i) then
            result true
        end if
        if Check (2, 2) not= 0 and Check (1, 1) = Check (2, 2)
                and Check (2, 2) = Check (3, 3) then
            result true

        elsif Check (2, 2) not= 0 and Check (1, 3) = Check (2, 2)
                and Check (2, 2) = Check (3, 1) then
            result true
        end if
        result false
    end for
end Win

GameBoard
DrawX
delay (500)
DrawO
delay (500)
DrawX
delay (500)
DrawO
delay (500)
DrawX
delay (500)
if Win then
    put " winner"
end if
DrawO
delay (500)
if Win then
    put " winner"
end if
put Win
DrawX
delay (500)
if Win then
    put " winner"
end if
put Win
DrawO
delay (500)
if Win then
    put " winner"
end if
put Win
DrawX
delay (500)
if Win then
    put " winner"
end if
put Win


I am now giving a value to check but now only a few of the checks work and i have no idea how to fix it
