### Author Topic: Pool Nspire  (Read 18901 times)

0 Members and 2 Guests are viewing this topic.

#### Loulou 54

• LV4 Regular (Next: 200)
• Posts: 165
• Rating: +39/-0
##### Pool Nspire
« on: July 23, 2012, 07:25:10 pm »
Hi all !

I've already thought long ago about making a billiard game.. But that seemed too complicated (balls collisions, ...) and TI Basic on TI 89 would have been too slow.. (I didn't know C at this time ! )

But I remembered this idee some days ago and tried with Lua.

I already managed to do the physics which seem quite real !

(Moreover my code worked at the first try !! AMAZING )

I'm now making the gameplay and so on.. Actually, I think there is a lot of work if I want to make a complete game !

A screen ?

EDIT :
- It's a 256 color GIF, so... x)
- There are only 7 balls right now and no hole, but it's coming, obviously !

EDIT 2 : a newer version (but still a bad gif sorry ! ) with 3D !
« Last Edit: July 19, 2013, 07:34:55 pm by Loulou 54 »
Some of my program available here..
http://ti.bank.free.fr/index.php?mod=archives&ac=voir2&id=1471

#### Loulou 54

• LV4 Regular (Next: 200)
• Posts: 165
• Rating: +39/-0
##### Re: Pool Nspire
« Reply #1 on: July 23, 2012, 07:30:34 pm »
First LabyRoll', then Pool, and next...
Some of my program available here..
http://ti.bank.free.fr/index.php?mod=archives&ac=voir2&id=1471

#### Eiyeron

• Urist McEiyolobster
• LV10 31337 u53r (Next: 2000)
• Posts: 1430
• Rating: +130/-10
• (-_(//));
##### Re: Pool Nspire
« Reply #2 on: July 23, 2012, 07:38:35 pm »
Please could you helpme understand the physics o theballs?

#### cyanophycean314

• LV6 Super Member (Next: 500)
• Posts: 363
• Rating: +43/-1
• It's You!
##### Re: Pool Nspire
« Reply #3 on: July 23, 2012, 08:07:28 pm »
That looks really cool, especially the animation of hitting it. Great physics btw!

#### TIfanx1999

• ಠ_ಠ ( ͡° ͜ʖ ͡°)
• CoT Emeritus
• LV13 Extreme Addict (Next: 9001)
• Posts: 6173
• Rating: +191/-9
##### Re: Pool Nspire
« Reply #4 on: July 23, 2012, 09:51:44 pm »
Looks quite nice so far Loulou! =)

• Editor
• LV10 31337 u53r (Next: 2000)
• Posts: 1708
• Rating: +229/-17
##### Re: Pool Nspire
« Reply #5 on: July 24, 2012, 12:17:08 am »
Nice !

Levak and I were actually creating one using physics too x)
(started like 3 days ago)

Edit : 3.2's Physics Engine.
« Last Edit: July 24, 2012, 04:22:30 am by adriweb »
My calculator programs
TI-Nspire Lua programming : Tutorials  |  API Documentation

#### 3rik

• LV3 Member (Next: 100)
• Posts: 92
• Rating: +8/-0
• My TI-84+ SE
##### Re: Pool Nspire
« Reply #6 on: July 24, 2012, 12:21:33 am »
This seems really nice. I look forward to seeing how it turns out.
« Last Edit: July 24, 2012, 08:45:52 am by 3rik »
Userbars

#### Hayleia

• Programming Absol
• Coder Of Tomorrow
• LV12 Extreme Poster (Next: 5000)
• Posts: 3367
• Rating: +393/-7
##### Re: Pool Nspire
« Reply #7 on: July 24, 2012, 02:11:51 am »
But does that use the physics library of the OS 3.2 ?
I own: 83+ ; 84+SE ; 76.fr ; CX CAS ; Prizm ; 84+CSE
Sorry if I answer with something that seems unrelated, English is not my primary language and I might not have understood well. Sorry if I make English mistakes too.

#### Reo

• LV3 Member (Next: 100)
• Posts: 64
• Rating: +15/-0
##### Re: Pool Nspire
« Reply #8 on: July 24, 2012, 03:12:30 am »
Judging by the non-smoothed font, this must be running on 3.1. It looks great.

#### parserp

• Hero Extraordinaire
• LV10 31337 u53r (Next: 2000)
• Posts: 1455
• Rating: +88/-7
• The King Has Returned
##### Re: Pool Nspire
« Reply #9 on: July 24, 2012, 11:45:02 am »
Dude, this is one friggin epic game.
Can't wait for more progress!
ticalc.org | Cemetech | TI-Freakware | casiocalc.org

Spoiler For inactive:
Serving an LDS (Mormon) mission from Dec 2014 - Dec 2016

#### DJ Omnimaga

• Former TI programmer
• CoT Emeritus
• LV15 Omnimagician (Next: --)
• Posts: 55872
• Rating: +3151/-232
• CodeWalrus founder & retired Omnimaga founder
##### Re: Pool Nspire
« Reply #10 on: July 24, 2012, 01:36:19 pm »
Wow looks great . Do you re-use some code from Labyroll, such as the 360° movement and stuff? Can't wait to try it

#### Nick

• LV9 Veteran (Next: 1337)
• Posts: 1166
• Rating: +161/-3
• You just got omnom'd
##### Re: Pool Nspire
« Reply #11 on: July 24, 2012, 01:43:37 pm »
ok, i might be a little (or a lot) slow, but is this made using the physics engine from 3.2? or did you write your own part of colliding code?

#### Loulou 54

• LV4 Regular (Next: 200)
• Posts: 165
• Rating: +39/-0
##### Re: Pool Nspire
« Reply #12 on: July 24, 2012, 02:51:54 pm »
But does that use the physics library of the OS 3.2 ?

No I made all by myself and so it can work on any "Lua supporting OS" !

Nice !

Levak and I were actually creating one using physics too x)
(started like 3 days ago)

Edit : 3.2's Physics Engine.

Really ? ^^
Yes the 3.2's Physics Engine could be usefull for such a project !

Please could you helpme understand the physics o theballs?

Collisions with walls aren't very difficult, but between balls it's kinda complicated..
Each ball is characterized by its coordinates and velocity. (no use to consider any acceleration) So I have a table like this which contains these informations for each ball :
balls={{x1,y1,vx1,vy1},{x2,y2,vx2,vy2},...,{xn,yn,vxn,vyn}}

First of all, you have to consider all couple of balls which could collide and test if they collide. The number of couple is thereby "2 among n". (nCr(n,2), binomial coefficiant)

For example the list of collision for 4 balls is :
{{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}}  (6 collision possibilities = nCr(4,2))

Now, lets consider two balls wich could collide :
ball1 with x1,y1,vx1,vy1
ball2 with x2,y2,vx2,vy2

They collide if (x2-x1)^2+(y2-y1)^2 < (2*r)^2.

If they do, we have to calculate the new velocity of each ball.

By velocity subtraction, we can bring us to a more simple problem with :
- the ball 2 moving at the velocity {vx2-vx1,vy2-vy1}
- the ball 1 wich is immobile.

Now, after thinking, that's how I modeled the behavior of a moving ball hitting an other wich is motionless :

- the direction of the new velocity of the ball 1 is collinear with the vector defined by the center of gravity of each ball. (we will call this vector g2g1)
That's it :

from wikipédia

About the norm of the new velocity of the ball 1 (v1) : if v2 is the velocity of the moving ball (ball 2) and a is the angle between the direction of the vector g2g1 and the vector v :
v1 = v2*cos(a)

Thus, for example, if you hit the ball in the center, g2g1 and v are colinear and cos(a)=1 and the entire velocity of ball 2 is transmitted to the ball 1.
If they touch softly when g2g1 and v are almost perpendicular, ball 1 won't move much.

So we have defined the new velocity of ball 1 and  to have the velocity of ball 2 (the moving ball) you just have to subtract the velocity transmitted to the ball 1.
v2=v2-v2*cos(a)
(I haven't considered loses of power in ball-ball collisions since the coefficient of restitution between two balls is pretty high, and I don't want to do useless calculations..) However I have considered friction with table and a restitution of 75% in a ball-wall collision.

So if we want these results in the case where ball 1 and ball 2 have their own velocity, we can have this result :

v1=v1+norm_v*cos(a)
v2=v2-norm_v*cos(a)
where v1 and v2 are vectors and norm_v = |v2-v1|

and as we want this on x/y, we have :

vx1=vx1+norm_v*cos(a)*cos(b)
vy1=vy1+norm_v*cos(a)*sin(b)
where b is the angle between Ox axis and the vector v1, which is colinear, as we said before, with the vector g2g1.
vx2=vx2-norm_v*cos(a)*cos(b)
vy2=vy2-norm_v*cos(a)*sin(b)

But how to calculate a and b angles ? (actually, cos(a), cos(b) and sin(b))
With the scalar product and so on we can have very good simplifications ! (no cos, no sin, no norm_v )

And here is how looks the program for this part :

Code: [Select]
 gx=boul[combi[i][2]][1]-boul[combi[i][1]][1] gy=boul[combi[i][2]][2]-boul[combi[i][1]][2] norm_g=gx^2 + gy^2 if math.floor(math.sqrt(norm_g)) < 2*r then vx=boul[combi[i][2]][3]-boul[combi[i][1]][3] vy=boul[combi[i][2]][4]-boul[combi[i][1]][4] scal=gx*vx+gy*vy boul[combi[i][1]][3]=boul[combi[i][1]][3]+math.floor(scal*gx/norm_g) -- vx + norm_v*cos((g,v))*cos((Ox,g)) boul[combi[i][1]][4]=boul[combi[i][1]][4]+math.floor(scal*gy/norm_g) -- vy + norm_v*cos((g,v))*sin((Ox,g)) boul[combi[i][2]][3]=boul[combi[i][2]][3]-math.floor(scal*gx/norm_g) boul[combi[i][2]][4]=boul[combi[i][2]][4]-math.floor(scal*gy/norm_g) end
It's a bit confuse but I hope you got some things.. ^^

So this is how I modelized collisions ! I don't know if it's right but it seems to be not bad at all !
« Last Edit: July 24, 2012, 02:57:45 pm by Loulou 54 »
Some of my program available here..
http://ti.bank.free.fr/index.php?mod=archives&ac=voir2&id=1471

#### Loulou 54

• LV4 Regular (Next: 200)
• Posts: 165
• Rating: +39/-0
##### Re: Pool Nspire
« Reply #13 on: July 24, 2012, 03:00:50 pm »
And thanks for compliments !
Some of my program available here..
http://ti.bank.free.fr/index.php?mod=archives&ac=voir2&id=1471

#### apcalc

• The Game
• CoT Emeritus
• LV10 31337 u53r (Next: 2000)
• Posts: 1393
• Rating: +120/-2
• VGhlIEdhbWUh (Base 64 :))
##### Re: Pool Nspire
« Reply #14 on: July 24, 2012, 07:15:01 pm »
Wow, looks great!  Nice work!