
-----------------------------------
miller6
Wed Jan 13, 2010 11:27 am

Brick Breaker Help
-----------------------------------
I am trying to make the game brick breaker on turing but am having problems with the whole ball hitting and rebounding off the sliding bar off the bottom.  i was thinking collision detection but am confused , PLEASE HELP

this is what i have so far:

setscreen ("nocursor")
setscreen ("graphics:vga")

var WinId : int
var ch : string (1) % box move
const right := chr (203) % box move
const left := chr (205) % box move
var counter : int := 10 % counter for the bow moving
var x := 0 % drop sflake

WinId := Window.Open ("position:centre;centre,graphics:1010;695")
drawfillbox (1, 1, maxx, maxy, 255)

var sflake : int := Pic.FileNew ("sflake.gif")
% Pic.Draw (sflake, 0, 100, picMerge)

var box : int := Pic.FileNew ("box2.bmp")



drawfillbox (500, 500, 625, 520, 5)
drawfillbox (500, 400, 625, 420, 5)
drawfillbox (550, 450, 675, 470, 5)
drawfillbox (550, 550, 675, 570, 5)

drawfillbox (320, 500, 445, 520, 5)
drawfillbox (375, 550, 500, 570, 5)
drawfillbox (320, 400, 445, 420, 5)
drawfillbox (375, 450, 500, 470, 5)

drawfillbox (210, 550, 335, 570, 5)
drawfillbox (210, 450, 335, 470, 5)
drawfillbox (160, 500, 285, 520, 5)
drawfillbox (160, 400, 285, 420, 5)

drawfillbox (720, 550, 845, 570, 5)
drawfillbox (665, 500, 790, 520, 5)
drawfillbox (665, 400, 790, 420, 5)
drawfillbox (720, 450, 845, 470, 5)

process movesflake (sflake : int)
    for decreasing y : 200 .. 0
        x := x + 1
        Pic.Draw (sflake, x, y, picMerge)
        delay (35)
        Pic.Draw (sflake, x, y, picXor)
    end for
   
end movesflake

Pic.Draw (box, 1, 1, picCopy)

process movebox (box : int)
    loop
        getch (ch)
        if ch = right then
            counter := counter - 10
            % Pic.Draw (box, counter + 10, 1, picCopy)
        elsif ch = chr (205) then
            counter := counter + 10
            % Pic.Draw (box, counter - 10, 1, picCopy)
        end if
        Pic.Draw (box, counter, 1, picCopy)
    end loop
end movebox

fork movesflake (sflake)
fork movebox (box)

-----------------------------------
DemonWasp
Wed Jan 13, 2010 4:34 pm

RE:Brick Breaker Help
-----------------------------------
Please fill out the template provided properly next time. This makes it easier for us to help you, which means it's more likely that we will help you.

You need to detect when the ball has collided with the top surface of the box (which is a line segment) and then reverse its vertical direction. You probably do not need to handle collisions with the side of the box, as the ball is going off the screen anyway.

-----------------------------------
miller6
Wed Jan 13, 2010 5:51 pm

Re: Brick Breaker Help
-----------------------------------
I am sorry, still learning how to use the templates!

So would i have to construct a line segment on top of the box and have it move the same way as the box does, and then use collision detection?

-----------------------------------
DemonWasp
Wed Jan 13, 2010 6:03 pm

RE:Brick Breaker Help
-----------------------------------
You don't have to draw it, and you already know everything you need to know about it (its location).

You literally only have to test whether the bottom of the ball is below the top of the box and whether the ball's X coordinate is within the area occupied by the box. Draw it out on paper if you still don't understand, it'll make it easier (I promise - I draw stuff out on paper when coding pretty frequently).

-----------------------------------
miller6
Wed Jan 13, 2010 6:14 pm

Re: Brick Breaker Help
-----------------------------------
okay, so once i have the collision detection statement, how am i able to make it so that it bouces back up at a different angle?




if x + 59 >= counter and x 