Check out LitDev's November gold medal winner for the Small Basic Guru contest:

Small Basic: Dynamic Graphics

This is also LitDev's first gold medal! So congrats go to LitDev!

Here is an excerpt section from the article...

===============

## Advanced Collisions

To get sprites to bounce off each other realistically can be complicated.  Basically we need to do the collision in a center of mass reference frame using geometry like the figure below, then convert from the center of mass frame back to the actual frame.

This is an example implementation of this in Small Basic.

` `
`Sub ``CollisionCheck`
`  ``For ``i ``= ``1 ``To ``Ball_Number``-``1`
`    ``For ``j ``= ``i``+``1 ``To ``Ball_Number`
`      ``dx ``= ``Ball_X``[``i``] ``- ``Ball_X``[``j``]`
`      ``dy ``= ``Ball_Y``[``i``] ``- ``Ball_Y``[``j``]`
`      ``Distance ``= ``Math``.``SquareRoot``(``dx ``* ``dx ``+ ``dy ``* ``dy``)`
`      ``If ``Distance ``< ``Ball_Diameter ``Then`
`        ``Cx ``= ``(``Ball_vX``[``i``]``+``ball_vX``[``j``]``)``/``2`
`        ``Cy ``= ``(``Ball_vY``[``i``]``+``ball_vY``[``j``]``)``/``2`
`        ``Relative_vX``[``i``] ``= ``Ball_vX``[``i``] ``- ``Cx`
`        ``Relative_vY``[``i``] ``= ``Ball_vY``[``i``] ``- ``Cy`
`        ``Relative_vX``[``j``] ``= ``Ball_vX``[``j``] ``- ``Cx`
`        ``Relative_vY``[``j``] ``= ``Ball_vY``[``j``] ``- ``Cy`
`        ``Nx ``= ``dx ``/ ``Distance`
`        ``Ny ``= ``dy ``/ ``Distance`
`        ``L``[``i``] ``= ``Nx ``* ``Relative_vX``[``i``] ``+ ``Ny ``* ``Relative_vY``[``i``]`
`        ``L``[``j``] ``= ``Nx ``* ``Relative_vX``[``j``] ``+ ``Ny ``* ``Relative_vY``[``j``]`
`        `
`        ``Relative_vX``[``i``] ``= ``Relative_vX``[``i``] ``- ``(``2 ``* ``L``[``i``] ``* ``Nx``)`
`        ``Relative_vY``[``i``] ``= ``Relative_vY``[``i``] ``- ``(``2 ``* ``L``[``i``] ``* ``Ny``)`
`        ``Relative_vX``[``j``] ``= ``Relative_vX``[``j``] ``- ``(``2 ``* ``L``[``j``] ``* ``Nx``)`
`        ``Relative_vY``[``j``] ``= ``Relative_vY``[``j``] ``- ``(``2 ``* ``L``[``j``] ``* ``Ny``)`
`        `
`        ``Ball_vX``[``i``] ``= ``(``Relative_vX``[``i``] ``+ ``Cx``)`
`        ``Ball_vY``[``i``] ``= ``(``Relative_vY``[``i``] ``+ ``Cy``)`
`        ``Ball_vX``[``j``] ``= ``(``Relative_vX``[``j``] ``+ ``Cx``)`
`        ``Ball_vY``[``j``] ``= ``(``Relative_vY``[``j``] ``+ ``Cy``)  `
`        `
`        ``Ball_X``[``i``] ``= ``Ball_X``[``i``] ``+ ``Nx ``* ``(``Ball_Diameter``-``Distance``)`
`        ``Ball_Y``[``i``] ``= ``Ball_Y``[``i``] ``+ ``Ny ``* ``(``Ball_Diameter``-``Distance``)`
`        ``Ball_X``[``j``] ``= ``Ball_X``[``j``] ``- ``Nx ``* ``(``Ball_Diameter``-``Distance``)`
`        ``Ball_Y``[``j``] ``= ``Ball_Y``[``j``] ``- ``Ny ``* ``(``Ball_Diameter``-``Distance``)`
`      ``EndIf`
`    ``EndFor`
`  ``EndFor`
`EndSub`
` `

If this is not clear then perhaps avoid this or consider trying using a physics engine to do it for you, such as the LDPhysics (Box2D) method.

===============

Here are all the winning Small Basic articles from November:

 Small Basic Technical Guru - November 2013
 litdev Dynamic Graphics Ed Price: "Incredibly detailed. A fantastic resource to keep coming back to! From the comments: "Wanted to say WOW - this is great!" and "Awesome. Thanks"" Nonki Takahashi How to Make a Check Box Ed Price: "Well formatted and in-depth how-to article! Great job!" Joe Dwyer Why Small Basic is a great programming language for beginners Ed Price: "A well-articulated value statement for Small Basic! Thanks, Joe!"

Congratulations to litdev, Nonki and Joe!

Also worth a mention were the other entries this month:

You can find all the Guru winners (for all the Microsoft technologies) here: TechNet Guru Awards - November 2013

Thanks again to LitDev!

- Ninja Ed