I apologize in advance for the wall of text about to come. I've had an idea for a game for a while now, and am stuck at step 1 of game development: Choosing a language/engine. I've read a whole bunch of articles, comments, and posts, but everything recommends a different combination, and they all just give me more questions with less answers. I'm hoping someone here has some experience with what I'm trying to do, and can let me know what's what.

So, for the sake of this post, let's assume I'm writing something akin to one of the old Gameboy Colour Pokemon games, but with nicer graphics. Like Pokemon, with "Zelda: A Link to the Past" graphics. I've looked into the following options in terms of the technology:

  • C++ using SFML
  • Java using LWGl
  • Java using LibGDX
  • Python using PyGame

Each of the above has pros and cons, but I don't know which pros and cons apply to me. I am comfortable with any language and library, I already know a lot, and am more than happy to learn more. My three questions that are holding me back from making a decision are:

  • How do I choose a technology now without knowing that it can "handle the load" without chugging along? What if I choose Pygame, and 60% of the way through development I can't get the FPS above 15?
  • How do I know which engines are better suited to "2D Zelda/Pokemon" gameplay? I've been recommended 1000 different engines and libraries, but most of them are for 3D effects or insane physic (which I likely won't need).
  • How do I handle cross-platform stuff? I want to distribute on Windows/Mac, and Linux as well. Java is easier for this, but what if it's not performant enough (compared to C++)?

So, does anyone have experience with anything like this? Has anyone been where I am before? I want to get started, and dip my feet into the proverbial water, but I'm too held back by indecision on technology to get my toes wet.

If anyone can recommend an engine/language/toolset for me, and maybe point me towards some tutorials or guides, I would be greatly appreciative.

  • 2
    \$\begingroup\$ This question appeared borderline inappropriate to me because it's very similar to a "which technology" to use question, however, I think that perhaps there is a place for "how do I choose" or "how do I evaluate requirements," questions. Maybe. But what you have here is also several questions in one, and so I think you should break those questions up into individual, appropriately-phrased questions (and thus I voted to close this specific question). \$\endgroup\$
    – user1430
    Commented Aug 8, 2012 at 20:06
  • \$\begingroup\$ I recommend option B - Java using LWJGL, but I also recommend Slick2D ( slick.cokeandcode.com ) ( it rests on top of LWJGL ) , based on your project type. Also, you are currently suffering from Analysis Paralysis. Go start coding already! \$\endgroup\$ Commented Aug 8, 2012 at 20:19
  • 1
    \$\begingroup\$ A 2D game like Pokemon? As long as you write good code and don't plan to run on any super embedded platforms, performance is the least of your worries. Pick what you're comfortable with! If you want a recommendation, I'd like to toss MonoGame and C# out there (or XNA if you want Windows only) \$\endgroup\$ Commented Aug 8, 2012 at 20:23
  • \$\begingroup\$ Regarding Performance: Link to the Past could run on a 3 MHz Super Nintendo (!!!!). Your players will have machines 1000 times more faster, with far more memory, and optimized graphics processors. Performance is not going to be an issue for you. \$\endgroup\$
    – Jimmy
    Commented Aug 8, 2012 at 21:05
  • \$\begingroup\$ The fact that it's a 3.58 MHz processor makes a huge difference. ;) \$\endgroup\$ Commented Aug 8, 2012 at 21:59

5 Answers 5


My advice is to use the higher level language first. It will ensure that you will spend the most of the time around game-related topics instead of lower lever stuff (this is a pro!).

If it gives you good performance you are done; if not you can profile what slows things down (and is easier to profile a software written in an high level language).

Once you found your bottlenecks you can:

  1. rethink how the things work (design issue) and then rewrite the modules better (+1 knowledge)

  2. rewrite a module in a lower level language (interpeter issue), the module is a small part of software with a limited and well defined boundary and responsibility (+2 knowledge, +3 focusing)

  3. seek a better framework (framework issue), since the frameworks runs the most of the time in native code, probably the one you choosed was not so good. You have to rewrite some part of your application to deal with the fact that the framework changed: less changes => good designer (+4 knowledge, +2 learning speed)

  4. vaporize everything without leaving a trace and restart the project using a lower level programming language. You learnt so much from this failure that ultimately it's worth the efforts.

In my experience the chances are that you will touch the step 1. once or twice for high level stuff (no more if you are good enough) and the step 2. for fine-grained routines (even if not necessarily)


What about http://en.wikibooks.org/wiki/Super_NES_Programming ?

Seriously now, I followed a path similar to the one you are about to follow. PyGame is great for learning, there is absolutely no doubt about it, it's "Code The Correct Way" philosophy is extremely valuable when getting into game development.

I started a new SFML2.0 project last month and it would be really tiring to list all the things that having worked with PyGame before simplified the developing process for me.

But of course, it depends on your capabilities. I tried C++ game development before PyGame and, though even more unexperienced and young, I couldn't even get started. But it would be pointless to try to crash head first into C++ and game development at the same time without a pretty good reason, each one already has a ton of concepts, and even though Python also does, they are easier to learn (not because of less complexity but because Python's user-friendly design).

And I really plan to program a SNES game some time, but first I need to efficiently handle sprites inside arrays :D


Choose any you feel most comfortable with. From my own experience performance will be the last thing you will be troubled with.


Java vs C++ for cross-platform 2D game: I would recommend Java unless you're expert C++ programmer, because it's much easier to write code in Java - no pointers, very huge standard library compared to c++ and no cross-compiling required.

Java can be slower than C++, but that applies mainly at advanced programmers, because you have to handle more stuff on your own in C++ and if you don't know to program very well you can have much worse performance with C++. Main disadvantage that applies for Java is that it's memory hungry (cca 100MB is consumed by JVM), but that's not problem now, most of users have at least 2 GB ram.

Which engine to choose? I wouldn't recommend any, but don't choose anything that isn't accelerated by OpenGL. It very depends on you and game you are going to create. Just try all engines you find and choose one you liked at most. For 2D you don't even need any engine, because it's very easy to write it by yourself.

I didn't heard about libGDX before, but I think it will suits for your app.


Performance will likely not be an issue for you if you only plan on making a simple 2D RPG. If you do end up having performance issues, it's MUCH more likely that you've made a poor decision in your algorithm. The biggest effects on performance isn't the slight differences between languages in small-scale programs. Often, it's not the language, or the library, or even the hardware! Many times, if you want to optimize your program, you should first check to make sure that your algorithms aren't wasteful/illogical.

Basically, I think that you would be able to make the type of game that you want to make in any of those language/library setups. It really depends what you feel comfortable with!

The mantra that I've always been told is, 'don't worry about optimization until you have WORKING code'. Pick a language, pick a library, start learning and plugging away, get your game working on a basic level and see how it runs. If it isn't running as fast as you'd like, then check you code and see if you can rewrite your algorithm in a smarter, more efficient way!

From the options that you suggested, I personally think that Java is the most 'middle of the road' and it kind of lies between C++ and Python. But I think you can do what you want to do in any of those languages. :D

Good luck!


Not the answer you're looking for? Browse other questions tagged .