
-----------------------------------
steve_k91
Sat Nov 27, 2004 4:42 pm

Need a little help with checkers....
-----------------------------------
Hey guys,

I'm doing a project for my Grade 10 compsci class and have to build checkers. ive got the board and the peices put  on but i have no clue about how to move the peices... Heres what i have so far... any help you can give would b amazing. 

View.Set ("nocursor,graphics:400;400")
var board : array 1 .. 8, 1 .. 8 of int
% initialize array
for col : 1 .. 8
    for row : 1 .. 8
        board (col, row) := 0
    end for
end for



proc displayboard
    for decreasing row : 8 .. 1
        for col : 1 .. 8
            put board (col, row), " " ..
        end for
        put ""
    end for
end displayboard

for row : 1 .. 8 by 2
    board (row, 1) := 1
end for

for row : 2 .. 8 by 2
    board (row, 2) := 1
end for

for row : 1 .. 8 by 2
    board (row, 3) := 1
end for


for row : 2 .. 8 by 2
    board (row, 6) := 2
end for

for row : 1 .. 8 by 2
    board (row, 7) := 2
end for

for row : 2 .. 8 by 2
    board (row, 8) := 2
end for




proc drawGridbs
    Draw.FillBox (0, 0, 400, 400, 92)
    for col : 0 .. 7
        for row : 0 .. 7
            Draw.FillBox (col * 50 + 2, row * 50 + 2, col * 50 + 49, row *
                50 + 49, black)
        end for
    end for
end drawGridbs

proc drawGridrs

    for col : 0 .. 7 by 2
        for row : 0 .. 7 by 2
            Draw.FillBox (col * 50 + 2, row * 50 + 2, col * 50 + 49, row *
                50 + 49, red)


            for col1 : 1 .. 7 by 2
                for row1 : 1 .. 7 by 2
                    Draw.FillBox (col1 * 50 + 2, row1 * 50 + 2, col1 *
                        50 + 49, row1 * 50 + 49, red)

                end for
            end for
        end for
    end for
end drawGridrs



proc drawpieces
    var clr : int % disck colour
    for col : 1 .. 8
        for row : 1 .. 8

            if board (col, row) = 1 then % red disk
                Draw.FillOval (col * 50 - 25, (row - 1) * 50 + 25, 20, 20,
                    blue)
            end if
            if board (col, row) = 2 then % black disk
                Draw.FillOval (col * 50 - 25, (row - 1) * 50 + 25, 20, 20,
                    green)
            end if
            %draw disk



        end for
    end for

end drawpieces

drawGridbs
drawGridrs
drawpieces
%displayboard




thanks again guys

-----------------------------------
Delos
Sat Nov 27, 2004 5:06 pm


-----------------------------------
Ok, you seem to have the right idea regarding array usage.  Now you need to find out a bit about Mouse. commands:
Mouse.Where()
Mouse.ButtonChoose()
etc etc.

Then you'll want to set up a nice procedure that allows the User to click on an individual tile, check to see what's in it, if it's a piece, allow for movement (i.e., clicking on another tile).

You'll want to look up types and records too, it will make using the tile concept a lot easier (basically you'll be packaging objects with varying, repeating characteristics together).

[url=http://www.compsci.ca/v2/viewtopic.php?t=2325]Records by Dodge

-----------------------------------
Cervantes
Sat Nov 27, 2004 5:15 pm


-----------------------------------
[url=http://www.compsci.ca/v2/viewtopic.php?t=1104]this thread might help, though it becomes useless once dodge starts worshipping Catalyst.  :?

-----------------------------------
steve_k91
Sat Nov 27, 2004 7:17 pm


-----------------------------------
Thanks allot guys

ive figured out the procedure for that allows the User to click on an individual tile, check to see what's in it and if it's a piece, allow for movement. 

but exactly how do i move it using the array?

-----------------------------------
Cervantes
Sat Nov 27, 2004 7:28 pm


-----------------------------------
well, if you've got the part to check if it's within movement distance:

board (NewPieceXAsDeterminedByTheMouse, NewPieceYAsDeterminedByTheMouse) := board (clickedPieceX, clickedPieceY)
board (clickedPieceX, clickedPieceY) := 0 %for empty

that's one way of doing it.

-----------------------------------
SuperGenius
Sat Nov 27, 2004 11:09 pm


-----------------------------------
you'll also have to check that they're not trying to move the checker off the edge of the board or that they are trying to move it to a square that already has a checker in it. One thing at a time though.

-----------------------------------
wtd
Sat Nov 27, 2004 11:27 pm


-----------------------------------
One thought... a square on the board can be either red or black.  This could be represented by a boolean.  Also, it can either be occupied or not.  Another boolean.

type Square : 
   record
      black, occupied : boolean
   end record

var board : array 1 .. 8, 1 .. 8 of Square

procedure initBoard
   % code to set up the initial state of each square
end initBoard

-----------------------------------
steve_k91
Sun Nov 28, 2004 1:24 pm


-----------------------------------
thanks allot guys... that really helped... ill post the final program once im done
