Exercise tetris

For the difference in rotation points, that can be solved by letting the point of rotation be the origo (allowing negative coordinates). In a perfect model, the 180d rotation of S and Z would be identical to the 0d rotation but I see your point. Fun thing about programming is that there are always multiple solutions ;) I however think that commenting which shape is which would be useful, as well as making sure that the rand int will only accept valid values even when extended.

Optimizing memory or performance is not really important in any of these examples I think.