share
Game DevelopmentWhat are some good resources for getting a beginner started in developing games?
[+52] [11] Daniel X Moore
[2010-07-14 19:26:03]
[ books tutorials ]
[ http://gamedev.stackexchange.com/questions/41] [DELETED]

I'm looking for books, websites, tutorials, anything that will aid in beginning the journey from novice to expert.

Starting from where? Absolutely no experience in anything relating whatsoever? Or competent in some aspect of programming? - Noctrine
Starting from some basic programming experience. - Daniel X Moore
Thanks for the question, awesome source list gathered below. - Atilla Filiz
[+29] [2010-07-14 20:13:57] pctroll [ACCEPTED]

Websites:

GameDev.net [1] is definitely [one of] the best websites out there to begin your journey. As a matter of fact, I'd recommend reading the whole beginner's section and continue with the book section to get the idea on what you want to get specialized.

It's important to participate actively on forums. You get help from others and eventually you'll start helping other people; and that's how you learn the most: helping and teaching.

Game Career Guide [2] IMHO, is the number one resource to find schools on game development around the globe and get first-hand information on how to get "the party" started in the academia. They also got a good deal of articles that are worth reading.

Gamasutra [3] is a great portal for game development professionals. You can find job offers, news about the industry, game's postmortems, in-depth analysis (from the development side). That information help not only the professional, but the aspiring professional to get an idea about the field.

Books

I'd recommend reading " Game Development Essentials: An Introduction [4]" and continue with " Introduction to Game Development [5]". Why? Because these books talk about the whole deal. Games are software, but you also have to know about the jobs your partners from design, art and sound do.

From that point, you'll decide what suits you best: Coding/Designing/Art/Sound, DirectX/OpenGL, XNA/SDL/Allegro, etc.

A common recommendation among experienced developers: specialize. If you like programming, learn how to program well first (math, algorithms, graphs, object-oriented programming) and continue with games (because you need to know how to solve problems which get down to these 'basic' stuff). However, you can make games with the system console ;-). Use your imagination.

The same happens with art/graphic design, sound, writing. You'll get a wider set of tools on your field if you open your mind and absorb all the knowledge you can on your area of expertise.

Finally, I agree with Tetrad: "the best resource is experience". Hope it helps.

[1] http://www.gamedev.net/
[2] http://www.gamecareerguide.com/
[3] http://www.gamasutra.com/
[4] http://rads.stackoverflow.com/amzn/click/1418042080
[5] http://rads.stackoverflow.com/amzn/click/1584506792

Where is the Beginner's Section on gamedev.net? Do you have a link? - jumpnett
1
[+25] [2010-07-14 19:53:42] David McGraw

My post is directed in how to approach game development.

New to programming? How about a Language
Decide what language you would like to use. The basis for this answer will revolve around what you really want to do. Do you want to create XBLA games? Then you're going to learn C#. Do you want to create Android games? Then you're going to need to learn Java. How about iPhone games? You'll need to learn Objective-C.

At this point I wouldn't worry about what is hard and what is not. If you really want to make games pick a language and go. There are plenty of resources out there which will teach you the syntax.

Starting on the right foot
Many people have really ambitious dreams when they start game development. "I want to create a Game Engine!" You absolutely need to start small. Learn the boring stuff and attempt to find ways to give yourself some eye candy.

What this means is that if you choose C++, spend a lot of time with the language. Learn pointers, learn memory management, play with complexity of algorithms. Go find an open source project, download it, and see how they structured their game.

Along the way, do fun things. Create a console based adventure game that actually uses what you've learned.

If you have experience programming
Create a clone of a 2D game (2D! NOT 4D!). Pick one. Breakout? Tetris? Add your own twist to the game. The biggest key that I can tell you is to start small and work your way up. Create a project, show it to some people on gamedev.net [1] and get feedback.

Once you think you've got it down, then jump into the 3D realm. 3D is extremely hard. If you're new you are going to face plant yourself just has hard.

But I'm an Artist, or Sound guy!
There are plenty of programmers out there that are tired of looking at their own programmer art and listening to some really crappy effects they found online. Go to tigsource.com and meet some people. But be humble about it. If you have no experience in games and little industry experience, don't expect to get paid. Independents love what they do. So much that they don't really focus on the money initially.

Conclusion

  • Be prepared to experiment a lot
  • Crawl before you walk
  • Be humble and help people for free to get experience
  • Be patient
  • Be a regular on tigsource.com [2] and gamedev.net [3]
[1] http://www.gamedev.net
[2] http://www.tigsource.com
[3] http://www.gamedev.net

Assuming you meant 3D and not 4D? :P - Mazen Harake
I'm trying to imply that you don't want to do the hardest thing first. - David McGraw
2
[+20] [2010-07-15 11:17:49] Firas Assaad

Some tutorials and other resources from my browser bookmarks:

[1] http://chortle.ccsu.edu/VectorLessons/vectorIndex.html
[2] http://pixwiki.bafsoft.com/mags/5/articles/circle/sincos.htm
[3] http://www.flipcode.com/documents/matrfaq.html
[4] http://www.euclideanspace.com/
[5] http://www.gamerendering.com/
[6] http://www.siggraph.org/education/materials/HyperGraph/toc.htm
[7] http://www.permadi.com/tutorial/raycast/
[8] http://realtimerendering.com/index.html
[9] http://www.cgafaq.info/wiki/Main_Page
[10] http://www.policyalmanac.org/games/aStarTutorial.htm
[11] http://www.parashift.com/c++-faq-lite/index.html
[12] http://wiki.gamedev.net/index.php/C_plus_plus%3aModern_C_plus_plus
[13] http://wiki.gamedev.net/index.php/Main_Page
[14] http://www.devmaster.net/articles.php
[15] http://www.geeks3d.com/20100418/game-engine-multi-threading-programming-resources/
[16] http://www.toymaker.info/Games/index.html
[17] http://www.xbdev.net/index.php
[18] http://triplebuffer.devmaster.net/list.php?display=s&page=0
[19] http://www.32bits.co.uk/
[20] http://wiki.gamedev.net/index.php/D3DBook%3aBook_Cover
[21] http://knol.google.com/k/hlsl-shaders#
[22] http://www.riemers.net/
[23] http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html
[24] http://www.falloutsoftware.com/3D-OpenGL-Tutorials.htm
[25] http://www.sjbaker.org/steve/omniv/
[26] http://www.swiftless.com/
[27] http://www.songho.ca/opengl/index.html
[28] http://www.lighthouse3d.com/opengl/tutorials.shtml
[29] http://www.opengl3.org/wiki/Main_Page
[30] http://learningwebgl.com/blog/
[31] http://blog.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/
[32] http://www.tonypa.pri.ee/tbw/start.html
[33] http://lazyfoo.net/SDL_tutorials/index.php
[34] http://www.cs.clemson.edu/~malloy/courses/3dgames-2007/tutor/
[35] http://www.flipcode.com/articles/scripting_issue01.shtml
[36] http://www.lua.org/pil/index.html
[37] http://www.ozone3d.net/tutorials/
[38] http://gameprogrammingpatterns.com/index.html
[39] http://www.reddit.com/r/programming/comments/akmli/ask_proggit_how_do_professional_game_loops_work/
[40] http://gamecode.tripod.com/tut/
[41] http://www.gaminghorror.net/indie-game-developer-resources/
[42] http://www.sloperama.com/advice.html

(3) Thanks, Google! Seriously though, this isn't super helpful. If I listed every website on the internet it would be similar to this - Joe Philllips
3
[+16] [2010-07-14 19:41:35] Koonsolo
[1] http://en.wikipedia.org/wiki/Game_development
[2] http://gpwiki.org/
[3] http://www.gamedev.net/
[4] http://gamasutra.com/
[5] http://www.devmaster.net/

4
[+6] [2010-07-14 21:12:53] munificent

It isn't finished, but my book [1] has some chapters online that may help you.

[1] http://gameprogrammingpatterns.com/

That's a remarkably well written draft. I've already read what you have. When do you plan to get back to it? - Leonardo Herrera
No firm plans, but I've been getting the itch lately. Writing is unbelievably time-consuming (each chapter here is about 30 solid hours of work) and I don't have a lot of free time. - munificent
5
[+4] [2010-07-14 19:33:51] SoulBeaver

I have browsed some of these things. If nothing else, it'll give you a list of things you probably want to look up ^^

http://www-cs-students.stanford.edu/~amitp/gameprog.html


6
[+2] [2010-07-14 19:41:00] chiguire

I think the best place to start learning to develop games is Gamedev.net, specially its For Beginners section: http://www.gamedev.net/reference/start_here/

If you already know how to program, I found this article specially enlightening when I started: http://www.gamedev.net/reference/design/features/makegames. It tells you the path you have to follow to start programming the most simple game ever.

After you start doing your first game, you will find that the GameDev forums are very good to search for questions and asking for them (but probably this Q&A site will set a higher bar ;-) ).


Both your links are dead now; also, GDNet's "Start Here" page has been woefully out of date for a long time, unfortunately. - Josh Petrie
7
[+2] [2010-07-14 19:31:46] Tetrad

Well first off it depends on what subset of game development you're talking about. The path is going to be different if you're trying to become an artist, designer, programmer, etc.

Either way, though, the best resource is experience. Try, fail, research, try again.


8
[+2] [2010-07-15 05:40:58] Fuu

For a novice coming into Game Design, and not necessarily programming so much, The Art of Game Design [1] is one of my favorite books(!) of all time. It's good to remember that game design can be done with pen and paper and that a finished game doesn't need to involve programming at all. Jesse Schell has incredible insight into the design and development process, and most of all about how to make games fun and rewarding. The added card deck of 'lenses' accessory is worth it too.

[1] http://artofgamedesign.com/

9
[+2] [2012-01-13 04:41:43] Rogerdodger91

First you need to ask yourself some questions regarding where to start.

What language do I want to program with?

There are pros and cons to each and every language in regards to programming.

Ill list them off.

C/C++ Pros:

  1. Powerful Language with alot of freedom to tweak and modify code that is close to the hardware for better system performance.

  2. A bunch of libraries, APIs, open source projects out there to help you start out.

  3. Alot of programmers prefer to use this language. You are more likely to find more people willing to work on a project with you if its written in C++.

  4. Portability with the right API and code structure. Every platform out there pretty much supports C++. Xbox, Playstation, Wii, Linux, Windows, IOS, Android. The list goes on. When it comes to portability, C++ is definitely the champ everytime. The only thing that really has to change is either your compiler, or the libraries. Libraries like SDL, naturally make the porting almost painless in alot of regards. You cant write a PS3 game in pascal because simply the SDK sony created doesnt support it. (correct me if im wrong).

Cons

  1. C/C++ is a tough language. Its hard to read and follow up on whats truly going on alot of the time. The fact is, computers are complicated and C++ does absolutely nothing to try and make them less complicated. You are close to the hardware when you code with C++. There is alot of stuff going on under the hood you need to know about and unless you are a professional computer scientist you might end up spending more time fixing code then creating code. Its just really hard to use this language efficiently if you are new to programming. And if you arent using your time efficiently with C++, you are going to be stuck in development hell before you know it.

    1. Memory management. This is a pro/con type thing. One one side, you gain alot of areas to tweak for performance. On the other side, if you dont know what your doing. You can end up with random crashes, and memory leaks. Alot of your time will be spent here tweaking, and if you dont treat your code like its your baby which you dont mind bringing it to perfection the hard way. You will get bored and uninterested, thus back to development hell.

C# Pros:

  1. XNA. Its a great introduction to game programming. It really takes you away from alot of the under the hood stuff. There are alot of online resources and tutorials. Also once you get good at XNA you can always move on to SlimDX if you want to use a more modern version of DX3D like 10 or 11. Theres no need to now, but eventually you might like to.

    1. Intellisense, your best friend in the coding world. No longer do you have to go and open up a doc or a reference to figure out what method does what.

    2. You can create a game and upload it to Xbox live indie game market place.

    3. No need to worry to much about memory and garbage collecting. Alot of this stuff is handled for you.

Cons:

  1. Some will say that portability is the bane of C#. XNA is technically only for Windows platforms. There are projects for Linux/Unix systems(sony, IOS/MacOSx, android, all fall under the Unix family) that allow porting of XNA games. The mono project is the answer to this. There is monoGame, Playstation Suite sdk, and other things coming out but they are still in their infancy. But typically if you end up developing on XNA, your targeting windows.

    1. Refactoring. Plain and simple, your code can be reconstructed back into source code. I remember doing this with a game called Terraria. All i had to do when it first came out, was download a program, refactor the .exe and then i was looking at source code.

15 minutes of tweaks later, and I had a game that would not require steam to run and would could distribute to the world. Did I leak it? No. But other people did. And it was easy. Does it still happen now? Probably. Its not hard to go in and take DRM out. There are programs that provide obfuscation. But they arent completely fool proof.

  1. C# runs on a virtual machine. You are losing performance, just by using the language itself. On platforms where memory is a serious constraint. You are not getting the full potential out of your programs. There isnt much you can do about it. Alot of diehard programmers call C# a bloatware language for this fact. To each their own though.

Java: You can pretty much compare Java with C# so ill skip this language.

Python: Pros:

  1. I love this language. Its just so pretty, and easy to grasp. Its definitely where every programmer should start. This is a language where you actually have fun. Everything just feels natural.

    1. It is a dynamic runtime language that is compiled down to another language. For instance, CPython(C), JPython(Java), IronPython(CLI i.e.C#). This means, you can code in another language and use python within it. Alot of people use this for scripting because its just so easy to read and grasp whats going on.

    2. There are ALOT of great modules(libs) out there. Almost anything thats on one language has a python implementation. SDL begot Pygame. QT begot PyQT. Ect ect. People love this language, and you have a huge number of resources out there.

Cons:

  1. Can have really slow compile times.
  2. Bugs. The language does grow, and bugs do come up alot. Nothing you can do about it. For instance, on Ubuntu 11.10 I can not figure out for the life of me, how to fix a bug in pythons packaged IDE idle where you try to display auto complete with alt+space and it crashes on you. It can be frustrating. And of course when something is changed in the core language, if you have other modules installed you have to wait for them to reflect those changes. Either that, or fix them yourself. Which is a nuisance.

  3. Python can be hard to migrate from to other languages. If you program with python and move to other languages. You find yourself thinking about alot of problems the Python way. The philosophy for python is there should only be one obvious way to do it. And for the most part the language sticks true to that philosophy. You may find yourself handicapped in that aspect when using another language.

    1. Ive had a hard time finding an IDE that I like for python. Idk why but every time i feel like I find one I like. There is just something about it that irritates me. Python tools for visual studio doesnt generate the auto-complete for pygame correctly.

IDLE is annoying and bug infested. Its interface is terrible and ugly.

I do like Pydev/aptana3 however. Ive been using it and havent found any gripes yet. But surely that will change.

Idk know much about the other languages out there. I dont use any of them like Ruby, Pascal, OCaml, ect. So i cant really comment on them.

So once you pick a language, here are my recommendations on starting points.

C/C++:

lazyfoo . net/SDL_tutorials/index.php

C#:

riemers . com

xnaresources . com/

xnagpa . net/xna4rpg.php

Python:

cs.simpson . edu/files/CS_Intro_Book.pdf

Also a very interesting thing, if you want to get a better look at how all the low level computer stuff works. This course was a true eye opener. There is alot you can learn from here. I do warn that its very complicated and challenging. But very rewarding as well.

www1.idc . ac . il/tecs/plan.html

(Delete the spaces, reputation still too low. :'( Sorry for dodging the spam limit for newcomers. But my links are great resources and the post wouldnt be as rewarding without them.)


10
[+1] [2011-05-02 20:27:48] Francesco R.

I would add the python [1] language to the list, with its popular game library pygame [2]. Python is a vibrant ecosystem, suitable for a huge range of projects, including gaming.

Pygame has a rapid learning curve and it's excellent to beginning video game programming.

Happy coding! Francesco

[1] http://www.python.org/
[2] http://www.pygame.org/news.html

11