Game Development Stack Exchange is a question and answer site for professional and independent game developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

We're planning on developing a 2D, grid-based puzzle game, and although it's still very early in the planning stages, we'd like to make our decisions well from the beginning.

Our strategy will be to make the game available to as many platforms as possible, for example PCs (Windows, Mac and/or Linux), mobile phones (iPhone and/or Android based phones), game consoles (XBLA and/or PSN) PC will have an emphasis, but I believe that's the most flexible platform so that shouldn't be a problem.

So, what programming language, game engine, frameworks and all around tools would be best suited for our goal?

P.S.: I'm betting a set of tools won't cover ALL of them, and that there will still be some kind of "translating" effort for some platforms, but we'd like to know what the most far reaching are.

share|improve this question

closed as off-topic by Byte56 Jul 24 '13 at 21:39

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions that are about "which tech to use" are outside the scope of the site. For more information, see this meta post" – Byte56
If this question can be reworded to fit the rules in the help center, please edit the question.

also related:… – Tetrad Jan 1 '11 at 9:56

10 Answers 10

We have a thick C++ framework on top of a thin platform layer, also C++. Porting a game to a new platform is a matter of implementing a new platform layer, which because it's quite thin, it's quite fast to do.

Also, all of our dependencies are open source and cross platform libs, such as SDL, Ogg, LibPNG, etc.

For example, we have a Win32/DirectX platform, a SDL/OpenGL platform for Linux and Mac, working on an iOS platform for iPhone/iPad, and an android port would also be possible. For some time we had a Playground platform, meaning our framework ran on top of PlayFirst's Playground engine. This layered approach allows you to leverage whatever interface you have to the underlying hardware/OS, as long as you can draw a textured quad, get some input and play a sound, you're pretty much set.

I'll get flamed for this, but C++ is probably the most cross-platform language there is. Every architecture and OS most likely has a C++ compiler or gcc can be ported to it.

share|improve this answer
No flame, it's a correct statement and part of why we still use it. – Klaim Apr 14 '12 at 3:28

Just use Unity

share|improve this answer
The general impression seems to be that Unity is cool for 3D, but not so cool for 2D. And the question is about a 2D game – bluescrn Jan 1 '11 at 14:29
Considering I've shipped a 2D game with Unity (and so have other people:, I'm going to have to disagree with the general impression. Yes, there's no built in way of drawing batched animated sprites, but you can easily extend the editor to do it yourself. That, combined with the closest thing to real push-button cross platform compatibility and the low barrier to entry makes it the most obvious answer. – Tetrad Jan 1 '11 at 17:26
I have to agree. I've been reading this and this and using the 2D Toolkit and I must say that it's much easier to do 2D than I would have thought. – NoobsArePeople2 Jan 18 '12 at 4:56
Link only answer, comment redeems that enough I suppose. :/ – Byte56 Apr 16 '13 at 16:25

I've just found out about NME a few days ago in another question and thought it might be worth spreading the word. On the subject of multi-platform support, the frontpage states the following:

Choosing NME opens almost endless opportunities. Create one application and publish to Facebook, the iOS App Store, the webOS App Catalog, the Android Market, the Mac App Store, the Ubuntu Marketplace, NOOK Apps, the Chrome App Store, Steam and other marketplaces without writing specific code for each platform.

I haven't personally tested it yet, but it did strke me as being interesting for many reasons:

  • The API is very similar to Flash, which a lot of people are already familiar with. I've personally done many games in Flash / AS3 before and it's quite easy to learn and to work with.
  • It uses a language called Haxe which is apperently very similar to ActionScript 3, but can be compiled into a multitude of formats, including native C++.
  • The above, combined with a few intelligent pipelines set up for you by NME, allows it to be extremely multi-platform. On the PC you can target Windows, OS X and Linux, and on mobile you can target iOS, Android and webOS (while still getting native performance by using C++ with OpenGL ES under the hood). Finally it also allows web game development using either Flash or HTML5 canvas.
  • It's completely free.

I don't have much time to try it at the moment, so if someone does, it would be helpful if you could leave some feedback about it.

share|improve this answer

Well that depends, can you programming in C/C++, Obj-C and C#?

Unity3D is the best 1 size fits all but 2D games in it can be abit tricky (for a 2D game anyway).

If you are targeting the Xbox with XNA (aka the indie store) then you have to use C#. But you cant really use C# with iOS (except with unity). While you can use C/C++ for iOS you still need to use a little bit of Obj-C unless you use some sort of middle ware.

If you don't use an engine, I think the best thing to-do is write your own layer of abstraction. So that any calls to your library have to go through this middle layer, so when it comes time to port you just need to change the implementation of the abstraction layer and your game code is more or less intact.

share|improve this answer
Theoretically, xna touch allows xna games written in c# to run on ios thru mono. – Steve H Jan 1 '11 at 13:19
@Steve H, Good call, although this looks like it would lock out Android. – PhilCK Jan 1 '11 at 13:59
@PhilCK Mono can be made to run on both Android and iOS, and MonoGame supports them both. However, you will have to pay for a license from Xamarin. – Cole Campbell Mar 7 '13 at 21:10

Moai SDK is an open source framework and currently is able to publish to android, IOS and chrome. Moai would be able to be extended to cover hosts such as game consoles, depending on your skill and knowledge in those areas.

share|improve this answer

I would say your best language choice would be c#. You can use it to develop in Unity for a number of platforms. c# is also the language used in MonoTouch (for developing for iOS) and MondoDroid (not out yet but will let you target Android platforms). And, of course, c# can be used in XNA which lets you target XBOX 360 and Windows Phones.

That pretty much covers everything. There will still be work to do in the fact that you will be using different tools for manipulating game content, but your core game logic shouldn't need to change if it's all in c#.

oh and of course c# is used in Silverlight which would let you target the web also.

share|improve this answer
While it is a nice language, C# seems a fairly poor choice for cross-platform game dev, really. As well as performance issues on non-PC platforms, remember that you only have XNA available on a couple of platforms, and that you will be missing out on a huge number of potentially useful cross-platform libraries that would be available if you used C/C++. Yes, this means not supporting Windows Phone or Xbox Indie Games without a complete port (but is that really a big loss, from a sales point of view, when you can support pretty much anything else?) – bluescrn Jan 1 '11 at 14:26

Other answers have covered tools and languages pretty well, but on the graphics side of things, I'd definitely recommend making your (2D) graphics in a vector format and ensuring that they look good at small and large sizes. Too much detail scales down poorly, too little detail scales up poorly.

share|improve this answer

I know it's unpopular, but AS3 with Starling might be your answer for mobile, desktop and web. It's STUNNING and performs in ways that are surprising. I made and iOS kinect game that also ran on windows and android. There was nothing else that could handle the computational needs and was that cross platform. Also - you can hook in any Arduino projects seamlessly. Most people just have not noticed what Adobe has done to the flash / flash builder tools as of late....

share|improve this answer

Step one should probably be to make the game, at least a decent prototype, using your favourite tools/tech, for a single platform (or small number of platforms).

It's very easy to get bogged down in cross-platform tools/tech development. Focusing too much on cross-platformness before having a game is kind of like premature optimization. It's certainly worth thinking about early on, but don't spend all your time on it until you've actually got a game.

Trying to support every platform before knowing whether the game will be a success sounds like a high-risk strategy - especially if it's a simple low-budget game (where the cost of developing cross-platform systems could massively outweigh the cost of developing the game itself?).

Wouldn't it make sense to launch it on a small number of platforms, see how well it does, and determine if it's worth supporting the more challenging platforms (e.g. less powerful systems, those with arkward input devices, or those that require a complete port to C# or Java)

share|improve this answer

Flash and Java have very widespread support; they work on all PCs (more or less) and many mobile devices (more or less), and I'm sure they're about as easy to port to a console as any other project with a PC influence.

share|improve this answer
You're not going to get Java on a 360 or PS3, or the iOS platforms. Likewise for flash. As far as a language is concerned, I'd argue that C++ is much more portable in the general case, other than specifically XNA (but not XBLA). – Tetrad Jan 1 '11 at 8:52
Flash is sometimes used for stuff like UIs and minigames with middleware like Scaleform ( ). I'm not able to find much info on Java for consoles, although the PS3's Bluray support seems to involve a simple JVM. Regardless, you have to do a bunch of work to port anything to a console (less for the 360 if it's originally in XNA). If you design your code for portability, even switching languages in a port isn't infeasible. – Gregory Avery-Weir Jan 2 '11 at 7:15

Not the answer you're looking for? Browse other questions tagged or ask your own question.