Computer Science Canada

collision help

Author:  shoobyman [ Wed Oct 04, 2006 8:02 am ]
Post subject:  collision help

code:
setscreen ("offscreenonly")
var x, y, button : int
var plx, ply, plhealth, explx, exply, expls : int
var bulx, buly, speed : array 1 .. 10 of int
var explosion : boolean := false
plhealth := 600
bulx (1) := 0
buly (1) := 100
bulx (2) := 0
buly (2) := 200
bulx (3) := 0
buly (3) := 300
bulx (4) := 0
buly (4) := 400
bulx (5) := 0
buly (5) := 500
bulx (6) := 100
buly (6) := 0
bulx (7) := 250
buly (7) := 0
bulx (8) := 300
buly (8) := 0
bulx (9) := 400
buly (9) := 0
bulx (10) := 500
buly (10) := 0
speed (1) := 3
speed (2) := 4
speed (3) := 5
speed (4) := 6
speed (5) := 7
speed (6) := 4
speed (7) := 5
speed (8) := 6
speed (9) := 7
speed (10) := 4
expls := 1

loop
    if bulx (1) > maxx then
        bulx (1) := -50
        randint (buly (1), 20, maxy - 20)
        randint (speed (1), 3, 7)
    end if
    if bulx (2) > maxx then
        bulx (2) := -50
        randint (buly (2), 20, maxy - 20)
        randint (speed (2), 3, 7)
    end if
    if bulx (3) > maxx then
        bulx (3) := -50
        randint (buly (3), 20, maxy - 20)
        randint (speed (3), 3, 7)
    end if
    if bulx (4) > maxx then
        bulx (4) := -50
        randint (buly (4), 20, maxy - 20)
        randint (speed (4), 3, 7)
    end if
    if bulx (5) > maxx then
        bulx (5) := -50
        randint (buly (5), 20, maxy - 20)
        randint (speed (5), 3, 7)
    end if
    if buly (6) > maxy then
        buly (6) := -50
        randint (bulx (6), 20, maxx - 20)
        randint (speed (6), 3, 7)
    end if
    if buly (7) > maxy then
        buly (7) := -50
        randint (bulx (7), 20, maxx - 20)
        randint (speed (7), 3, 7)
    end if
    if buly (8) > maxy then
        buly (8) := -50
        randint (bulx (8), 20, maxx - 20)
        randint (speed (8), 3, 7)
    end if
    if buly (9) > maxy then
        buly (9) := -50
        randint (bulx (9), 20, maxx - 20)
        randint (speed (9), 3, 7)
    end if
    if buly (10) > maxy then
        buly (10) := -50
        randint (bulx (10), 20, maxx - 20)
        randint (speed (10), 3, 7)
    end if


    mousewhere (x, y, button)
    View.Update
    delay (20)
    cls
    drawfillbox (10, 10, plhealth, 17, 12)
    drawfilloval (x, y, 10, 10, black)
    drawline (bulx (1), buly (1), bulx (1) - 20, buly (1), 7)
    drawline (bulx (2), buly (2), bulx (2) - 20, buly (2), 7)
    drawline (bulx (3), buly (3), bulx (3) - 20, buly (3), 7)
    drawline (bulx (4), buly (4), bulx (4) - 20, buly (4), 7)
    drawline (bulx (5), buly (5), bulx (5) - 20, buly (5), 7)
    drawline (bulx (6), buly (6), bulx (6), buly (6) - 20, 7)
    drawline (bulx (7), buly (7), bulx (7), buly (7) - 20, 7)
    drawline (bulx (8), buly (8), bulx (8), buly (8) - 20, 7)
    drawline (bulx (9), buly (9), bulx (9), buly (9) - 20, 7)
    drawline (bulx (10), buly (10), bulx (10), buly (10) - 20, 7)

    bulx (1) += speed (1)
    bulx (2) += speed (2)
    bulx (3) += speed (3)
    bulx (4) += speed (4)
    bulx (5) += speed (5)
    buly (6) += speed (6)
    buly (7) += speed (7)
    buly (8) += speed (8)
    buly (9) += speed (9)
    buly (10) += speed (10)
    if x > bulx (1) - 30 and x < bulx (1) + 10 and y > buly (1) - 10 and y < buly (1) + 10 then
        explosion := true
        plhealth -= 10
    end if
    if x > bulx (2) - 30 and x < bulx (2) + 10 and y > buly (2) - 10 and y < buly (2) + 10 then
        explosion := true
        plhealth -= 10
    end if
    if x > bulx (3) - 30 and x < bulx (3) + 10 and y > buly (3) - 10 and y < buly (3) + 10 then
        explosion := true
        plhealth -= 10
    end if
    if x > bulx (4) - 30 and x < bulx (4) + 10 and y > buly (4) - 10 and y < buly (4) + 10 then
        explosion := true
        plhealth -= 10
    end if
    if x > bulx (5) - 30 and x < bulx (5) + 10 and y > buly (5) - 10 and y < buly (5) + 10 then
        explosion := true
        plhealth -= 10
    end if

    if explosion = true then
        explx := x - 7
        exply := y
        drawfilloval (explx, exply, expls, expls, yellow)
        expls += 1
    end if
    if expls >= 13 then
        explosion := false
        expls := 1
    end if
    if plhealth <= 0 then
        quit
    end if
end loop




Someone help me make a collision between lines.
I want it so that if the lines crash into each other, it creates a little explosion, someone help.
(btw, i just need to know how to do it efficiently)

Author:  do_pete [ Wed Oct 04, 2006 8:33 am ]
Post subject: 

There is a function in the Math module that will allow you to do this. Sorry I can't tell you what this function is called because I don't have a new version of Turing on hand. By the way, you might also want to look into for loops. This will save you a lot of lines so that instead of:
code:
    if bulx (1) > maxx then
        bulx (1) := -50
        randint (buly (1), 20, maxy - 20)
        randint (speed (1), 3, 7)
    end if
    if bulx (2) > maxx then
        bulx (2) := -50
        randint (buly (2), 20, maxy - 20)
        randint (speed (2), 3, 7)
    end if
    if bulx (3) > maxx then
        bulx (3) := -50
        randint (buly (3), 20, maxy - 20)
        randint (speed (3), 3, 7)
    end if
    if bulx (4) > maxx then
        bulx (4) := -50
        randint (buly (4), 20, maxy - 20)
        randint (speed (4), 3, 7)
    end if
    if bulx (5) > maxx then
        bulx (5) := -50
        randint (buly (5), 20, maxy - 20)
        randint (speed (5), 3, 7)
    end if
    if buly (6) > maxy then
        buly (6) := -50
        randint (bulx (6), 20, maxx - 20)
        randint (speed (6), 3, 7)
    end if
    if buly (7) > maxy then
        buly (7) := -50
        randint (bulx (7), 20, maxx - 20)
        randint (speed (7), 3, 7)
    end if
    if buly (8) > maxy then
        buly (8) := -50
        randint (bulx (8), 20, maxx - 20)
        randint (speed (8), 3, 7)
    end if
    if buly (9) > maxy then
        buly (9) := -50
        randint (bulx (9), 20, maxx - 20)
        randint (speed (9), 3, 7)
    end if
    if buly (10) > maxy then
        buly (10) := -50
        randint (bulx (10), 20, maxx - 20)
        randint (speed (10), 3, 7)
    end if

You can have:
code:
for bulletNumber: 1..10
    if buly (bulletNumber) > maxy then
        buly (bulletNumber) := -50
        randint (bulx (bulletNumber), 20, maxx - 20)
        randint (speed (bulletNumber), 3, 7)
    end if
end for

Author:  shoobyman [ Wed Oct 04, 2006 9:46 am ]
Post subject: 

thanx, the for makes the code much better, but i still need to make collision between lines, some1 help?

Author:  Clayton [ Wed Oct 04, 2006 12:37 pm ]
Post subject: 

check into collision detection in the Turing Walkthrough

Author:  do_pete [ Thu Oct 05, 2006 9:52 am ]
Post subject: 

You can try and use for loops for htis or you can use Math.DistancePointLine.


: