I am only a teenager but I want to make indie games. I do not mean big 3D games but simple creative games like fez, super-meat boy, minecraft, world of goo stuff like that. Now obviously when I simple I understand that these games are incredibly hard to create, I mean that they have a simple concept.
Over the past few months I have experimented with a bit of java, c++ and unity, however I still don't know much about them and have confused myself slightly. Really what I want to know is:

Step 0: Have vision.Step 1: Design a game or have a game idea you want to make.Step 2: Build the game according to your game designStep 3: Test and revise your game over and over again until it's exactly what you wantStep 4: Market and release the game to the world

Naturally, step 2 is going to be the most difficult step to do because it's going to require a bunch of skills which you may not necessarily have at the moment. That's okay. This is where you teach yourself everything you need to know, or find people who have the skills you need and you can convince them to work on the project. You'll be learning the exact skills you need and you'll be building your project at the same time, so you get two birds with one stone. You'll go through some learning pains, you'll experience frustration, moments of glee and excitement, your project may succeed or fail, but if you stick with it, you'll learn a ton along the way, gain valuable experience, and possibly a marketable product to sell.

Bottom line: just do it.An "Indie developer" is just a title which you can take upon yourself. It means nothing, really. What matters is what you create.

As for languages & platforms, I recommend Unity3D with C#, or C# with XNA.

As for producing your game, you're going to need programming, art, music and sound, and possibly writing.

The best advice I can give you is to keep your game simple enough for a single person and beginner to complete. A polished and completed yet simple game is infinitely more valuable than a complex but incomplete, unpolished game. Keep your features/requirements few! Think along the lines of old atari games, like "Pacman", "Breakout", "Tetris", "centipede", etc. and add your own small twist to the design. Then once you start, punch yourself in the face every time you think about wanting to add a new feature (its a project management thing, not a crutch on creativity).

Step 0: Have vision.Step 1: Design a game or have a game idea you want to make.Step 2: Build the game according to your game designStep 3: Test and revise your game over and over again until it's exactly what you wantStep 4: Market and release the game to the world

Naturally, step 2 is going to be the most difficult step to do because it's going to require a bunch of skills which you may not necessarily have at the moment. That's okay. This is where you teach yourself everything you need to know, or find people who have the skills you need and you can convince them to work on the project. You'll be learning the exact skills you need and you'll be building your project at the same time, so you get two birds with one stone. You'll go through some learning pains, you'll experience frustration, moments of glee and excitement, your project may succeed or fail, but if you stick with it, you'll learn a ton along the way, gain valuable experience, and possibly a marketable product to sell.

Bottom line: just do it.An "Indie developer" is just a title which you can take upon yourself. It means nothing, really. What matters is what you create.

As for languages & platforms, I recommend Unity3D with C#, or C# with XNA.

As for producing your game, you're going to need programming, art, music and sound, and possibly writing.

The best advice I can give you is to keep your game simple enough for a single person and beginner to complete. A polished and completed yet simple game is infinitely more valuable than a complex but incomplete, unpolished game. Keep your features/requirements few! Think along the lines of old atari games, like "Pacman", "Breakout", "Tetris", "centipede", etc. and add your own small twist to the design. Then once you start, punch yourself in the face every time you think about wanting to add a new feature (its a project management thing, not a crutch on creativity).

Thanks this is really helpful, I have been watching some c++ tutorials lately, is this a bad idea? So far I understand everything.

Remember no idea is a bad idea, but the complexity of even the simplest ideas can confuse you; so be sure to make good use of planning.

When planning make sure if you have an idea don't just say okay that's one idea. Break it down and figure out all the parts to it; this will keep you from overwhelming yourself and making sure you are thinking one step at a time.

This will keep you on task. You can even set deadlines for yourself, but don't make them to close together; give yourself time! remember fez took 5 years with 2 people. Even the greatest simplicity can be very overwhelming.

Thanks this is really helpful, I have been watching some c++ tutorials lately, is this a bad idea? So far I understand everything.

Lot's of people will tell you C++ is not for beginners but it's in fact just fine. Since you already know JAVA you should breeze right through it anyway.

I recommend if the game is 3d that you use C++ & OpenGL & Bullet PhysicsIf the game is 2d then C++ & SDL

SDL is a library that does pretty much everything, control input, image loading, audio output, 2d graphics and more. It makes your code really portable because you need to make absolutely no OS specific calls.

I recommend you start with a platformer, that will teach you how a game works then you can move on to 3d if you so choose.

you know you program too much when you start ending sentences with semicolons;

Since you already know JAVA you should breeze right through it anyway.

... I don't see how you can just "breeze right through" manual memory management. I mean, I'm not trying to paint it as something overly difficult, but it's definitely not as trivial as you're making it sound.

That's one option, but I wouldn't recommend it: If you have an internet connection, you have access to everything that you need, and there's really no need to give exorbitant sums of money to some academic institution.

But that's just my opinion.

As for where you should start: It doesn't really matter, as long as you start somewhere. You could take a look at my Python 3 video tutorial series, or you could try something else. Whatever you do, understand that it will probably take years before you're able to produce something of significance.

And on that note, I think it's worth mentioning: Programmers who worked on the projects you referenced (fez, super-meat boy, minecraft) have all been programming for ~10 years before they actually managed to make those games; That's about how long it takes to reach a level of competence/productivity where you could make something like that on your own, or with someone else.

Since you already know JAVA you should breeze right through it anyway.

... I don't see how you can just "breeze right through" manual memory management. I mean, I'm not trying to paint it as something overly difficult, but it's definitely not as trivial as you're making it sound.

Allthough modern C++ does allow you to use it like a very high level language aswell (Which is reasonably easy), Just because the language allows you to mess around at a lower level doesn't mean you have to do it.

in my opinion the biggest problem with C++ for beginners is the quality of tutorials online (most of them are crap and will push beginners towards low level features of the language far too early or worse, teach them the unsafe C way of doing things before or instead of the safer C++ equivalents) and the unnecessarily obnoxious build model. (a very large number of beginner problems with C++ are related to the Linker, not the language)

If someone wants to start by learning a low level language they should imo start with assembly on a less complex platform than the modern PC and not worry too much about making games, If the goal is to learn how to make games then a high level language is the better option. (C++ can be that high level language but you really want a good book or a qualified teacher/tutor to guide you around the pitfalls)

I don't suffer from insanity, I'm enjoying every minute of it.The voices in my head may not be real, but they have some good ideas!

You should start with one or more "random" projects. All of us have several of them. By random - I mean just a project where you experiment. Don't try to build anything too specific, just put things on the screen and just see where your mind takes it. In a year or so I guarantee you'll be doing all kinds of awesome things.

I assure you that many guys on this site have done this, and I think it is very underrated.

I remember my first "random" project. I started out trying to render a grid... which became terrain... which became detailed terrain... which became terrain with physics (I randomly tried PhysX)... then I tried out putting vehicles on the terrain... then I started playing with sound... then I started browsing for free 3D vehicle models on turbosquid... then I started browsing for free 3d building models... then my terrain became a city with vehicles... then I got into more advanced things like pathfinding and artificial intelligence so vehicles could drive around randomly... so on and so on.
you can move at your own pace, and eventually build up knowledge that you can use in real projects.

Thanks this is really helpful, I have been watching some c++ tutorials lately, is this a bad idea? So far I understand everything.

No, that's excellent. Treat the C++ tutorials as a teacher giving a lecture, then assign yourself homework to test your understanding of the tutorial content. However, don't forget that the point of following all of these tutorials is to learn how to build a game so that you'll build a game. There's a danger that you'll spend all of your time learning how to do things but won't ever actually build anything (a case of analysis paralysis). So, my advice is to start building stuff and when you run into a gap in your knowledge, then seek tutorials/references to fill that void Start simple with a "Hello World" type program (get stuff on the screen!).Then, look into what it takes to get multiple "Hello World" on the screen (like, 1000).Then, try to put a graphical image onto the screen (may take some R&D)Then, try to move that graphical image around on the screen (may take some R&D)Then, try to move that graphical image around based on user input.If you can do all this, you already have the necessary skills to build Pong.

Pong is an excellent game to start with. It's design is simple, the game is complete, and its attainable for newbies. You can focus on the structure of your game code and building a complete game framework. It's also a great introduction into concepts like AI, input, managing game states, graphics, game play, etc.

In my opinion, if you want to make simple 2D games you can use C++ & SDL as suggested before.I started learning java in college and when i came to C++ it just felt natural. If you comprehend what vectors are, object oriented programming, Cartesian plane, cicles, if...else, you might actually already have what you need to start developing games. If you want to take this C++SDL route i recomend you this page LazyFoo, very simple and very complete tutorials. Also check this youtube channel thecplusplusguy, again well explained and complete tutorials that takes you from starting your proyect to making a sidescroller game like Super Mario and more, the only thing about this channel is that this guy have a little "difficult" accent.

Allthough modern C++ does allow you to use it like a very high level language aswell (Which is reasonably easy), Just because the language allows you to mess around at a lower level doesn't mean you have to do it.

I'm not quite sure what you mean by "modern C++", but unless you have a GC system working behind the scenes, I'm pretty sure that you would still have to manage memory on your own. Right?

in my opinion the biggest problem with C++ for beginners is the quality of tutorials online (most of them are crap and will push beginners towards low level features of the language far too early or worse, teach them the unsafe C way of doing things before or instead of the safer C++ equivalents) and the unnecessarily obnoxious build model. (a very large number of beginner problems with C++ are related to the Linker, not the language)

Well, you have to know both (safe and unsafe) to make the distinction, and to see the benefits of one over the other. So, I think it's something that has to be covered, but not necessarily in a C++ tutorial; A good C tutorial should be used as a prerequisite.

If someone wants to start by learning a low level language they should imo start with assembly on a less complex platform than the modern PC and not worry too much about making games, If the goal is to learn how to make games then a high level language is the better option.

Teenager to teenager, I first started with a dream. A dream of an awesome game. That dream turned into a lot of writing - maybe about 100 pages of stuff about our game. Whilst designing, I picked up on Lua. After some coding of a basic engine, I though "Hey, this is way too slow for our expectations." So I ditched that engine, and went on to learning C++ as my first language. After reading a book in a month or so, I dove right in. I never thought once to start with something simple. For the past 2+ years I have been re-writing and writing new code from the first int main() I wrote.

I wouldn't say go brutal force on it, but definitely have a passion and enough effort. My friend wants to code with me, but lacks both.

Allthough modern C++ does allow you to use it like a very high level language aswell (Which is reasonably easy), Just because the language allows you to mess around at a lower level doesn't mean you have to do it.

I'm not quite sure what you mean by "modern C++", but unless you have a GC system working behind the scenes, I'm pretty sure that you would still have to manage memory on your own. Right?

It depends on what you mean by "manage memory", with smart pointers and RAII memory and resources get deallocated when the object/smartpointer holding them goes out of scope so memory management then only really includes allocating memory (Which you have to do in C# and Java aswell).

I don't suffer from insanity, I'm enjoying every minute of it.The voices in my head may not be real, but they have some good ideas!

The one thing that tutorials can't give you is feedback - so post code on here at gamedev.net. There are tons of smart developers on here who will give you feedback.There is also a "For Beginners" section on this site, check it out.

The only issue I have with online tutorials is that, as a beginner, you have no real way of discerning whether the information is correct or if you're being taught bad habits. That's not to say that there aren't great online resources out there, rather it would do you no harm to have a good quality, formal text book at hand and work through both in tandem.

If you are into 2D then my advice is to use lua-based LÖVE framework, it's just awesome for a rapid game prototyping. Lua is a simple language, so it would be easy to take a quick grasp of it. And there are many good open-source game projects written in Love2D. It's also cross-platform so you can release your games for Windows, Linux and Mac easily.

If you are into 2D then my advice is to use lua-based LÖVE framework, it's just awesome for a rapid game prototyping. Lua is a simple language, so it would be easy to take a quick grasp of it. And there are many good open-source game projects written in Love2D. It's also cross-platform so you can release your games for Windows, Linux and Mac easily.

I also recommend LOVE, its far easier to work with, than any other engine out there(besides maybe Game Maker).

I just want to say ALL of this information has been really helpful to me, and looking back to my original post I actually feel kinda nostalgic about this whole post.

Just to let you know, I experimented around a bit and am currently working on my first html5 game (although it is very basic)! Once again, thanks for all of your input, I can not wait to fully enter the world of game development.