-----------------------------------
thoughtful
Sat Oct 11, 2003 1:36 am
help with pool
-----------------------------------
Hello,
I am trying to make a pool game for my isp. So far i saw Tony's tutorial. I wrote this code from it. It is supposed to have one ball moving at the start. When the first one hits a second ball, the firs tone stops and the second one starts moving. Now my balls dont move at all. If some one can help me with this, or even show me another way, to make pool, ill be grateful.
====Code Starts====
var balls_x : array 1 .. 7 of int
var balls_y : array 1 .. 7 of int
var balls_xsp : array 1 .. 7 of int %ball speeds
var balls_ysp : array 1 .. 7 of int
var distance : real
balls_x(1):=0
balls_y(1):=0
balls_xsp(1):=5
balls_ysp(1):=5
for i:2..7
balls_x(i):=Rand.Int(10,(maxx-10))
balls_y(i):=Rand.Int(10,(maxy-10))
balls_xsp(i):=0
balls_ysp(i):=0
end for
loop
for i : 1 .. 7
%movement of balls
balls_x (i) += balls_xsp(i)
balls_y (i) += balls_ysp(i)
end for
for i : 1 .. 7
for k : 1 .. 7
if i not= k then
%calculating distance between
distance := ((balls_x (i) - balls_x (k)) * (balls_x (i) - balls_x (k)) + (balls_y (i) - balls_y (k)) * (balls_y (i) - balls_y (k))) ** 0.5
if distance < 10 %if collision
then
balls_xsp (i) := round ((balls_x (k) * balls_x (k) + balls_y (k) * balls_y (k)) ** 0.5 * ((balls_x (i) - balls_x (k)) / (balls_x (i) - balls_x (k) + balls_y (i) - balls_y (k))))
balls_ysp (i) := round ((balls_x (k) * balls_x (k) + balls_y (k) * balls_y (k)) ** 0.5 * ((balls_y (i) - balls_y (k)) / (balls_x (i) - balls_x (k) + balls_y (i) - balls_y (k))))
balls_xsp (k) := 0 %first ball instantly stops, though in fact it should hit back with
balls_ysp (k) := 0 %atleast some energy... but we live in a perfect world :wink:
end if
end if
end for
end for
for i : 1 .. 7 %for the walls
if balls_x (i) < 10 then
balls_xsp (i) -= balls_xsp (i)
end if
if balls_y (i) < 10 then
balls_ysp (i) -= balls_ysp (i)
end if
if balls_x (i) > (maxx - 10) then
balls_xsp (i) -= balls_xsp (i)
end if
if balls_y (i) > (maxy - 10) then
balls_ysp (i) -= balls_ysp (i)
end if
end for
for i : 1 .. 7
drawfilloval (balls_x (i), balls_y (i), 10, 10, i)
end for
end loop
====Code Ends====
-----------------------------------
Tony
Sat Oct 11, 2003 2:44 pm
-----------------------------------
well if you set your vector to 10,10 (instead of 5,5) it starts moving. I'm not too sure why though...
Ether way... some things to consider changing:
if balls_x (i) < 10 then
balls_xsp (i) -= balls_xsp (i)
end if
for wall collisions... This would with success stop the ball. When you subtract itself from something, you get 0 :shock: It should be
balls_xsp(i) *= -1
Invert the value, make it go the other way.
There's something defenatly wrong with the collision. The other ball just FLIES though the table :?
Another thing to consider... with the velocity of over 10, the ball can jump over another ball... You might have to move all the balls pixel by pixel, and use vecolity to determine friction and delay :?
I'd have to admit, that demo I wrote is far from anything good. It was writen a long time ago...
I think Catalyst wrote a pool game in turing, check out submissions section to make sure.
-----------------------------------
Homer_simpson
Sat Oct 11, 2003 3:17 pm
-----------------------------------
this is one i wrote long time ago... but i got bored and didn't finish it... but u might wanna take a look =/
http://www.compsci.ca/v2/viewtopic.php?t=856&highlight=pool
-----------------------------------
thoughtful
Sat Oct 11, 2003 7:26 pm
WEll..
-----------------------------------
Thnx both of you, well i actually have made pool, in which the balls intercollide & one can shoot the white ball. I havent yet made it so they can fall in the pockets.
Anyways i wanted to know if ne one can tell me an equation to find the real angles,(i.e if the ball hits at a slanted angle the other ball's angle should be different than when it hits at a straight angle)
hope someone know how this can be figured out. I saw tony's tutorial on this, also got his message but couldn't quite get it to work from n e angle. Jus wondering is someone already knows how to do this, else ill have to put my empty head to work
-----------------------------------
Tony
Sat Oct 11, 2003 7:39 pm
-----------------------------------
well the way I figured... you compare change of X and change of Y values between two balls collided.
The balls vecolity is split up between X and Y components at same ratio of the difference of X and Y values.