I'm going to give this a shot as I think that rigid bodies are a viable solution. Start with a cylinder, scale it as needed but keep in mind that sometimes Blender can act strangely with objects that are too small with rigid body sims.
Next, add an array modifier, I used a count of 8, with an offset of 1.5 on the x
and y
axis, respectively. We are adding two identical arrays before applying them. The stack will look like this:
Apply the array modifiers in the order they were added, and Tab into edit mode, press A to select all, then P by loose parts. Now go back to object mode, it's time for physics.
Start by selecting your ground plane,add collision and then set it to passive in the rigid body settings(you can also go to the tool panel (T) physics>add passive).

Now select one of the cylinders, and again go to physics>rigid body> and set it to active. Now select the rest of the cylinders, and select copy from active in the rigid body setting in the tool panel.

With all of the cylinders still selected, press Shift+Ctrl+Alt+C>origin to geometry.
- Before you go any further, press Ctrl+A and
apply scale to your objects to help prevent intersection between the collision object and other active objects.
Finally, place the group of cylinders where you want them to fall from/ be thrown from and start the animation. It may take some tweaking the rotation to get the perfect effect as they hit the ground, but it works pretty well. Don't forget that the mass of the object influences it's role in the simulation also, so you can play with that too if you like. After following these steps, you should be able to get something like the following .gif:
Here is the .blend if you would like to reference it.
