I started programming many years ago. Now I'm trying to make games. I have read many recommendations to start cloning some well known games like galaga, tetris, arkanoid, etc. I have also read that I should go for the whole game (including menus, sound, score, etc.).
Yesterday I finished the first complete version of my arkanoid clone. But it is far from over. I can still work on it for months (I program as a hobby in my free time) implementing a screen resolution switcher, remap of the control keys, power-ups falling from broken bricks, and a huge etc.
But I do not want to be forever learning how to clone ONE game. I have the urge to get to the next clone in order to apply some design ideas I have come upon while developing this arkanoid clone (at the same time I am reading the GoF book and much source code from Ludum Dare 21 game contest).
So the question is: Should I keep improving the arkanoid clone until it has all the features the original game had? or should I move to the next clone (there are almost infinite games to clone) and start mending the things I did wrong with the previous clone?
This can be a very subjective question, so please restrain the answers to the most effective way to learn how to make my own games (not cloning someone ideas). Thank you!
CLARIFICATION
In order to clarify what I have implemented I make this list:
Features implemented:
Bouncing capabilities (the ball bounces on walls, on bricks, and on the bar).
Sounds when bouncing on bricks and the bar, and when the player wins or loses.
Basic title menu (new game and exit only). Also in-game menu and win/lose menus.
Only three levels, but the map system is so easy I do not think it will teach me much (am I wrong?).
Features not-implemented:
Power-ups when breaking the bricks.
Complex bricks (with more than one "hit point" and invincible).
Better graphics (I am not really good at it).
Programming polishing (use more intensively the design patterns).
Here's a link to its (minimal) webpage: http://blog.acamara.es/piperine/
I kind of feel ashamed to show it, so please do not hit me too hard :-)
My question was related to the not-implemented features. I wondered what was the fastest (optimal) path to learn. 1) implement the not-implemented features in this project which is getting big, or 2) make a new game which probably will teach me those lessons and new ones.
ANSWER
I choose @ashes999 answer because, in my case, I think I should polish more and try to "ship" the game. I think all the other answers are also important to bear in mind, so if you came here having the same question, before taking a rush decision read all the discussion.
Thank you all!