
-----------------------------------
CITC
Tue Jan 06, 2004 8:41 pm

Bouncing a ball off a semi-circle  ??
-----------------------------------
Hi everyone, first before I ask my question I'd like to say what an AMAZING site this is... truly INCREDIBLE!!!!!!!!!

k, with that being said, I'd like to make a turing version of a game I found on www.addictinggames.com called Slime Volleyball.  If you haven't played it you can check it out here  
  http://tartarus.uwa.edu.au/%7Ewedgey/slime1/       
the biggest problem I have with making this game is that in the game the players are semi-circles (slimes) and the ball bounces off of these semi circles, reflecting appropriately.  I've thought and thought about this, but can't figure out how to do it.  Anyone know how?  

Thanks in advance!!
CITC

-----------------------------------
Maverick
Tue Jan 06, 2004 8:47 pm


-----------------------------------
Slime volleyball kinda sux, you shuld make slime soccer.
I think I know where to get the code for that bouncing thing.
I'll post in a day or two.

-----------------------------------
AsianSensation
Tue Jan 06, 2004 9:10 pm


-----------------------------------
you kinda have to know a bit of physics or at least some math to be able to do this. Tell me what you know about projectiles or parabolas so I can help you out.

-----------------------------------
shorthair
Wed Jan 07, 2004 11:51 am


-----------------------------------
the cheesy way out if you dont know alot about math and physics, is to make arbitraraly mabye 10 different angles so if the ballx = slimex or ballx = slimex + 10 then ........ make your angles , but asian is right there is a proprer way to do it

-----------------------------------
CITC
Wed Jan 07, 2004 5:00 pm


-----------------------------------
hehe Slime soccer was good too. fortunately if i make slime volleyball i can fairly easily change it to slime soccer :-)

as for the math bit, I'm really good at math and physics, but I'm only in Grade 10 (I've taken Gr 10 science but Gr 10 math is next semester).  don't know anything about projectiles or parabalas but tell me and I'll see if i can pick it up. :)
if i can't, I can go with shorthair's suggestion :)

oh yeah also I found the code for that game too but it was in Java and totally confused me

-----------------------------------
Homer_simpson
Wed Jan 07, 2004 8:40 pm


-----------------------------------
that's not a bad game... i kinda like the idea...it's creative and everything, it's actually a good idea to hand in something like that for yer fp...


Any way if u wanna learn to do that... check out my tutorial on projectile physics... basically all u need is the velocity and the angle the ball hit's the player at...

-----------------------------------
Homer_simpson
Wed Jan 07, 2004 10:01 pm


-----------------------------------
in fact i liked the simplicity of the idea so much... i'll give u something to start with...
View.Set ("offscreenonly")
colorback (black)
cls
var time2 := 0

function distance (x1, y1, x2, y2 : real) : real
    result (((x1 - x2) ** 2 + (y1 - y2) ** 2) ** .5)
end distance


var chars : array char of boolean
type projectile_t :
    record
        startx, starty, x, y, angle, weight, velocity : real
    end record

type player_t :
    record
        x, y, w, v, t : real
    end record

var projectile_1 : projectile_t
var player_1 : player_t

player_1.x := 100
player_1.y := 100
player_1.v := 50
player_1.w := 10
player_1.t := 0

projectile_1.startx := 100
projectile_1.starty := 140
projectile_1.velocity := 80
projectile_1.angle := 90
projectile_1.weight := 10
var time1 := 0.0
var bjump_1 := false

procedure Projectile (var obj : projectile_t, t : real)
    obj.x := (obj.velocity * cosd (obj.angle) * t) + obj.startx
    obj.y := (obj.velocity * sind (obj.angle) * t - (obj.weight) * t ** 2 / 2) + obj.starty
end Projectile

procedure Jump (var obj : player_t)
    obj.y := (obj.v * sind (90) * obj.t - (obj.w) * obj.t ** 2 / 2) + 100
    obj.t += .1
end Jump

procedure ResetP (var obj : projectile_t, sx, sy, v, a, w : real)
    projectile_1.startx := sx
    projectile_1.starty := sy
    projectile_1.velocity := v
    projectile_1.angle := a
    projectile_1.weight := w
end ResetP
color (10)
loop
    if round (projectile_1.velocity) > 1 then
        time1 += .1
    else
        player_1.x := 100
        player_1.y := 100
        player_1.v := 50
        player_1.w := 10
        player_1.t := 0
        projectile_1.startx := 100
        projectile_1.starty := 140
        projectile_1.velocity := 80
        projectile_1.angle := 90
        projectile_1.weight := 10
        time1 := 0.0
        locate (10, 10)
        put "eeeshta!"
        cls
        delay (200)
    end if
    Projectile (projectile_1, time1)

    if projectile_1.y < 105 then
        ResetP (projectile_1, projectile_1.x, projectile_1.y, round (projectile_1.velocity / 2), projectile_1.angle, projectile_1.weight)
        time1 := 0
    end if

    if projectile_1.x < 1 then
        ResetP (projectile_1, projectile_1.x, projectile_1.y, round (projectile_1.velocity / 1.3), projectile_1.angle - 90, projectile_1.weight)
        time1 := 0
    end if
    if projectile_1.x > 639 then
        ResetP (projectile_1, projectile_1.x, projectile_1.y, round (projectile_1.velocity / 1.3), projectile_1.angle + 90, projectile_1.weight)
        time1 := 0
    end if

    if projectile_1.y < 210 then
        if projectile_1.x > 310 and projectile_1.x < 320 then
            ResetP (projectile_1, projectile_1.x, projectile_1.y, round (projectile_1.velocity), projectile_1.angle - 90, projectile_1.weight)
            time1 := 0
        end if

        if projectile_1.x < 330 and projectile_1.x > 320 then
            ResetP (projectile_1, projectile_1.x, projectile_1.y, round (projectile_1.velocity), projectile_1.angle + 90, projectile_1.weight)
            time1 := 0
        end if

    end if

    if distance (player_1.x, player_1.y, projectile_1.x, projectile_1.y) < 40 then
        if projectile_1.x not= player_1.x then
            locate (1, 1)
            if arctand ((projectile_1.y - player_1.y) / (projectile_1.x - player_1.x)) < 0 then
                ResetP (projectile_1, projectile_1.x, projectile_1.y, round (projectile_1.velocity), 180 + arctand ((projectile_1.y - player_1.y) / (projectile_1.x - player_1.x)), projectile_1.weight)
            else
                ResetP (projectile_1, projectile_1.x, projectile_1.y, round (projectile_1.velocity), arctand ((projectile_1.y - player_1.y) / (projectile_1.x - player_1.x)), projectile_1.weight)
            end if
        else
            ResetP (projectile_1, projectile_1.x, projectile_1.y, round (projectile_1.velocity), 90, projectile_1.weight)
        end if
        time1 := 0
    end if

    if bjump_1 then
        Jump (player_1)
        if player_1.y < 100 then
            bjump_1 := false
            player_1.t := 0
            player_1.y := 100
        end if
    end if

    Input.KeyDown (chars)
    if chars ('w') then
        bjump_1 := true
    end if
    if chars ('a') then
        player_1.x -= 1
    end if
    if chars ('d') then
        player_1.x += 1
    end if

    drawline (320, 100, 320, 200, yellow)
    drawfilloval (round (player_1.x), round (player_1.y), 30, 30, 9)
    drawfillbox (0, 0, 640, 100, 10)
    drawfilloval (round (projectile_1.x), round (projectile_1.y), 10, 10, 12)
    View.Update
    delay (10)
    drawfilloval (round (player_1.x), round (player_1.y), 30, 30, black)
    drawfilloval (round (projectile_1.x), round (projectile_1.y), 10, 10, black)
    drawline (320, 100, 320, 200, black)
end loop


-----------------------------------
CITC
Thu Jan 08, 2004 7:53 pm


-----------------------------------
wow thanks for that code! I haven't read through much of it yet but from running it in turing it looks like there isn't much else to do.

did you just make this now or was this a slightly altered part of your tutorial that you mentioned?  Also, where can I look at this tutorial?

-----------------------------------
Homer_simpson
Fri Jan 09, 2004 12:16 am


-----------------------------------
well i didn't rewrite parts of the code i already had... :roll:

-----------------------------------
CITC
Sat Jan 10, 2004 11:36 am


-----------------------------------
I've been working on the game and I've added the second player and made the ball bounce off him the same as it does off player 1. 

the thing I don't get is why does the ball bounce oddly off of the walls and net?  It bounces as though it had either a topspin or a backspin (its not just reflected, it will sometimes shoot quickly down or other times shoot pretty horizontally across the screen).  I've been playing around with it but can't find any way to fix it.

-----------------------------------
CITC
Sat Jan 10, 2004 12:40 pm


-----------------------------------
oh and theres one other kinda quirky thing.. sometimes the ball goes inside the slimes and bounces around for a half second or so building up velocity, then shoots out in some wierd direction.

I think I might be able to fix these things if I could understand the ResetP procedure.  What are sx,sy,v,a, and w. I understand what they stand for, but when were they created and what are their values?
