TL;DR: In Warcraft 3 language: Either rush tier 2 for better programming skills, or focus on producing games even if they’re only tier 1… xD
I started out by trying to make a 2D tile-based MMORPG which isn’t too unlike what you want to make. I just sat down when I had gotten started and made a Character class and then everything just started popping up by itself after that. Characters lead to levels, levels lead to a small game where you walk around, that leads to more features, e.t.c. I’d say that I only really did one big mistake when I started, and that was to treat all code I wrote as permanent. I sat around doing a lot more thinking than writing, and in the end I always forgot something or simply changed my mind or came up with a new idea which made my old code obsolete. Today, I instead try to see programming kind of similar to sculpturing. You don’t start by cutting out details, you start by cutting out the general shape of the sculpture and leave the details to later. Don’t get stuck on one thing for too long, just move on to another part of the game. There are so many different parts, and you pretty much need to learn all of them to some extent. Start by making a minimal Player class, a Level class with tiles and a level loader/parser. By simply doing this, you’ll realize that you also need collision detection of some form, which obviously is related to both your Player class and your Level class. By now, you’ll realize just how wrong you made your Level and Player class. Then you add an inventory and equipable items. Bam, your player rendering is worthless. NPCs and other dynamic objects? Lots of collision testing needs to be reworked and optimized. A GUI? Wait, how do I get out all the data from my Player class and put it on the screen? And it goes on and on…
Start with Java2D, make something simple and runnable and move on the next part. This however isn’t meant to be a quick way to produce lots and lots of games though. It’s meant to be a way to learn how to code games quickly. The better you get, the less you’ll have to rewrite when you learn the right balance of flexibility and the time it takes to write something. I love game development. Some people love to make games. They’re kind of different. Obviously the goal is to make at least one game in the end, but one of them focuses on learning HOW to do that quickly, and the other on producing lots of games as you go.
In the end, I rewrote my character class dozens of times, I had wrote over 5 different versions of my Level class, a bunch of LevelRenderers, 3 somewhat functional GUI systems of different complexity, 3 different entity systems for game objects, e.t.c. They all had problems that I tried to solve in the end with the new version. I even “migrated” to LWJGL when I realized hit a performance wall with Java2D (the whole migration was actually triggered by wanting a zoom function in a map editor) However, this was really really tiresome, since I was still expecting my code to be “permanent”, and in the end, the game currently is only a bunch of test programs for different parts of it, and there were problems I never solved. Took me around 2 years I think until I gave up. What do I have now? Not a single complete game, but I’m a lot better prepared for my next game, and so far it’s moving a long without many real problems. Now I can understand that some people can’t program for 2 years and then end up with pretty much nothing and still want to keep on going, but that’s how it was for me, since I felt that I had learnt so much. You seem to really want to actually finish the game, so I’d say you have two choices here: Do as I did, aim high, use the game as a motivation to learn game programming quicker, but realize that by the time you have gained the skills to actually realize it you’ll probably have lost interest in the idea; or aim much lower than I did, the goal is primarily to complete the game as quickly as possible, but also of course also to learn as you go by.
Cas is probably going to tell you that I’m an idiot for telling you to program games without actually making games since he thinks people should complete their games, but I have gotta have done something right along the way since I’m kind of employed by him right now. >_> Anyway, try to ask for as little help as possible. Obviously, if you’re stuck on something for a long time, either work on something else (presumably concerning the same game) or ask about it here, but the more you figure out by yourself, the better. Maybe I’m completely forcing my own way of doing things onto you, but that’s my story at least.